Commit b625ade6 authored by Alexandre Delanoë's avatar Alexandre Delanoë

Merge branch 'dev-ngrams-repo' of...

Merge branch 'dev-ngrams-repo' of ssh://gitlab.iscpif.fr:20022/gargantext/haskell-gargantext into dev-ngrams-repo
parents 4500b970 6ab0ec6a
Pipeline #180 failed with stage
...@@ -14,35 +14,36 @@ Import a corpus binary. ...@@ -14,35 +14,36 @@ Import a corpus binary.
{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE Strict #-} {-# LANGUAGE Strict #-}
module Main where module Main where
import Servant (ServantErr) import Servant (ServantErr)
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Database.Flow (flowCorpus) import Gargantext.Database.Flow (FlowCmdM, flowCorpus)
import Gargantext.Text.Parsers (FileFormat(CsvHalFormat)) import Gargantext.Text.Parsers (FileFormat(CsvHalFormat))
import Gargantext.Database.Utils (Cmd, connectGargandb, runCmdDevWith) import Gargantext.Database.Utils (Cmd, connectGargandb, runCmdDev)
import Gargantext.Database.Types.Node (NodeId) import Gargantext.Database.Types.Node (CorpusId)
--import Gargantext.Database.Schema.User (insertUsers, gargantuaUser, simpleUser) --import Gargantext.Database.Schema.User (insertUsers, gargantuaUser, simpleUser)
import Gargantext.API.Node () -- instances import Gargantext.API.Node () -- instances
import Gargantext.API.Ngrams (RepoCmdM) import Gargantext.API.Settings (newDevEnvWith, DevEnv)
import System.Environment (getArgs) import System.Environment (getArgs)
main :: IO () main :: IO ()
main = do main = do
[iniPath, name, corpusPath] <- getArgs [iniPath, name, corpusPath] <- getArgs
env <- newDevEnvWith iniPath
{-let createUsers :: Cmd ServantErr Int64 {-let createUsers :: Cmd ServantErr Int64
createUsers = insertUsers [gargantuaUser,simpleUser] createUsers = insertUsers [gargantuaUser,simpleUser]
_ <- runCmdDevWith iniPath createUsers _ <- runCmdDev env createUsers
-} -}
{- -- TODO missing repo var... let cmd :: FlowCmdM DevEnv ServantErr m => m CorpusId
let cmd :: RepoCmdM env ServantErr m => m NodeId
cmd = flowCorpus CsvHalFormat corpusPath (cs name) cmd = flowCorpus CsvHalFormat corpusPath (cs name)
r <- runCmdDevWith iniPath cmd r <- runCmdDev env cmd
-}
pure () pure ()
...@@ -72,6 +72,7 @@ import Gargantext.Prelude ...@@ -72,6 +72,7 @@ import Gargantext.Prelude
import Gargantext.API.FrontEnd (FrontEndAPI, frontEndServer) import Gargantext.API.FrontEnd (FrontEndAPI, frontEndServer)
import Gargantext.API.Auth (AuthRequest, AuthResponse, auth) import Gargantext.API.Auth (AuthRequest, AuthResponse, auth)
import Gargantext.API.Ngrams (HasRepoVar)
import Gargantext.API.Node ( GargServer import Gargantext.API.Node ( GargServer
, Roots , roots , Roots , roots
, NodeAPI , nodeAPI , NodeAPI , nodeAPI
...@@ -83,6 +84,7 @@ import Gargantext.API.Node ( GargServer ...@@ -83,6 +84,7 @@ import Gargantext.API.Node ( GargServer
, HyperdataAnnuaire , HyperdataAnnuaire
) )
--import Gargantext.Database.Node.Contact (HyperdataContact) --import Gargantext.Database.Node.Contact (HyperdataContact)
import Gargantext.Database.Utils (HasConnection)
import Gargantext.Database.Types.Node (NodeId, CorpusId, AnnuaireId) import Gargantext.Database.Types.Node (NodeId, CorpusId, AnnuaireId)
import Gargantext.API.Count ( CountAPI, count, Query) import Gargantext.API.Count ( CountAPI, count, Query)
import Gargantext.API.Search ( SearchAPI, search, SearchQuery) import Gargantext.API.Search ( SearchAPI, search, SearchQuery)
...@@ -163,9 +165,8 @@ makeMockApp env = do ...@@ -163,9 +165,8 @@ makeMockApp env = do
makeDevApp :: Env -> IO Application makeDevMiddleware :: IO Middleware
makeDevApp env = do makeDevMiddleware = do
serverApp <- makeApp env
-- logWare <- mkRequestLogger def { destination = RequestLogger.Logger $ env^.logger } -- logWare <- mkRequestLogger def { destination = RequestLogger.Logger $ env^.logger }
--logWare <- mkRequestLogger def { destination = RequestLogger.Logger "/tmp/logs.txt" } --logWare <- mkRequestLogger def { destination = RequestLogger.Logger "/tmp/logs.txt" }
...@@ -192,8 +193,8 @@ makeDevApp env = do ...@@ -192,8 +193,8 @@ makeDevApp env = do
--let warpS = Warp.setPort (8008 :: Int) -- (env^.settings.appPort) --let warpS = Warp.setPort (8008 :: Int) -- (env^.settings.appPort)
-- $ Warp.defaultSettings -- $ Warp.defaultSettings
--pure (warpS, logWare $ checkOriginAndHost $ corsMiddleware $ serverApp) --pure (warpS, logWare . checkOriginAndHost . corsMiddleware)
pure $ logStdoutDev $ corsMiddleware $ serverApp pure $ logStdoutDev . corsMiddleware
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- | API Global -- | API Global
...@@ -276,7 +277,8 @@ type API = SwaggerFrontAPI :<|> GargAPI :<|> Get '[HTML] Html ...@@ -276,7 +277,8 @@ type API = SwaggerFrontAPI :<|> GargAPI :<|> Get '[HTML] Html
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- | Server declarations -- | Server declarations
server :: Env -> IO (Server API) server :: (HasConnection env, HasRepoVar env) => env
-> IO (Server API)
server env = do server env = do
-- orchestrator <- scrapyOrchestrator env -- orchestrator <- scrapyOrchestrator env
pure $ swaggerFront pure $ swaggerFront
...@@ -312,7 +314,7 @@ gargMock :: Server GargAPI ...@@ -312,7 +314,7 @@ gargMock :: Server GargAPI
gargMock = mock apiGarg Proxy gargMock = mock apiGarg Proxy
--------------------------------------------------------------------- ---------------------------------------------------------------------
makeApp :: Env -> IO Application makeApp :: (HasConnection env, HasRepoVar env) => env -> IO Application
makeApp = fmap (serve api) . server makeApp = fmap (serve api) . server
appMock :: Application appMock :: Application
...@@ -372,8 +374,9 @@ startGargantext :: PortNumber -> FilePath -> IO () ...@@ -372,8 +374,9 @@ startGargantext :: PortNumber -> FilePath -> IO ()
startGargantext port file = do startGargantext port file = do
env <- newEnv port file env <- newEnv port file
portRouteInfo port portRouteInfo port
app <- makeDevApp env app <- makeApp env
run port app mid <- makeDevMiddleware
run port $ mid app
startGargantextMock :: PortNumber -> IO () startGargantextMock :: PortNumber -> IO ()
startGargantextMock port = do startGargantextMock port = do
......
...@@ -173,3 +173,29 @@ newEnv port file = do ...@@ -173,3 +173,29 @@ newEnv port file = do
, _env_scrapers = scrapers_env , _env_scrapers = scrapers_env
, _env_self_url = self_url , _env_self_url = self_url
} }
data DevEnv = DevEnv
{ _dev_env_conn :: !Connection
, _dev_env_repo_var :: !(MVar NgramsRepo)
}
makeLenses ''DevEnv
instance HasConnection DevEnv where
connection = dev_env_conn
instance HasRepoVar DevEnv where
repoVar = dev_env_repo_var
newDevEnvWith :: FilePath -> IO DevEnv
newDevEnvWith file = do
param <- databaseParameters file
conn <- connect param
repo_var <- newMVar initMockRepo
pure $ DevEnv
{ _dev_env_conn = conn
, _dev_env_repo_var = repo_var
}
newDevEnv :: IO DevEnv
newDevEnv = newDevEnvWith "gargantext.ini"
...@@ -20,14 +20,14 @@ module Gargantext.Database.Cooc where ...@@ -20,14 +20,14 @@ module Gargantext.Database.Cooc where
import Database.PostgreSQL.Simple.SqlQQ import Database.PostgreSQL.Simple.SqlQQ
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Database.Utils (Cmd, runCmdDevNoErr, runPGSQuery) import Gargantext.Database.Utils (Cmd, HasConnection, runCmdDevNoErr, runPGSQuery)
type CorpusId = Int type CorpusId = Int
type MainListId = Int type MainListId = Int
type GroupListId = Int type GroupListId = Int
coocTest :: IO [(Int, Int, Int)] coocTest :: HasConnection env => env -> IO [(Int, Int, Int)]
coocTest = runCmdDevNoErr $ dBcooc 421968 446602 446599 coocTest env = runCmdDevNoErr env $ dBcooc 421968 446602 446599
dBcooc :: CorpusId -> MainListId -> GroupListId -> Cmd err [(Int, Int, Int)] dBcooc :: CorpusId -> MainListId -> GroupListId -> Cmd err [(Int, Int, Int)]
dBcooc corpus mainList groupList = runPGSQuery [sql| dBcooc corpus mainList groupList = runPGSQuery [sql|
......
...@@ -49,13 +49,19 @@ class HasConnection env where ...@@ -49,13 +49,19 @@ class HasConnection env where
instance HasConnection Connection where instance HasConnection Connection where
connection = identity connection = identity
type CmdM env err m = type CmdM' env err m =
( MonadReader env m ( MonadReader env m
, HasConnection env
, MonadError err m , MonadError err m
, MonadIO m , MonadIO m
) )
type CmdM env err m =
( CmdM' env err m
, HasConnection env
)
type Cmd' env err a = forall m. CmdM' env err m => m a
type Cmd err a = forall m env. CmdM env err m => m a type Cmd err a = forall m env. CmdM env err m => m a
-- TODO: ideally there should be very few calls to this functions. -- TODO: ideally there should be very few calls to this functions.
...@@ -64,22 +70,24 @@ mkCmd k = do ...@@ -64,22 +70,24 @@ mkCmd k = do
conn <- view connection conn <- view connection
liftIO $ k conn liftIO $ k conn
runCmd :: Connection -> Cmd err a -> IO (Either err a) runCmd :: HasConnection env => env
runCmd conn m = runExceptT $ runReaderT m conn -> Cmd' env err a
-> IO (Either err a)
runCmd env m = runExceptT $ runReaderT m env
-- Use only for dev -- Use only for dev
runCmdDevWith :: Show err => FilePath -> Cmd err a -> IO a runCmdDev :: (HasConnection env, Show err) => env
runCmdDevWith fp f = do -> Cmd' env err a
conn <- connectGargandb fp -> IO a
either (fail . show) pure =<< runCmd conn f runCmdDev env f = either (fail . show) pure =<< runCmd env f
-- Use only for dev -- Use only for dev
runCmdDev :: Cmd ServantErr a -> IO a runCmdDevNoErr :: HasConnection env => env -> Cmd' env () a -> IO a
runCmdDev = runCmdDevWith "gargantext.ini" runCmdDevNoErr = runCmdDev
-- Use only for dev -- Use only for dev
runCmdDevNoErr :: Cmd () a -> IO a runCmdDevServantErr :: HasConnection env => env -> Cmd ServantErr a -> IO a
runCmdDevNoErr = runCmdDevWith "gargantext.ini" runCmdDevServantErr = runCmdDev
runOpaQuery :: Default FromFields fields haskells => Select fields -> Cmd err [haskells] runOpaQuery :: Default FromFields fields haskells => Select fields -> Cmd err [haskells]
runOpaQuery q = mkCmd $ \c -> runQuery c q runOpaQuery q = mkCmd $ \c -> runQuery c q
......
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