[query] move EPO user/token into the datafield

This simplifies the WithQuery structure even more
parent 93586adc
Pipeline #7211 failed with stages
in 51 minutes and 40 seconds
......@@ -29,6 +29,9 @@ import PUBMED.Types qualified as PUBMED
import Test.QuickCheck (elements)
import Test.QuickCheck.Arbitrary
type EPOAPIToken = Text
type EPOAPIUser = Text
------------------------------------------------------------------------
-- | Main Types
-- TODO IsidoreAuth
......@@ -38,7 +41,7 @@ data ExternalAPIs = OpenAlex
| HAL
| IsTex
| Isidore
| EPO
| EPO (Maybe EPOAPIUser) (Maybe EPOAPIToken)
deriving (Show, Eq, Generic)
......@@ -55,11 +58,17 @@ instance FromJSON ExternalAPIs where
"HAL" -> pure HAL
"IsTex" -> pure IsTex
"Isidore" -> pure Isidore
"EPO" -> pure EPO
"EPO" -> do
mAPIUser <- o .:? "api_user"
mAPIToken <- o .:? "api_token"
pure $ EPO mAPIUser mAPIToken
s -> unexpected (String s)
instance ToJSON ExternalAPIs where
toJSON (PubMed mAPIKey) = object [ "db" .= toJSON ("PubMed" :: Text)
, "api_key" .= toJSON mAPIKey ]
toJSON (EPO mAPIUser mAPIToken) = object [ "db" .= toJSON ("EPO" :: Text)
, "api_user" .= toJSON mAPIUser
, "api_token" .= toJSON mAPIToken ]
toJSON t = object [ "db" .= toJSON (show t :: Text) ]
externalAPIs :: [ExternalAPIs]
......@@ -70,7 +79,7 @@ externalAPIs =
, HAL
, IsTex
, Isidore
, EPO ]
, EPO Nothing Nothing ]
instance ToSchema ExternalAPIs where
declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions
......
......@@ -27,7 +27,6 @@ import Data.Conduit.Internal (zipSources)
import Data.Swagger ( ToSchema(..) )
import Data.Text qualified as T
import Data.Text.Encoding qualified as TE
import EPO.API.Client.Types qualified as EPO
import Gargantext.API.Admin.Orchestrator.Types qualified as API
import Gargantext.API.Ngrams (commitStatePatch, Versioned(..))
import Gargantext.API.Node.Corpus.New.Types ( FileFormat(..), FileType(..) )
......@@ -157,16 +156,12 @@ addToCorpusWithQuery :: ( FlowCmdM env err m
addToCorpusWithQuery user cid (WithQuery { _wq_query = q
, _wq_datafield = datafield
, _wq_lang = l
, _wq_flowListWith = flw
, .. }) maybeLimit jobHandle = do
, _wq_flowListWith = flw }) maybeLimit jobHandle = do
-- TODO ...
$(logLocM) DEBUG $ "[addToCorpusWithQuery] cid " <> show cid
$(logLocM) DEBUG $ "[addToCorpusWithQuery] datafield " <> show datafield
$(logLocM) DEBUG $ "[addToCorpusWithQuery] flowListWith " <> show flw
let mEPOAuthKey = EPO.AuthKey <$> (EPO.User <$> _wq_epoAPIUser)
<*> (EPO.Token <$> _wq_epoAPIToken)
$(logLocM) DEBUG $ "[addToCorpusWithQuery] addLanguageToCorpus " <> show cid <> ", " <> show l
addLanguageToCorpus cid l
$(logLocM) DEBUG "[addToCorpusWithQuery] after addLanguageToCorpus"
......@@ -192,7 +187,7 @@ addToCorpusWithQuery user cid (WithQuery { _wq_query = q
let db = datafield2origin datafield
-- mPubmedAPIKey <- getUserPubmedAPIKey user
-- printDebug "[addToCorpusWithQuery] mPubmedAPIKey" mPubmedAPIKey
eTxt <- getDataText db (Multi l) q mEPOAuthKey maybeLimit
eTxt <- getDataText db (Multi l) q maybeLimit
-- printDebug "[G.A.N.C.New] lTxts" lTxts
case eTxt of
......
......@@ -22,6 +22,9 @@ import Gargantext.Database.Action.Flow.Types (DataOrigin(..))
import Gargantext.Prelude
import PUBMED.Types qualified as PUBMED
type EPOAPIToken = Text
type EPOAPIUser = Text
data Database = Empty
| OpenAlex
| PubMed (Maybe PUBMED.APIKey)
......@@ -29,7 +32,7 @@ data Database = Empty
| HAL
| IsTex
| Isidore
| EPO
| EPO (Maybe EPOAPIUser) (Maybe EPOAPIToken)
deriving (Eq, Show, Generic)
instance FromJSON Database where
......@@ -45,26 +48,32 @@ instance FromJSON Database where
"HAL" -> pure HAL
"IsTex" -> pure IsTex
"Isidore" -> pure Isidore
"EPO" -> pure EPO
"EPO" -> do
mAPIUser <- o .:? "api_user"
mAPIToken <- o .:? "api_token"
pure $ EPO mAPIUser mAPIToken
s -> unexpected (String s)
instance ToJSON Database where
toJSON (PubMed mAPIKey) = object [ "db" .= toJSON ("PubMed" :: Text)
, "api_key" .= toJSON mAPIKey ]
toJSON (EPO mAPIUser mAPIToken) = object [ "db" .= toJSON ("EPO" :: Text)
, "api_user" .= toJSON mAPIUser
, "api_token" .= toJSON mAPIToken ]
toJSON t = object [ "db" .= toJSON (show t :: Text) ]
instance ToSchema Database where
declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions
datafield2origin :: Datafield -> DataOrigin
datafield2origin (External Empty) = InternalOrigin Types.IsTex
datafield2origin (External OpenAlex) = ExternalOrigin Types.OpenAlex
datafield2origin (External (PubMed mAPIKey)) = ExternalOrigin (Types.PubMed mAPIKey)
datafield2origin (External Arxiv) = ExternalOrigin Types.Arxiv
datafield2origin (External HAL) = ExternalOrigin Types.HAL
datafield2origin (External IsTex) = ExternalOrigin Types.IsTex
datafield2origin (External Isidore) = ExternalOrigin Types.Isidore
datafield2origin (External EPO) = ExternalOrigin Types.EPO
datafield2origin (External Empty) = InternalOrigin Types.IsTex
datafield2origin (External OpenAlex) = ExternalOrigin Types.OpenAlex
datafield2origin (External (PubMed mAPIKey)) = ExternalOrigin (Types.PubMed mAPIKey)
datafield2origin (External Arxiv) = ExternalOrigin Types.Arxiv
datafield2origin (External HAL) = ExternalOrigin Types.HAL
datafield2origin (External IsTex) = ExternalOrigin Types.IsTex
datafield2origin (External Isidore) = ExternalOrigin Types.Isidore
datafield2origin (External (EPO mAPIUser mAPIToken)) = ExternalOrigin (Types.EPO mAPIUser mAPIToken)
-- | This isn't really used
datafield2origin _ = InternalOrigin Types.IsTex
datafield2origin _ = InternalOrigin Types.IsTex
------------------------------------------------------------------------
data Datafield = Gargantext
......
......@@ -87,9 +87,6 @@ data WithQuery = WithQuery
, _wq_lang :: !Lang
, _wq_node_id :: !Int
, _wq_flowListWith :: !FlowSocialListWith
, _wq_pubmedAPIKey :: !(Maybe Text)
, _wq_epoAPIUser :: !(Maybe Text)
, _wq_epoAPIToken :: !(Maybe Text)
}
deriving (Show, Eq, Generic)
......
......@@ -59,12 +59,11 @@ get :: ExternalAPIs
-- If the provider doesn't support the search filtered by language, or if the language
-- is not important, the frontend will simply send 'EN' to the backend.
-> Corpus.RawQuery
-> Maybe EPO.AuthKey
-> Text
-> Maybe Corpus.Limit
-- -> IO [HyperdataDocument]
-> IO (Either GetCorpusError (Maybe Integer, ConduitT () HyperdataDocument IO ()))
get externalAPI lang q epoAuthKey epoAPIUrl limit = do
get externalAPI lang q epoAPIUrl limit = do
-- For PUBMED, HAL, IsTex, Isidore and OpenAlex, we want to send the query as-it.
-- For Arxiv we parse the query into a structured boolean query we submit over.
case externalAPI of
......@@ -83,8 +82,10 @@ get externalAPI lang q epoAuthKey epoAPIUrl limit = do
Isidore -> do
docs <- ISIDORE.get lang (Corpus.getLimit <$> limit) (Just $ Corpus.getRawQuery q) Nothing
pure $ Right (Just $ fromIntegral $ length docs, yieldMany docs)
EPO -> do
first (ExternalAPIError externalAPI) <$> EPO.get epoAuthKey epoAPIUrl q (toISO639 lang) limit
EPO mAPIUser mAPIToken -> do
let mEPOAuthKey = EPO.AuthKey <$> (EPO.User <$> mAPIUser)
<*> (EPO.Token <$> mAPIToken)
first (ExternalAPIError externalAPI) <$> EPO.get mEPOAuthKey epoAPIUrl q (toISO639 lang) limit
where
parse_query = first (InvalidInputQuery q . T.pack) $ Corpus.parseQuery q
......
......@@ -62,7 +62,6 @@ import Data.List qualified as List
import Data.Map.Strict qualified as Map
import Data.Set qualified as Set
import Data.Text qualified as T
import EPO.API.Client.Types qualified as EPO
import Gargantext.API.Ngrams.Tools (getTermsWith)
import Gargantext.API.Ngrams.Types (NgramsTerm)
import Gargantext.Core (Lang(..), NLPServerConfig, withDefaultLanguage)
......@@ -132,14 +131,13 @@ getDataText :: (HasNodeError err)
=> DataOrigin
-> TermType Lang
-> API.RawQuery
-> Maybe EPO.AuthKey
-> Maybe API.Limit
-> DBCmdWithEnv env err (Either API.GetCorpusError DataText)
getDataText (ExternalOrigin api) la q mAuthKey li = do
getDataText (ExternalOrigin api) la q li = do
cfg <- view hasConfig
eRes <- liftBase $ API.get api (_tt_lang la) q mAuthKey (_ac_epo_api_url $ _gc_apis cfg) li
eRes <- liftBase $ API.get api (_tt_lang la) q (_ac_epo_api_url $ _gc_apis cfg) li
pure $ DataNew <$> eRes
getDataText (InternalOrigin _) la q _ _li = do
getDataText (InternalOrigin _) la q _li = do
(_masterUserId, _masterRootId, cId) <- getOrMkRootWithCorpus MkCorpusUserMaster (Nothing :: Maybe HyperdataCorpus)
ids <- map fst <$> searchDocInDatabase cId (stem (_tt_lang la) GargPorterAlgorithm $ API.getRawQuery q)
pure $ Right $ DataOld ids
......@@ -151,7 +149,7 @@ getDataText_Debug :: (HasNodeError err)
-> Maybe API.Limit
-> DBCmdWithEnv env err ()
getDataText_Debug a l q li = do
result <- getDataText a l q Nothing li
result <- getDataText a l q li
case result of
Left err -> liftBase $ putText $ show err
Right res -> liftBase $ printDataText res
......
......@@ -137,7 +137,7 @@ instance Arbitrary CT.Database where
, pure CT.HAL
, pure CT.IsTex
, pure CT.Isidore
, pure CT.EPO ]
, CT.EPO <$> arbitrary <*> arbitrary ]
instance Arbitrary Datafield where arbitrary = genericArbitrary
instance Arbitrary WithQuery where arbitrary = genericArbitrary
......@@ -309,7 +309,7 @@ instance Arbitrary Orch.ExternalAPIs where
, pure Orch.HAL
, pure Orch.IsTex
, pure Orch.Isidore
, pure Orch.EPO ]
, Orch.EPO <$> arbitrary <*> arbitrary ]
-- instance Arbitrary NewWithFile where
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment