Move Xml Generation to a module
- Make putBucket throw exception of failure
This commit is contained in:
parent
a9b82f9b70
commit
342d0bc8ff
@ -32,8 +32,9 @@ main = do
|
|||||||
res <- getLocation "test1"
|
res <- getLocation "test1"
|
||||||
print res
|
print res
|
||||||
|
|
||||||
status <- putBucket "test1" res
|
res <- putBucket "test1" res
|
||||||
print status
|
print res
|
||||||
|
|
||||||
fGetObject "test1" "passwd" "/tmp/passwd"
|
fGetObject "test1" "passwd" "/tmp/passwd"
|
||||||
|
|
||||||
print "After runResourceT"
|
print "After runResourceT"
|
||||||
|
|||||||
@ -26,6 +26,7 @@ library
|
|||||||
, Network.Minio.Sign.V4
|
, Network.Minio.Sign.V4
|
||||||
, Network.Minio.API
|
, Network.Minio.API
|
||||||
, Network.Minio.XmlParser
|
, Network.Minio.XmlParser
|
||||||
|
, Network.Minio.XmlGenerator
|
||||||
build-depends: base >= 4.7 && < 5
|
build-depends: base >= 4.7 && < 5
|
||||||
, protolude >= 0.1.6 && < 0.2
|
, protolude >= 0.1.6 && < 0.2
|
||||||
, bytestring
|
, bytestring
|
||||||
|
|||||||
@ -15,6 +15,7 @@ module Network.Minio.Data
|
|||||||
, defaultConnectInfo
|
, defaultConnectInfo
|
||||||
, connect
|
, connect
|
||||||
, Payload(..)
|
, Payload(..)
|
||||||
|
, s3Name
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
@ -27,6 +28,8 @@ import Control.Monad.Trans.Class (MonadTrans(..))
|
|||||||
import Control.Monad.Trans.Resource (MonadThrow, MonadResource, ResourceT, ResIO)
|
import Control.Monad.Trans.Resource (MonadThrow, MonadResource, ResourceT, ResIO)
|
||||||
import Control.Monad.Base (MonadBase(..))
|
import Control.Monad.Base (MonadBase(..))
|
||||||
|
|
||||||
|
import Text.XML
|
||||||
|
|
||||||
import Lib.Prelude
|
import Lib.Prelude
|
||||||
|
|
||||||
data ConnectInfo = ConnectInfo {
|
data ConnectInfo = ConnectInfo {
|
||||||
@ -107,3 +110,6 @@ connect ci = do
|
|||||||
|
|
||||||
runMinio :: MinioConn -> Minio a -> ResourceT IO (Either MinioErr a)
|
runMinio :: MinioConn -> Minio a -> ResourceT IO (Either MinioErr a)
|
||||||
runMinio conn = runExceptT . flip runReaderT conn . unMinio
|
runMinio conn = runExceptT . flip runReaderT conn . unMinio
|
||||||
|
|
||||||
|
s3Name :: Text -> Name
|
||||||
|
s3Name s = Name s (Just "http://s3.amazonaws.com/doc/2006-03-01/") Nothing
|
||||||
|
|||||||
@ -8,16 +8,15 @@ module Network.Minio.S3API
|
|||||||
import qualified Network.HTTP.Types as HT
|
import qualified Network.HTTP.Types as HT
|
||||||
import qualified Network.HTTP.Conduit as NC
|
import qualified Network.HTTP.Conduit as NC
|
||||||
import qualified Data.Conduit as C
|
import qualified Data.Conduit as C
|
||||||
import qualified Data.ByteString.Lazy as LBS
|
|
||||||
import Text.XML
|
|
||||||
import qualified Data.Map as M
|
|
||||||
|
|
||||||
|
|
||||||
import Lib.Prelude
|
import Lib.Prelude
|
||||||
|
|
||||||
|
import qualified Data.ByteString.Lazy as LBS
|
||||||
|
|
||||||
import Network.Minio.Data
|
import Network.Minio.Data
|
||||||
import Network.Minio.API
|
import Network.Minio.API
|
||||||
import Network.Minio.XmlParser
|
import Network.Minio.XmlParser
|
||||||
|
import Network.Minio.XmlGenerator
|
||||||
|
|
||||||
getService :: Minio [BucketInfo]
|
getService :: Minio [BucketInfo]
|
||||||
getService = do
|
getService = do
|
||||||
@ -42,15 +41,12 @@ getObject bucket object queryParams headers = do
|
|||||||
reqInfo = requestInfo HT.methodGet (Just bucket) (Just object)
|
reqInfo = requestInfo HT.methodGet (Just bucket) (Just object)
|
||||||
queryParams headers (PayloadSingle "")
|
queryParams headers (PayloadSingle "")
|
||||||
|
|
||||||
|
putBucket :: Bucket -> Location -> Minio ()
|
||||||
putBucket :: Bucket -> Location -> Minio HT.Status
|
|
||||||
putBucket bucket location = do
|
putBucket bucket location = do
|
||||||
resp <- executeRequest $
|
resp <- executeRequest $
|
||||||
requestInfo HT.methodPut (Just bucket) Nothing [] [] (PayloadSingle $ LBS.toStrict $ renderLBS def bucketConfig)
|
requestInfo HT.methodPut (Just bucket) Nothing [] [] (PayloadSingle $ mkCreateBucketConfig bucket location)
|
||||||
return $ NC.responseStatus resp
|
|
||||||
where
|
let httpStatus = NC.responseStatus resp
|
||||||
root = Element (Name "CreateBucketConfiguration" (Just "http://s3.amazonaws.com/doc/2006-03-01/") Nothing) M.empty
|
when (httpStatus /= HT.ok200) $
|
||||||
[ NodeElement $ Element "LocationConstraint" M.empty
|
throwError $ MErrXml $ LBS.toStrict $ NC.responseBody resp
|
||||||
[ NodeContent location]
|
return ()
|
||||||
]
|
|
||||||
bucketConfig = Document (Prologue [] Nothing []) root []
|
|
||||||
|
|||||||
20
src/Network/Minio/XmlGenerator.hs
Normal file
20
src/Network/Minio/XmlGenerator.hs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
module Network.Minio.XmlGenerator
|
||||||
|
( mkCreateBucketConfig
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Lib.Prelude
|
||||||
|
|
||||||
|
import qualified Data.ByteString.Lazy as LBS
|
||||||
|
import Text.XML
|
||||||
|
import qualified Data.Map as M
|
||||||
|
|
||||||
|
import Network.Minio.Data
|
||||||
|
|
||||||
|
mkCreateBucketConfig :: Bucket -> Location -> ByteString
|
||||||
|
mkCreateBucketConfig bucket location = LBS.toStrict $ renderLBS def bucketConfig
|
||||||
|
where
|
||||||
|
root = Element (s3Name "CreateBucketConfiguration") M.empty
|
||||||
|
[ NodeElement $ Element "LocationConstraint" M.empty
|
||||||
|
[ NodeContent location]
|
||||||
|
]
|
||||||
|
bucketConfig = Document (Prologue [] Nothing []) root []
|
||||||
@ -13,9 +13,6 @@ import Lib.Prelude
|
|||||||
|
|
||||||
import Network.Minio.Data
|
import Network.Minio.Data
|
||||||
|
|
||||||
s3Name :: Text -> Name
|
|
||||||
s3Name s = Name s (Just "http://s3.amazonaws.com/doc/2006-03-01/") Nothing
|
|
||||||
|
|
||||||
s3TimeFormat = iso8601DateFormat $ Just "%T%QZ"
|
s3TimeFormat = iso8601DateFormat $ Just "%T%QZ"
|
||||||
|
|
||||||
parseListBuckets :: (MonadError MinioErr m) => LByteString -> m [BucketInfo]
|
parseListBuckets :: (MonadError MinioErr m) => LByteString -> m [BucketInfo]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user