packages feed

cayley-client 0.1.0.0 → 0.1.0.1

raw patch · 3 files changed

+84/−3 lines, 3 filesdep ~base

Dependency ranges changed: base

Files

+ Database/Cayley/Internal.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}++module Database.Cayley.Internal where+ +import Control.Monad.Catch+import Control.Monad.IO.Class+import Control.Monad.Reader+import qualified Data.Aeson as A+import qualified Data.Text as T (pack)+import Data.Vector (fromList)+import Network.HTTP.Client++import Database.Cayley.Types++apiRequest :: Manager -> String -> Int -> RequestBody -> ReaderT CayleyConfig IO (Maybe A.Value)+apiRequest m u p b = do+    r <- parseUrl u >>= \c ->+             return c { method = "POST", port = p, requestBody = b }+    t <- liftIO $ try $ httpLbs r m+    case t of+        Right r -> return $ A.decode $ responseBody r+        Left e  ->+            return $+                Just $+                    A.object ["error" A..= T.pack (show (e :: SomeException))]++toRequestBody :: [Quad] -> RequestBody+toRequestBody qs = RequestBodyLBS $ A.encode $ fromList $ map A.toJSON qs++getManager (CayleyConnection (_,m)) = m++getConfig (CayleyConnection (c,_)) = c
+ Database/Cayley/Types.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE OverloadedStrings #-}++module Database.Cayley.Types where++import qualified Data.Aeson as A+import Control.Applicative+import Control.Monad+import qualified Data.Text as T+import Network.HTTP.Client (Manager)++data CayleyConfig = CayleyConfig+    { serverPort :: Int    -- ^ Default to 64210+    , serverName :: String -- ^ Default to "localhost"+    , apiVersion :: String -- ^ Default to "1"+    , queryLang  :: String -- ^ Default to "gremlin"+    } deriving (Eq,Show)++-- | CayleyConfig { serverPort = 64210 , serverName = "localhost" , apiVersion = "1" , queryLang  = "gremlin" }+defaultCayleyConfig = CayleyConfig+    { serverPort = 64210+    , serverName = "localhost"+    , apiVersion = "1"+    , queryLang  = "gremlin"+    }++data CayleyConnection = CayleyConnection (CayleyConfig,Manager)+     +data Quad = Quad+    { subject   :: T.Text       -- ^ Subject node+    , predicate :: T.Text       -- ^ Predicate node+    , object    :: T.Text       -- ^ Object node+    , label     :: Maybe T.Text -- ^ Label node+    } deriving (Eq,Show)++instance A.ToJSON Quad where+    toJSON (Quad subject predicate object label) =+        A.object [ "subject"   A..= subject+                 , "predicate" A..= predicate+                 , "object"    A..= object+                 , "label"     A..= label+                 ]++instance A.FromJSON Quad where+    parseJSON (A.Object v) = Quad <$>+                             v A..: "subject" <*>+                             v A..: "predicate" <*>+                             v A..: "object" <*>+                             v A..: "label"+    parseJSON _            = mzero
cayley-client.cabal view
@@ -1,9 +1,9 @@ name:                cayley-client-version:             0.1.0.0+version:             0.1.0.1 stability:           Experimental synopsis:            An Haskell client for Cayley graph database description:         cayley-client implements the RESTful API of the Cayley database graph.-homepage:            http://mb.cybervisible.fr/haskell-cayley-client+homepage:            http://mb.cybervisible.fr/cayley-client-for-haskell license:             BSD3 license-file:        LICENSE author:              Michel Boucey@@ -18,7 +18,7 @@   Location: https://github.com/MichelBoucey/cayley-client  library-  exposed-modules:     Database.Cayley.Client+  exposed-modules:     Database.Cayley.Client, Database.Cayley.Types, Database.Cayley.Internal   other-extensions:    OverloadedStrings   build-depends:       base >=4.7 && <4.8, mtl >=2.1 && <2.2, transformers >=0.3 && <0.4, attoparsec >=0.12 && <0.13, bytestring >=0.10 && <0.11, text >=1.2 && <1.3, vector >=0.10 && <0.11, http-conduit >=2.1 && <2.2, http-client >=0.4 && <0.5, aeson >=0.8 && <0.9, lens >= 4.6.0.1, lens-aeson >=1.0.0.3, unordered-containers >=0.2 && <0.3, exceptions >= 0.6 && <0.7   default-language:    Haskell2010