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