Commit 9ba39267 authored by Alexandre Delanoë's avatar Alexandre Delanoë

[API] Upload csv.

parent 85a70600
...@@ -162,6 +162,7 @@ library: ...@@ -162,6 +162,7 @@ library:
- servant-swagger - servant-swagger
- servant-swagger-ui - servant-swagger-ui
- servant-static-th - servant-static-th
- servant-cassava
- serialise - serialise
- split - split
- stemmer - stemmer
......
...@@ -25,17 +25,20 @@ Portability : POSIX ...@@ -25,17 +25,20 @@ Portability : POSIX
module Gargantext.API.Upload module Gargantext.API.Upload
where where
import qualified Data.Text as Text
import GHC.Generics (Generic)
import Gargantext.Prelude import Gargantext.Prelude
import Data.Text (Text) import Data.Text (Text)
import Data.Aeson
import Servant import Servant
import Servant.Multipart import Servant.Multipart
--import Servant.Mock (HasMock(mock)) --import Servant.Mock (HasMock(mock))
import Servant.Swagger (HasSwagger(toSwagger)) import Servant.Swagger (HasSwagger(toSwagger))
import qualified Data.ByteString.Lazy as LBS -- import qualified Data.ByteString.Lazy as LBS
import Control.Monad import Control.Monad
import Control.Monad.IO.Class import Control.Monad.IO.Class
import Gargantext.API.Types import Gargantext.API.Types
import Servant.CSV.Cassava (CSV'(..))
--import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary) --import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
--import Data.Swagger --import Data.Swagger
--import Gargantext.API.Ngrams (TODO) --import Gargantext.API.Ngrams (TODO)
...@@ -67,22 +70,35 @@ instance HasMock (MultipartForm Mem (MultipartData Mem) :> sub) context where ...@@ -67,22 +70,35 @@ instance HasMock (MultipartForm Mem (MultipartData Mem) :> sub) context where
mock _ _ = undefined mock _ _ = undefined
-} -}
type ApiUpload = MultipartForm Mem (MultipartData Mem) :> Post '[JSON] Integer data Upload = Upload { up :: [Text] }
deriving (Generic)
instance ToJSON Upload
type ApiUpload = MultipartForm Mem (MultipartData Mem) :> Post '[JSON] Text
-- MultipartData consists in textual inputs, -- MultipartData consists in textual inputs,
-- accessible through its "inputs" field, as well -- accessible through its "inputs" field, as well
-- as files, accessible through its "files" field. -- as files, accessible through its "files" field.
upload :: GargServer ApiUpload upload :: GargServer ApiUpload
upload multipartData = do upload multipartData = do
liftIO $ do
--{-
is <- liftIO $ do
putStrLn ("Inputs:" :: Text) putStrLn ("Inputs:" :: Text)
forM_ (inputs multipartData) $ \input -> forM (inputs multipartData) $ \input -> do
putStrLn $ (" " :: Text) <> (iName input) putStrLn $ ("iName " :: Text) <> (iName input)
<> (" -> " :: Text) <> (iValue input) <> ("iValue " :: Text) <> (iValue input)
pure $ iName input
forM_ (files multipartData) $ \file -> do --{-
_ <- forM (files multipartData) $ \file -> do
let content = fdPayload file let content = fdPayload file
putStrLn $ ("Content of " :: Text) <> (fdFileName file) putStrLn $ ("XXX " :: Text) <> (fdFileName file)
LBS.putStr content putStrLn $ ("YYY " :: Text) <> cs content
return 0 --pure $ cs content
-- is <- inputs multipartData
--}
pure $ Text.concat $ map cs is
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -19,7 +19,6 @@ module Gargantext.Text.Parsers.CSV where ...@@ -19,7 +19,6 @@ module Gargantext.Text.Parsers.CSV where
import GHC.Real (round) import GHC.Real (round)
import GHC.IO (FilePath) import GHC.IO (FilePath)
import Control.Applicative import Control.Applicative
import Data.Char (ord) import Data.Char (ord)
...@@ -232,6 +231,10 @@ writeCsv fp (h, vs) = BL.writeFile fp $ ...@@ -232,6 +231,10 @@ writeCsv fp (h, vs) = BL.writeFile fp $
writeDocs2Csv :: FilePath -> [HyperdataDocument] -> IO () writeDocs2Csv :: FilePath -> [HyperdataDocument] -> IO ()
writeDocs2Csv fp hs = BL.writeFile fp $ writeDocs2Csv fp hs = BL.writeFile fp $
encodeByNameWith csvEncodeOptions headerCsvGargV3 (map hyperdataDocument2csvDoc hs) encodeByNameWith csvEncodeOptions headerCsvGargV3 (map hyperdataDocument2csvDoc hs)
hyperdataDocument2csv :: [HyperdataDocument] -> BL.ByteString
hyperdataDocument2csv hs = encodeByNameWith csvEncodeOptions headerCsvGargV3 (map hyperdataDocument2csvDoc hs)
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Hal Format -- Hal Format
data CsvHal = CsvHal data CsvHal = CsvHal
......
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