Fixes to showing date

parent 1cf872fb
......@@ -14,8 +14,10 @@ Portability : POSIX
module Main where
import Conduit
import Data.Conduit.Combinators qualified as Conduit
import Data.ByteString qualified as BS
import Data.ByteString.Lazy qualified as BSL
import Data.Conduit.Combinators qualified as Conduit
import Data.Conduit.List qualified as CL
import Data.Csv qualified as Csv
import Data.Csv.Conduit qualified as CsvC
import OpenAlex qualified as OA
......@@ -109,11 +111,17 @@ toCSVC ToCSVOptions { options = Options { .. }, .. } _ = do
Left err -> putText $ "error: " <> show err
Right (mCount, c) -> do
putText $ "Count: " <> show mCount
d <- sourceToList $
_d <- sourceToList $
c
-- .| mapC (\(OA.Work { .. }) -> (id, fromMaybe "" display_name, abstract_reconstructed))
.| takeC 3
-- .| CsvC.toCsv Csv.defaultEncodeOptions
-- .| mapM_C (BS.appendFile output)
BSL.writeFile output $ Csv.encodeDefaultOrderedByName d
-- .| takeC 3
.| toNamedCsv Csv.defaultEncodeOptions
.| mapM_C (BS.appendFile output)
-- BSL.writeFile output $ Csv.encodeDefaultOrderedByName d
pure ()
toNamedCsv :: (Monad m, Csv.DefaultOrdered a, Csv.ToNamedRecord a)
=> Csv.EncodeOptions
-> ConduitT a BS.ByteString m ()
toNamedCsv opts = {-# SCC toCsv_p #-} CL.map $ BSL.toStrict . Csv.encodeDefaultOrderedByNameWith opts . pure
......@@ -22,13 +22,13 @@ where
import Conduit
import Control.Monad.Fail (fail)
import qualified Data.Text as T
import Data.Text qualified as T
import Network.HTTP.Client (newManager, requestHeaders)
import Network.HTTP.Client.TLS (tlsManagerSettings)
import Protolude hiding (yield)
import OpenAlex.Client
import OpenAlex.ServantClientLogging
import OpenAlex.Types (ListOf(..), Meta(..), Page, PerPage, Cursor, Filter, Search, Concept, Work)
import OpenAlex.Types (ListOf(..), Meta(..), Page, PerPage, Cursor, Filter, Search, Concept, Work, showDate)
import Protolude hiding (yield)
import Servant.Client (BaseUrl(..), ClientEnv(..), ClientError, Scheme(Https), defaultMakeClientRequest, mkClientEnv, runClientM)
defaultClientEnv :: IO ClientEnv
......
......@@ -26,6 +26,7 @@ import Data.Time.Format qualified as DTF
import Data.Vector qualified as V
import OpenAlex.Utils (reconstructAbstract)
import Protolude hiding (Location, Meta)
import Protolude.Base (Show(..))
-- API request types
type Cursor = Text
......@@ -81,9 +82,14 @@ parseTimeE :: (MonadFail m, DTF.ParseTime t) => Text -> Text -> m t
parseTimeE fmt s = case (DTF.parseTimeM True DTF.defaultTimeLocale (T.unpack fmt) (T.unpack s)) of
Nothing -> fail $ "Cannot parse date with format " <> T.unpack fmt
Just p -> pure p
showDate :: Date -> Text
showDate (DDay day) = T.pack $ DTF.formatTime DTF.defaultTimeLocale "%Y-%m-%dT%H:%M:%S" day
showDate (DUTCTime t) = T.pack $ DTF.formatTime DTF.defaultTimeLocale "%Y-%m-%dT%H:%M:%S" t
data Date = DDay Day | DUTCTime UTCTime
deriving (Generic, Show)
deriving (Generic)
instance Show Date where
show = T.unpack . showDate
instance FromJSON Date where
parseJSON = withText "Date" $ \s ->
(DDay <$> parseTimeE "%F" s) <|>
......
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