Commit 409c8423 authored by Alfredo Di Napoli's avatar Alfredo Di Napoli

Port gargantext-invitations to CLI

parent 5760e558
{-| {-|
Module : Main.hs Module : Invitations.hs
Description : GarganText Mailing Invitations Description : GarganText Mailing Invitations
Copyright : (c) CNRS, 2017-Present Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3 License : AGPL + CECILL v3
...@@ -12,35 +12,51 @@ Portability : POSIX ...@@ -12,35 +12,51 @@ Portability : POSIX
{-# LANGUAGE Strict #-} {-# LANGUAGE Strict #-}
module Main where module CLI.Invitations where
import CLI.Types
import Gargantext.API.Admin.Types
import Gargantext.API.Dev (withDevEnv, runCmdDev) import Gargantext.API.Dev (withDevEnv, runCmdDev)
import Gargantext.API.Node () -- instances only
import Gargantext.API.Errors.Types import Gargantext.API.Errors.Types
import Gargantext.API.Admin.Types import Gargantext.API.Node () -- instances only
import Gargantext.API.Node.Share qualified as Share
import Gargantext.API.Node.Share.Types qualified as Share
import Gargantext.Core.NLP (HasNLPServer) import Gargantext.Core.NLP (HasNLPServer)
import Gargantext.Core.Types.Individu (User(..)) import Gargantext.Core.Types.Individu (User(..))
import Gargantext.Database.Admin.Types.Node
import Gargantext.Database.Prelude (CmdRandom) import Gargantext.Database.Prelude (CmdRandom)
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Prelude.Config (readConfig) import Gargantext.Prelude.Config (readConfig)
import Prelude (read) import Options.Applicative
import Gargantext.API.Node.Share.Types qualified as Share import Prelude (String)
import Gargantext.API.Node.Share qualified as Share import Gargantext.Core.Types
main :: IO ()
main = do
params@[iniPath,user,node_id,email] <- getArgs
_ <- if length params /= 4
then panicTrace "USAGE: ./gargantext-init gargantext.ini username node_id student@university.edu"
else pure ()
invitationsCLI :: InvitationsArgs -> IO ()
invitationsCLI (InvitationsArgs iniPath user node_id email) = do
_cfg <- readConfig iniPath _cfg <- readConfig iniPath
let invite :: (HasSettings env, CmdRandom env BackendInternalError m, HasNLPServer env) => m Int let invite :: (HasSettings env, CmdRandom env BackendInternalError m, HasNLPServer env) => m Int
invite = Share.api (UserName $ cs user) (UnsafeMkNodeId $ (read node_id :: Int)) (Share.ShareTeamParams $ cs email) invite = Share.api (UserName $ cs user) node_id (Share.ShareTeamParams $ cs email)
withDevEnv iniPath $ \env -> do withDevEnv iniPath $ \env -> do
_ <- runCmdDev env invite void $ runCmdDev env invite
pure ()
invitationsCmd :: HasCallStack => Mod CommandFields CLI
invitationsCmd = command "invitations" (info (helper <*> fmap CLISub invitations_p) (progDesc "Mailing invitations."))
invitations_p :: Parser CLICmd
invitations_p = fmap CCMD_invitations $ InvitationsArgs
<$> ( strOption ( long "ini-path"
<> metavar "FILEPATH"
<> help "Location of the .ini path"
) )
<*> ( strOption ( long "user" ) )
<*> ( option (eitherReader node_p) ( long "node-id" <> metavar "POSITIVE-INT" <> help "The node ID.") )
<*> ( strOption ( long "email" <> help "The email address.") )
node_p :: String -> Either String NodeId
node_p i = case readMaybe i of
Nothing -> Left $ i <> " is not a valid integer."
Just xs
| xs < 0 -> Left $ "The node id needs to be a positive integer."
| otherwise
-> Right $ UnsafeMkNodeId xs
...@@ -5,6 +5,7 @@ import Data.String ...@@ -5,6 +5,7 @@ import Data.String
import Data.Text (Text) import Data.Text (Text)
import Gargantext.Core.Types.Query import Gargantext.Core.Types.Query
import Prelude import Prelude
import Gargantext.Core.Types (NodeId)
newtype CorpusFile = CorpusFile { _CorpusFile :: FilePath } newtype CorpusFile = CorpusFile { _CorpusFile :: FilePath }
deriving (Show, Eq, IsString) deriving (Show, Eq, IsString)
...@@ -47,6 +48,13 @@ data InitArgs = InitArgs ...@@ -47,6 +48,13 @@ data InitArgs = InitArgs
{ init_ini :: !FilePath { init_ini :: !FilePath
} deriving (Show, Eq) } deriving (Show, Eq)
data InvitationsArgs = InvitationsArgs
{ inv_path :: !FilePath
, inv_user :: !Text
, inv_node_id :: !NodeId
, inv_email :: !Text
} deriving (Show, Eq)
data CLICmd data CLICmd
= CCMD_clean_csv_corpus = CCMD_clean_csv_corpus
| CCMD_filter_terms_and_cooc !CorpusFile !TermListFile !OutputFile | CCMD_filter_terms_and_cooc !CorpusFile !TermListFile !OutputFile
...@@ -54,6 +62,7 @@ data CLICmd ...@@ -54,6 +62,7 @@ data CLICmd
| CCMD_admin !AdminArgs | CCMD_admin !AdminArgs
| CCMD_import !ImportArgs | CCMD_import !ImportArgs
| CCMD_init !InitArgs | CCMD_init !InitArgs
| CCMD_invitations !InvitationsArgs
deriving (Show, Eq) deriving (Show, Eq)
data CLI = data CLI =
......
...@@ -26,6 +26,7 @@ import Options.Applicative ...@@ -26,6 +26,7 @@ import Options.Applicative
import CLI.Admin (adminCLI, adminCmd) import CLI.Admin (adminCLI, adminCmd)
import CLI.Import (importCLI, importCmd) import CLI.Import (importCLI, importCmd)
import CLI.Init (initCLI, initCmd) import CLI.Init (initCLI, initCmd)
import CLI.Invitations (invitationsCLI, invitationsCmd)
runCLI :: CLI -> IO () runCLI :: CLI -> IO ()
runCLI = \case runCLI = \case
...@@ -41,6 +42,8 @@ runCLI = \case ...@@ -41,6 +42,8 @@ runCLI = \case
-> importCLI args -> importCLI args
CLISub (CCMD_init args) CLISub (CCMD_init args)
-> initCLI args -> initCLI args
CLISub (CCMD_invitations args)
-> invitationsCLI args
main :: IO () main :: IO ()
main = runCLI =<< execParser opts main = runCLI =<< execParser opts
...@@ -56,5 +59,6 @@ allOptions = subparser ( ...@@ -56,5 +59,6 @@ allOptions = subparser (
obfuscateDBCmd <> obfuscateDBCmd <>
adminCmd <> adminCmd <>
importCmd <> importCmd <>
initCmd initCmd <>
invitationsCmd
) )
...@@ -703,6 +703,7 @@ executable gargantext-cli ...@@ -703,6 +703,7 @@ executable gargantext-cli
CLI.FilterTermsAndCooc CLI.FilterTermsAndCooc
CLI.Import CLI.Import
CLI.Init CLI.Init
CLI.Invitations
CLI.ObfuscateDB CLI.ObfuscateDB
CLI.Types CLI.Types
CLI.Utils CLI.Utils
...@@ -729,21 +730,6 @@ executable gargantext-cli ...@@ -729,21 +730,6 @@ executable gargantext-cli
, unordered-containers ^>= 0.2.16.0 , unordered-containers ^>= 0.2.16.0
, vector ^>= 0.12.3.0 , vector ^>= 0.12.3.0
executable gargantext-invitations
import:
defaults
, optimized
main-is: Main.hs
other-modules:
Paths_gargantext
hs-source-dirs:
bin/gargantext-invitations
build-depends:
extra ^>= 1.7.9
, gargantext
, gargantext-prelude
, text ^>= 1.2.4.1
executable gargantext-phylo executable gargantext-phylo
import: import:
defaults defaults
......
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