{-# LANGUAGE OverloadedStrings #-}
module Fedora.Bodhi
( bodhiBuild
, bodhiBuilds
, bodhiComment
, bodhiComments
, bodhiCSRF
, bodhiOverride
, bodhiOverrides
, bodhiOverrideDates
, bodhiPackages
, bodhiRelease
, bodhiReleases
, bodhiUpdate
, bodhiUpdates
, bodhiUser
, bodhiUsers
, lookupKey
, lookupKey'
, queryBodhi
, makeKey
, makeItem
, maybeKey
, Query
, QueryItem
) where
import Data.Aeson.Types
import Data.Text (Text)
import Data.Time.LocalTime
import Network.HTTP.Query
server :: String
server :: [Char]
server = [Char]
"bodhi.fedoraproject.org"
bodhiBuild :: String -> IO Object
bodhiBuild :: [Char] -> IO Object
bodhiBuild [Char]
nvr =
forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] forall a b. (a -> b) -> a -> b
$ [Char]
"builds" [Char] -> [Char] -> [Char]
+/+ [Char]
nvr
bodhiBuilds :: Query -> IO [Object]
bodhiBuilds :: Query -> IO [Object]
bodhiBuilds Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"builds" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"builds/"
bodhiComment :: String -> IO Object
[Char]
cid =
forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] forall a b. (a -> b) -> a -> b
$ [Char]
"comments" [Char] -> [Char] -> [Char]
+/+ [Char]
cid
bodhiComments :: Query -> IO [Object]
Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"comments" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"comments/"
bodhiCSRF :: IO (Maybe Text)
bodhiCSRF :: IO (Maybe Text)
bodhiCSRF =
forall a. FromJSON a => Text -> Object -> Maybe a
lookupKey Text
"csrf_token" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] [Char]
"csrf"
bodhiOverride :: String -> IO (Maybe Object)
bodhiOverride :: [Char] -> IO (Maybe Object)
bodhiOverride [Char]
nvr =
forall a. FromJSON a => Text -> Object -> Maybe a
lookupKey Text
"override" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] ([Char]
"overrides" [Char] -> [Char] -> [Char]
+/+ [Char]
nvr)
bodhiOverrideDates :: String -> IO (Maybe (LocalTime,LocalTime))
bodhiOverrideDates :: [Char] -> IO (Maybe (LocalTime, LocalTime))
bodhiOverrideDates [Char]
nvr = do
Maybe Object
mobj <- [Char] -> IO (Maybe Object)
bodhiOverride [Char]
nvr
case Maybe Object
mobj of
Maybe Object
Nothing -> do
[Char] -> IO ()
putStrLn forall a b. (a -> b) -> a -> b
$ [Char]
"Override for " forall a. [a] -> [a] -> [a]
++ [Char]
nvr forall a. [a] -> [a] -> [a]
++ [Char]
" not found"
forall (m :: * -> *) a. Monad m => a -> m a
return forall a. Maybe a
Nothing
Just Object
obj -> forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ Object -> Maybe (LocalTime, LocalTime)
readDates Object
obj
where
readDates :: Object -> Maybe (LocalTime,LocalTime)
readDates :: Object -> Maybe (LocalTime, LocalTime)
readDates =
forall a b. (a -> Parser b) -> a -> Maybe b
parseMaybe forall a b. (a -> b) -> a -> b
$ \Object
obj -> do
LocalTime
expire <- Object
obj forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"expiration_date"
LocalTime
submit <- Object
obj forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"submission_date"
forall (m :: * -> *) a. Monad m => a -> m a
return (LocalTime
expire,LocalTime
submit)
bodhiOverrides :: Query -> IO [Object]
bodhiOverrides :: Query -> IO [Object]
bodhiOverrides Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"overrides" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"overrides/"
bodhiPackages :: Query -> IO [Object]
bodhiPackages :: Query -> IO [Object]
bodhiPackages Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"packages" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"packages/"
bodhiRelease :: String -> IO Object
bodhiRelease :: [Char] -> IO Object
bodhiRelease [Char]
rel =
forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] forall a b. (a -> b) -> a -> b
$ [Char]
"releases" [Char] -> [Char] -> [Char]
+/+ [Char]
rel
bodhiReleases :: Query -> IO [Object]
bodhiReleases :: Query -> IO [Object]
bodhiReleases Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"releases" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"releases/"
bodhiUpdate :: String -> IO (Maybe Object)
bodhiUpdate :: [Char] -> IO (Maybe Object)
bodhiUpdate [Char]
update =
forall a. FromJSON a => Text -> Object -> Maybe a
lookupKey Text
"update" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] ([Char]
"updates" [Char] -> [Char] -> [Char]
+/+ [Char]
update)
bodhiUpdates :: Query -> IO [Object]
bodhiUpdates :: Query -> IO [Object]
bodhiUpdates Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"updates" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"updates/"
bodhiUser :: String -> IO Object
bodhiUser :: [Char] -> IO Object
bodhiUser [Char]
user =
forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi [] forall a b. (a -> b) -> a -> b
$ [Char]
"users" [Char] -> [Char] -> [Char]
+/+ [Char]
user
bodhiUsers :: Query -> IO [Object]
bodhiUsers :: Query -> IO [Object]
bodhiUsers Query
params =
forall a. FromJSON a => Text -> Object -> a
lookupKey' Text
"users" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
"users/"
queryBodhi :: FromJSON a => Query -> String -> IO a
queryBodhi :: forall a. FromJSON a => Query -> [Char] -> IO a
queryBodhi Query
params [Char]
path =
let url :: [Char]
url = [Char]
"https://" forall a. [a] -> [a] -> [a]
++ [Char]
server [Char] -> [Char] -> [Char]
+/+ [Char]
path
in forall (m :: * -> *) a.
(MonadIO m, FromJSON a) =>
[Char] -> Query -> m a
webAPIQuery [Char]
url Query
params