aws 0.14.1 → 0.15
raw patch · 65 files changed
+265/−130 lines, 65 filesdep ~basedep ~conduitdep ~conduit-extranew-component:exe:GetObjectGooglePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, conduit, conduit-extra, directory, http-conduit, time
API changes (from Hackage documentation)
- Aws.Core: instance (GHC.Show.Show m, GHC.Show.Show a) => GHC.Show.Show (Aws.Core.Response m a)
+ Aws.Core: instance (GHC.Show.Show a, GHC.Show.Show m) => GHC.Show.Show (Aws.Core.Response m a)
+ Aws.Core: throwStatusCodeException :: Request -> Response (ResumableSource (ResourceT IO) ByteString) -> ResourceT IO a
- Aws: unsafeAws :: (ResponseConsumer r a, Monoid (ResponseMetadata a), Loggable (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a)
+ Aws: unsafeAws :: (ResponseConsumer r a, Loggable (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a)
- Aws: unsafeAwsRef :: (ResponseConsumer r a, Monoid (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a
+ Aws: unsafeAwsRef :: (ResponseConsumer r a, SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a
- Aws.Aws: unsafeAws :: (ResponseConsumer r a, Monoid (ResponseMetadata a), Loggable (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a)
+ Aws.Aws: unsafeAws :: (ResponseConsumer r a, Loggable (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a)
- Aws.Aws: unsafeAwsRef :: (ResponseConsumer r a, Monoid (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a
+ Aws.Aws: unsafeAwsRef :: (ResponseConsumer r a, SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a
- Aws.Core: responseConsumer :: ResponseConsumer req resp => req -> IORef (ResponseMetadata resp) -> HTTPResponseConsumer resp
+ Aws.Core: responseConsumer :: ResponseConsumer req resp => Request -> req -> IORef (ResponseMetadata resp) -> HTTPResponseConsumer resp
- Aws.DynamoDb.Core: getAttr' :: forall a. (Typeable a, DynVal a) => Text -> Item -> Parser (Maybe a)
+ Aws.DynamoDb.Core: getAttr' :: forall a. (DynVal a) => Text -> Item -> Parser (Maybe a)
Files
- Aws/Aws.hs +5/−6
- Aws/Core.hs +38/−13
- Aws/DynamoDb/Commands/DeleteItem.hs +2/−1
- Aws/DynamoDb/Commands/GetItem.hs +2/−1
- Aws/DynamoDb/Commands/PutItem.hs +2/−1
- Aws/DynamoDb/Commands/Query.hs +2/−1
- Aws/DynamoDb/Commands/Scan.hs +1/−1
- Aws/DynamoDb/Commands/Table.hs +7/−6
- Aws/DynamoDb/Commands/UpdateItem.hs +2/−2
- Aws/DynamoDb/Core.hs +3/−2
- Aws/Ec2/InstanceMetadata.hs +4/−2
- Aws/Iam/Commands/CreateAccessKey.hs +2/−1
- Aws/Iam/Commands/CreateUser.hs +4/−2
- Aws/Iam/Commands/DeleteAccessKey.hs +3/−1
- Aws/Iam/Commands/DeleteUser.hs +2/−1
- Aws/Iam/Commands/DeleteUserPolicy.hs +2/−1
- Aws/Iam/Commands/GetUser.hs +3/−2
- Aws/Iam/Commands/GetUserPolicy.hs +2/−1
- Aws/Iam/Commands/ListAccessKeys.hs +2/−1
- Aws/Iam/Commands/ListMfaDevices.hs +2/−1
- Aws/Iam/Commands/ListUserPolicies.hs +1/−1
- Aws/Iam/Commands/ListUsers.hs +2/−1
- Aws/Iam/Commands/PutUserPolicy.hs +1/−1
- Aws/Iam/Commands/UpdateAccessKey.hs +2/−1
- Aws/Iam/Commands/UpdateUser.hs +2/−1
- Aws/Iam/Core.hs +1/−3
- Aws/Iam/Internal.hs +1/−0
- Aws/S3/Commands/CopyObject.hs +3/−4
- Aws/S3/Commands/DeleteBucket.hs +1/−2
- Aws/S3/Commands/DeleteObject.hs +2/−1
- Aws/S3/Commands/DeleteObjects.hs +1/−1
- Aws/S3/Commands/GetBucket.hs +2/−1
- Aws/S3/Commands/GetBucketLocation.hs +1/−1
- Aws/S3/Commands/GetObject.hs +6/−5
- Aws/S3/Commands/GetService.hs +1/−1
- Aws/S3/Commands/HeadObject.hs +3/−4
- Aws/S3/Commands/Multipart.hs +5/−4
- Aws/S3/Commands/PutBucket.hs +1/−1
- Aws/S3/Commands/PutObject.hs +2/−1
- Aws/S3/Core.hs +18/−4
- Aws/Ses/Commands/DeleteIdentity.hs +2/−1
- Aws/Ses/Commands/GetIdentityDkimAttributes.hs +1/−1
- Aws/Ses/Commands/GetIdentityNotificationAttributes.hs +1/−1
- Aws/Ses/Commands/GetIdentityVerificationAttributes.hs +1/−1
- Aws/Ses/Commands/ListIdentities.hs +1/−1
- Aws/Ses/Commands/SendRawEmail.hs +1/−1
- Aws/Ses/Commands/SetIdentityDkimEnabled.hs +2/−1
- Aws/Ses/Commands/SetIdentityFeedbackForwardingEnabled.hs +2/−1
- Aws/Ses/Commands/SetIdentityNotificationTopic.hs +2/−1
- Aws/Ses/Commands/VerifyDomainDkim.hs +1/−1
- Aws/Ses/Commands/VerifyDomainIdentity.hs +1/−1
- Aws/Ses/Commands/VerifyEmailIdentity.hs +2/−1
- Aws/Ses/Core.hs +1/−0
- Aws/SimpleDb/Commands/Attributes.hs +11/−5
- Aws/SimpleDb/Commands/Domain.hs +8/−4
- Aws/SimpleDb/Commands/Select.hs +2/−1
- Aws/SimpleDb/Core.hs +1/−0
- Aws/Sqs/Commands/Message.hs +5/−4
- Aws/Sqs/Commands/Permission.hs +2/−2
- Aws/Sqs/Commands/Queue.hs +4/−3
- Aws/Sqs/Commands/QueueAttributes.hs +2/−2
- Aws/Sqs/Core.hs +2/−3
- CHANGELOG.md +18/−4
- Examples/GetObjectGoogle.hs +24/−0
- aws.cabal +22/−5
Aws/Aws.hs view
@@ -52,6 +52,7 @@ import qualified Data.Text.IO as T import qualified Network.HTTP.Conduit as HTTP import System.IO (stderr)+import Prelude -- | The severity of a log message, in rising order. data LogLevel@@ -189,9 +190,9 @@ -> ServiceConfiguration r NormalQuery -> r -> io (MemoryResponse a)-simpleAws cfg scfg request- = liftIO $ HTTP.withManager $ \manager ->- loadToMemory =<< readResponseIO =<< aws cfg scfg manager request+simpleAws cfg scfg request = liftIO $ runResourceT $ do+ manager <- liftIO $ HTTP.newManager HTTP.tlsManagerSettings+ loadToMemory =<< readResponseIO =<< aws cfg scfg manager request -- | Run an AWS transaction, without enforcing that response and request type form a valid transaction pair. --@@ -202,7 +203,6 @@ -- Metadata is wrapped in the Response, and also logged at level 'Info'. unsafeAws :: (ResponseConsumer r a,- Monoid (ResponseMetadata a), Loggable (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> HTTP.Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a)@@ -227,7 +227,6 @@ -- Metadata is put in the 'IORef', but not logged. unsafeAwsRef :: (ResponseConsumer r a,- Monoid (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> HTTP.Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a unsafeAwsRef cfg info manager metadataRef request = do@@ -247,7 +246,7 @@ logDebug $ "Response status: " ++ show (HTTP.responseStatus hresp) forM_ (HTTP.responseHeaders hresp) $ \(hname,hvalue) -> liftIO $ logger cfg Debug $ T.decodeUtf8 $ "Response header '" `mappend` CI.original hname `mappend` "': '" `mappend` hvalue `mappend` "'"- {-# SCC "unsafeAwsRef:responseConsumer" #-} responseConsumer request metadataRef hresp+ {-# SCC "unsafeAwsRef:responseConsumer" #-} responseConsumer httpRequest request metadataRef hresp -- | Run a URI-only AWS transaction. Returns a URI that can be sent anywhere. Does not work with all requests. --
Aws/Core.hs view
@@ -22,6 +22,7 @@ , HeaderException(..) , FormException(..) , NoCredentialsException(..)+, throwStatusCodeException -- ** Response deconstruction helpers , readHex2 -- *** XML@@ -111,8 +112,10 @@ import Data.Char import Data.Conduit (($$+-)) import qualified Data.Conduit as C+#if MIN_VERSION_http_conduit(2,2,0)+import qualified Data.Conduit.Binary as CB+#endif import qualified Data.Conduit.List as CL-import Data.Default (def) import Data.IORef import Data.List import qualified Data.Map as M@@ -130,14 +133,13 @@ import System.Directory import System.Environment import System.FilePath ((</>))-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format-#else+#if !MIN_VERSION_time(1,5,0) import System.Locale #endif import qualified Text.XML as XML import qualified Text.XML.Cursor as Cu import Text.XML.Cursor hiding (force, forceM)+import Prelude ------------------------------------------------------------------------------- -- | Types that can be logged (textually).@@ -201,14 +203,15 @@ -- metadata type for each AWS service. type ResponseMetadata resp - -- | Response parser. Takes the corresponding request, an 'IORef'- -- for metadata, and HTTP response data.- responseConsumer :: req -> IORef (ResponseMetadata resp) -> HTTPResponseConsumer resp+ -- | Response parser. Takes the corresponding AWS request, the derived+ -- @http-client@ request (for error reporting), an 'IORef' for metadata, and+ -- HTTP response data.+ responseConsumer :: HTTP.Request -> req -> IORef (ResponseMetadata resp) -> HTTPResponseConsumer resp -- | Does not parse response. For debugging. instance ResponseConsumer r (HTTP.Response L.ByteString) where type ResponseMetadata (HTTP.Response L.ByteString) = ()- responseConsumer _ _ resp = do+ responseConsumer _ _ _ resp = do bss <- HTTP.responseBody resp $$+- CL.consume return resp { HTTP.responseBody = L.fromChunks bss@@ -317,8 +320,8 @@ Traversable.sequence $ makeCredentials' <$> keyID <*> secret loadCredentialsFromInstanceMetadata :: MonadIO io => io (Maybe Credentials)-loadCredentialsFromInstanceMetadata = liftIO $ HTTP.withManager $ \mgr ->- do+loadCredentialsFromInstanceMetadata = do+ mgr <- liftIO $ HTTP.newManager HTTP.tlsManagerSettings -- check if the path is routable avail <- liftIO $ hostAvailable "169.254.169.254" if not avail@@ -462,7 +465,7 @@ #endif queryToHttpRequest SignedQuery{..} = do mauth <- maybe (return Nothing) (Just<$>) sqAuthorization- return $ def {+ return $ HTTP.defaultRequest { HTTP.method = httpMethod sqMethod , HTTP.secure = case sqProtocol of HTTP -> False@@ -494,7 +497,11 @@ _ -> HTTP.RequestBodyBuilder 0 mempty , HTTP.decompress = HTTP.alwaysDecompress- , HTTP.checkStatus = \_ _ _ -> Nothing+#if MIN_VERSION_http_conduit(2,2,0)+ , HTTP.checkResponse = \_ _ -> return ()+#else+ , HTTP.checkStatus = \_ _ _-> Nothing+#endif , HTTP.redirectCount = 10 }@@ -720,7 +727,7 @@ fmtTime s t = BU.fromString $ formatTime defaultTimeLocale s t rfc822Time :: String-rfc822Time = "%a, %_d %b %Y %H:%M:%S GMT"+rfc822Time = "%a, %0d %b %Y %H:%M:%S GMT" -- | Format time in RFC 822 format. fmtRfc822Time :: UTCTime -> B.ByteString@@ -792,6 +799,24 @@ instance E.Exception NoCredentialsException +-- | A helper to throw an 'HTTP.StatusCodeException'.+throwStatusCodeException :: HTTP.Request+ -> HTTP.Response (C.ResumableSource (ResourceT IO) ByteString)+ -> ResourceT IO a+#if MIN_VERSION_http_conduit(2,2,0)+throwStatusCodeException req resp = do+ let resp' = fmap (const ()) resp+ -- only take first 10kB of error response+ body <- HTTP.responseBody resp C.$$+- CB.take (10*1024)+ let sce = HTTP.StatusCodeException resp' (L.toStrict body)+ throwM $ HTTP.HttpExceptionRequest req sce+#else+throwStatusCodeException _req resp = do+ let cookies = HTTP.responseCookieJar resp+ headers = HTTP.responseHeaders resp+ status = HTTP.responseStatus resp+ throwM $ HTTP.StatusCodeException status headers cookies+#endif -- | A specific element (case-insensitive, ignoring namespace - sadly necessary), extracting only the textual contents. elContent :: T.Text -> Cursor -> [T.Text]
Aws/DynamoDb/Commands/DeleteItem.hs view
@@ -26,6 +26,7 @@ import Data.Aeson import Data.Default import qualified Data.Text as T+import Prelude ------------------------------------------------------------------------------- import Aws.Core import Aws.DynamoDb.Core@@ -97,7 +98,7 @@ instance ResponseConsumer r DeleteItemResponse where type ResponseMetadata DeleteItemResponse = DdbResponse- responseConsumer _ ref resp = ddbResponseConsumer ref resp+ responseConsumer _ _ ref resp = ddbResponseConsumer ref resp instance AsMemoryResponse DeleteItemResponse where
Aws/DynamoDb/Commands/GetItem.hs view
@@ -19,6 +19,7 @@ import Data.Aeson import Data.Default import qualified Data.Text as T+import Prelude ------------------------------------------------------------------------------- import Aws.Core import Aws.DynamoDb.Core@@ -84,7 +85,7 @@ instance ResponseConsumer r GetItemResponse where type ResponseMetadata GetItemResponse = DdbResponse- responseConsumer _ ref resp = ddbResponseConsumer ref resp+ responseConsumer _ _ ref resp = ddbResponseConsumer ref resp instance AsMemoryResponse GetItemResponse where
Aws/DynamoDb/Commands/PutItem.hs view
@@ -26,6 +26,7 @@ import Data.Aeson import Data.Default import qualified Data.Text as T+import Prelude ------------------------------------------------------------------------------- import Aws.Core import Aws.DynamoDb.Core@@ -98,7 +99,7 @@ instance ResponseConsumer r PutItemResponse where type ResponseMetadata PutItemResponse = DdbResponse- responseConsumer _ ref resp = ddbResponseConsumer ref resp+ responseConsumer _ _ ref resp = ddbResponseConsumer ref resp instance AsMemoryResponse PutItemResponse where
Aws/DynamoDb/Commands/Query.hs view
@@ -135,7 +135,8 @@ instance ResponseConsumer r QueryResponse where type ResponseMetadata QueryResponse = DdbResponse- responseConsumer _ ref resp = ddbResponseConsumer ref resp+ responseConsumer _ _ ref resp+ = ddbResponseConsumer ref resp instance AsMemoryResponse QueryResponse where
Aws/DynamoDb/Commands/Scan.hs view
@@ -114,7 +114,7 @@ instance ResponseConsumer r ScanResponse where type ResponseMetadata ScanResponse = DdbResponse- responseConsumer _ ref resp = ddbResponseConsumer ref resp+ responseConsumer _ _ ref resp = ddbResponseConsumer ref resp instance AsMemoryResponse ScanResponse where
Aws/DynamoDb/Commands/Table.hs view
@@ -44,6 +44,7 @@ import Data.Typeable import qualified Data.Vector as V import GHC.Generics (Generic)+import Prelude ------------------------------------------------------------------------------- import Aws.Core import Aws.DynamoDb.Core@@ -293,7 +294,7 @@ {- Can't derive these instances onto the return values instance ResponseConsumer r TableDescription where type ResponseMetadata TableDescription = DyMetadata- responseConsumer _ _ = ddbResponseConsumer+ responseConsumer _ _ _ = ddbResponseConsumer instance AsMemoryResponse TableDescription where type MemoryResponse TableDescription = TableDescription loadToMemory = return@@ -351,7 +352,7 @@ -- ResponseConsumer and AsMemoryResponse can't be derived instance ResponseConsumer r CreateTableResult where type ResponseMetadata CreateTableResult = DdbResponse- responseConsumer _ = ddbResponseConsumer+ responseConsumer _ _ = ddbResponseConsumer instance AsMemoryResponse CreateTableResult where type MemoryResponse CreateTableResult = TableDescription loadToMemory = return . ctStatus@@ -376,7 +377,7 @@ -- ResponseConsumer can't be derived instance ResponseConsumer r DescribeTableResult where type ResponseMetadata DescribeTableResult = DdbResponse- responseConsumer _ = ddbResponseConsumer+ responseConsumer _ _ = ddbResponseConsumer instance AsMemoryResponse DescribeTableResult where type MemoryResponse DescribeTableResult = TableDescription loadToMemory = return . dtStatus@@ -408,7 +409,7 @@ -- ResponseConsumer can't be derived instance ResponseConsumer r UpdateTableResult where type ResponseMetadata UpdateTableResult = DdbResponse- responseConsumer _ = ddbResponseConsumer+ responseConsumer _ _ = ddbResponseConsumer instance AsMemoryResponse UpdateTableResult where type MemoryResponse UpdateTableResult = TableDescription loadToMemory = return . uStatus@@ -433,7 +434,7 @@ -- ResponseConsumer can't be derived instance ResponseConsumer r DeleteTableResult where type ResponseMetadata DeleteTableResult = DdbResponse- responseConsumer _ = ddbResponseConsumer+ responseConsumer _ _ = ddbResponseConsumer instance AsMemoryResponse DeleteTableResult where type MemoryResponse DeleteTableResult = TableDescription loadToMemory = return . dStatus@@ -459,7 +460,7 @@ parseJSON = A.genericParseJSON capitalizeOpt instance ResponseConsumer r ListTablesResult where type ResponseMetadata ListTablesResult = DdbResponse- responseConsumer _ = ddbResponseConsumer+ responseConsumer _ _ = ddbResponseConsumer instance AsMemoryResponse ListTablesResult where type MemoryResponse ListTablesResult = [T.Text] loadToMemory = return . tableNames
Aws/DynamoDb/Commands/UpdateItem.hs view
@@ -25,7 +25,6 @@ , AttributeUpdate(..) , au , UpdateAction(..)- , UpdateItem(..) , UpdateItemResponse(..) ) where @@ -34,6 +33,7 @@ import Data.Aeson import Data.Default import qualified Data.Text as T+import Prelude ------------------------------------------------------------------------------- import Aws.Core import Aws.DynamoDb.Core@@ -158,7 +158,7 @@ instance ResponseConsumer r UpdateItemResponse where type ResponseMetadata UpdateItemResponse = DdbResponse- responseConsumer _ ref resp = ddbResponseConsumer ref resp+ responseConsumer _ _ ref resp = ddbResponseConsumer ref resp instance AsMemoryResponse UpdateItemResponse where
Aws/DynamoDb/Core.hs view
@@ -399,7 +399,7 @@ ------------------------------------------------------------------------------- pico :: Rational-pico = toRational $ 10 ^ (12 :: Integer)+pico = toRational $ (10 :: Integer) ^ (12 :: Integer) -------------------------------------------------------------------------------@@ -1142,6 +1142,7 @@ instance Default QuerySelect where def = SelectAll -------------------------------------------------------------------------------+querySelectJson :: KeyValue t => QuerySelect -> [t] querySelectJson (SelectSpecific as) = [ "Select" .= String "SPECIFIC_ATTRIBUTES" , "AttributesToGet" .= as]@@ -1338,7 +1339,7 @@ -- | Parse attribute if it's present in the 'Item'. Fail if attribute -- is present but conversion fails. getAttr'- :: forall a. (Typeable a, DynVal a)+ :: forall a. (DynVal a) => T.Text -- ^ Attribute name -> Item
Aws/Ec2/InstanceMetadata.hs view
@@ -8,6 +8,7 @@ import Data.ByteString.Lazy.UTF8 as BU import Data.Typeable import qualified Network.HTTP.Conduit as HTTP+import Prelude data InstanceMetadataException = MetadataNotFound String@@ -16,8 +17,9 @@ instance Exception InstanceMetadataException getInstanceMetadata :: HTTP.Manager -> String -> String -> IO L.ByteString-getInstanceMetadata mgr p x = do req <- HTTP.parseUrl ("http://169.254.169.254/" ++ p ++ '/' : x)- HTTP.responseBody <$> HTTP.httpLbs req mgr+getInstanceMetadata mgr p x = do+ req <- HTTP.parseUrlThrow ("http://169.254.169.254/" ++ p ++ '/' : x)+ HTTP.responseBody <$> HTTP.httpLbs req mgr getInstanceMetadataListing :: HTTP.Manager -> String -> IO [String] getInstanceMetadataListing mgr p = map BU.toString . B8.split '\n' <$> getInstanceMetadata mgr p ""
Aws/Iam/Commands/CreateAccessKey.hs view
@@ -16,6 +16,7 @@ import qualified Data.Text as Text import Data.Time import Data.Typeable+import Prelude import Text.XML.Cursor (($//)) -- | Creates a new AWS secret access key and corresponding AWS access key ID@@ -58,7 +59,7 @@ instance ResponseConsumer CreateAccessKey CreateAccessKeyResponse where type ResponseMetadata CreateAccessKeyResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer $ \cursor -> do let attr name = force ("Missing " ++ Text.unpack name) $ cursor $// elContent name
Aws/Iam/Commands/CreateUser.hs view
@@ -14,6 +14,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude -- | Creates a new user. --@@ -41,8 +42,9 @@ instance ResponseConsumer CreateUser CreateUserResponse where type ResponseMetadata CreateUserResponse = IamMetadata- responseConsumer _ = iamResponseConsumer $- fmap CreateUserResponse . parseUser+ responseConsumer _ _+ = iamResponseConsumer $+ fmap CreateUserResponse . parseUser instance Transaction CreateUser CreateUserResponse
Aws/Iam/Commands/DeleteAccessKey.hs view
@@ -13,6 +13,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude -- | Deletes the access key associated with the specified user. --@@ -39,7 +40,8 @@ instance ResponseConsumer DeleteAccessKey DeleteAccessKeyResponse where type ResponseMetadata DeleteAccessKeyResponse = IamMetadata- responseConsumer _ = iamResponseConsumer (const $ return DeleteAccessKeyResponse)+ responseConsumer _ _+ = iamResponseConsumer (const $ return DeleteAccessKeyResponse) instance Transaction DeleteAccessKey DeleteAccessKeyResponse
Aws/Iam/Commands/DeleteUser.hs view
@@ -27,7 +27,8 @@ instance ResponseConsumer DeleteUser DeleteUserResponse where type ResponseMetadata DeleteUserResponse = IamMetadata- responseConsumer _ = iamResponseConsumer (const $ return DeleteUserResponse)+ responseConsumer _ _+ = iamResponseConsumer (const $ return DeleteUserResponse) instance Transaction DeleteUser DeleteUserResponse
Aws/Iam/Commands/DeleteUserPolicy.hs view
@@ -37,7 +37,8 @@ instance ResponseConsumer DeleteUserPolicy DeleteUserPolicyResponse where type ResponseMetadata DeleteUserPolicyResponse = IamMetadata- responseConsumer _ = iamResponseConsumer (const $ return DeleteUserPolicyResponse)+ responseConsumer _ _ =+ iamResponseConsumer (const $ return DeleteUserPolicyResponse) instance Transaction DeleteUserPolicy DeleteUserPolicyResponse
Aws/Iam/Commands/GetUser.hs view
@@ -13,6 +13,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude -- | Retreives information about the given user. --@@ -33,8 +34,8 @@ instance ResponseConsumer GetUser GetUserResponse where type ResponseMetadata GetUserResponse = IamMetadata- responseConsumer _ = iamResponseConsumer $- fmap GetUserResponse . parseUser+ responseConsumer _ _ = iamResponseConsumer $+ fmap GetUserResponse . parseUser instance Transaction GetUser GetUserResponse
Aws/Iam/Commands/GetUserPolicy.hs view
@@ -16,6 +16,7 @@ import Data.Typeable import qualified Network.HTTP.Types as HTTP import Text.XML.Cursor (($//))+import Prelude -- | Retreives the specified policy document for the specified user. --@@ -50,7 +51,7 @@ instance ResponseConsumer GetUserPolicy GetUserPolicyResponse where type ResponseMetadata GetUserPolicyResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer $ \cursor -> do let attr name = force ("Missing " ++ Text.unpack name) $ cursor $// elContent name
Aws/Iam/Commands/ListAccessKeys.hs view
@@ -14,6 +14,7 @@ import Data.Text (Text) import Data.Time import Data.Typeable+import Prelude import Text.XML.Cursor (laxElement, ($/), ($//), (&|)) -- | Returns the access keys associated with the specified user.@@ -71,7 +72,7 @@ instance ResponseConsumer ListAccessKeys ListAccessKeysResponse where type ResponseMetadata ListAccessKeysResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer $ \cursor -> do (lakrIsTruncated, lakrMarker) <- markedIterResponse cursor lakrAccessKeyMetadata <- sequence $
Aws/Iam/Commands/ListMfaDevices.hs view
@@ -12,6 +12,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude import Text.XML.Cursor (laxElement, ($//), (&|)) -- | Lists the MFA devices. If the request includes the user name, -- then this action lists all the MFA devices associated with the@@ -60,7 +61,7 @@ instance ResponseConsumer ListMfaDevices ListMfaDevicesResponse where type ResponseMetadata ListMfaDevicesResponse = IamMetadata- responseConsumer _req =+ responseConsumer _ _req = iamResponseConsumer $ \ cursor -> do (lmfarIsTruncated, lmfarMarker) <- markedIterResponse cursor lmfarMfaDevices <-
Aws/Iam/Commands/ListUserPolicies.hs view
@@ -52,7 +52,7 @@ instance ResponseConsumer ListUserPolicies ListUserPoliciesResponse where type ResponseMetadata ListUserPoliciesResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer $ \cursor -> do (luprIsTruncated, luprMarker) <- markedIterResponse cursor let luprPolicyNames = cursor $// laxElement "member" &/ content
Aws/Iam/Commands/ListUsers.hs view
@@ -14,6 +14,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude import Text.XML.Cursor (laxElement, ($//), (&|)) -- | Lists users that have the specified path prefix.@@ -55,7 +56,7 @@ instance ResponseConsumer ListUsers ListUsersResponse where type ResponseMetadata ListUsersResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer $ \cursor -> do (lurIsTruncated, lurMarker) <- markedIterResponse cursor lurUsers <- sequence $
Aws/Iam/Commands/PutUserPolicy.hs view
@@ -41,7 +41,7 @@ instance ResponseConsumer PutUserPolicy PutUserPolicyResponse where type ResponseMetadata PutUserPolicyResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer (const $ return PutUserPolicyResponse) instance Transaction PutUserPolicy PutUserPolicyResponse
Aws/Iam/Commands/UpdateAccessKey.hs view
@@ -13,6 +13,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude -- | Changes the status of the specified access key. --@@ -47,7 +48,7 @@ instance ResponseConsumer UpdateAccessKey UpdateAccessKeyResponse where type ResponseMetadata UpdateAccessKeyResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer (const $ return UpdateAccessKeyResponse) instance Transaction UpdateAccessKey UpdateAccessKeyResponse
Aws/Iam/Commands/UpdateUser.hs view
@@ -13,6 +13,7 @@ import Control.Applicative import Data.Text (Text) import Data.Typeable+import Prelude -- | Updates the name and/or path of the specified user. --@@ -42,7 +43,7 @@ instance ResponseConsumer UpdateUser UpdateUserResponse where type ResponseMetadata UpdateUserResponse = IamMetadata- responseConsumer _+ responseConsumer _ _ = iamResponseConsumer (const $ return UpdateUserResponse) instance Transaction UpdateUser UpdateUserResponse
Aws/Iam/Core.hs view
@@ -35,9 +35,7 @@ import Data.Typeable import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format-#else+#if !MIN_VERSION_time(1,5,0) import System.Locale #endif import Text.XML.Cursor (($//))
Aws/Iam/Internal.hs view
@@ -20,6 +20,7 @@ import Data.ByteString (ByteString) import Data.Maybe import Data.Monoid ((<>))+import Prelude import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Encoding as Text
Aws/S3/Commands/CopyObject.hs view
@@ -15,11 +15,10 @@ import Data.Time import qualified Network.HTTP.Conduit as HTTP import Text.XML.Cursor (($/), (&|))-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format-#else+#if !MIN_VERSION_time(1,5,0) import System.Locale #endif+import Prelude data CopyMetadataDirective = CopyMetadata | ReplaceMetadata [(T.Text,T.Text)] deriving (Show)@@ -94,7 +93,7 @@ instance ResponseConsumer CopyObject CopyObjectResponse where type ResponseMetadata CopyObjectResponse = S3Metadata- responseConsumer _ mref = flip s3ResponseConsumer mref $ \resp -> do+ responseConsumer _ _ mref = flip s3ResponseConsumer mref $ \resp -> do let vid = T.decodeUtf8 `fmap` lookup "x-amz-version-id" (HTTP.responseHeaders resp) (lastMod, etag) <- xmlCursorConsumer parse mref resp return $ CopyObjectResponse vid lastMod etag
Aws/S3/Commands/DeleteBucket.hs view
@@ -4,7 +4,6 @@ import Aws.Core import Aws.S3.Core import Data.ByteString.Char8 ({- IsString -})-import qualified Data.Text as T import qualified Data.Text.Encoding as T data DeleteBucket = DeleteBucket { dbBucket :: Bucket }@@ -31,7 +30,7 @@ instance ResponseConsumer DeleteBucket DeleteBucketResponse where type ResponseMetadata DeleteBucketResponse = S3Metadata- responseConsumer _ = s3ResponseConsumer $ \_ -> return DeleteBucketResponse+ responseConsumer _ _ = s3ResponseConsumer $ \_ -> return DeleteBucketResponse instance Transaction DeleteBucket DeleteBucketResponse
Aws/S3/Commands/DeleteObject.hs view
@@ -33,7 +33,8 @@ instance ResponseConsumer DeleteObject DeleteObjectResponse where type ResponseMetadata DeleteObjectResponse = S3Metadata- responseConsumer _ = s3ResponseConsumer $ \_ -> return DeleteObjectResponse+ responseConsumer _ _+ = s3ResponseConsumer $ \_ -> return DeleteObjectResponse instance Transaction DeleteObject DeleteObjectResponse
Aws/S3/Commands/DeleteObjects.hs view
@@ -103,7 +103,7 @@ instance ResponseConsumer DeleteObjects DeleteObjectsResponse where type ResponseMetadata DeleteObjectsResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse cursor = do dorDeleted <- sequence $ cursor $/ Cu.laxElement "Deleted" &| parseDeleted dorErrors <- sequence $ cursor $/ Cu.laxElement "Error" &| parseErrors
Aws/S3/Commands/GetBucket.hs view
@@ -11,6 +11,7 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Data.Traversable+import Prelude import qualified Network.HTTP.Types as HTTP import qualified Text.XML.Cursor as Cu @@ -72,7 +73,7 @@ instance ResponseConsumer r GetBucketResponse where type ResponseMetadata GetBucketResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse cursor = do name <- force "Missing Name" $ cursor $/ elContent "Name" let delimiter = listToMaybe $ cursor $/ elContent "Delimiter"
Aws/S3/Commands/GetBucketLocation.hs view
@@ -44,7 +44,7 @@ instance ResponseConsumer r GetBucketLocationResponse where type ResponseMetadata GetBucketLocationResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse cursor = do locationConstraint <- force "Missing Location" $ cursor $.// elContent "LocationConstraint" return GetBucketLocationResponse { gblrLocationConstraint = normaliseLocation locationConstraint }
Aws/S3/Commands/GetObject.hs view
@@ -1,10 +1,12 @@+{-# LANGUAGE CPP #-}+ module Aws.S3.Commands.GetObject where import Aws.Core import Aws.S3.Core import Control.Applicative-import Control.Monad.Trans.Resource (ResourceT, throwM)+import Control.Monad.Trans.Resource (ResourceT) import Data.ByteString.Char8 ({- IsString -}) import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy as L@@ -13,6 +15,7 @@ import Data.Maybe import qualified Data.Text as T import qualified Data.Text.Encoding as T+import Prelude import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP @@ -79,16 +82,14 @@ instance ResponseConsumer GetObject GetObjectResponse where type ResponseMetadata GetObjectResponse = S3Metadata- responseConsumer GetObject{..} metadata resp+ responseConsumer httpReq GetObject{..} metadata resp | status == HTTP.status200 = do rsp <- s3BinaryResponseConsumer return metadata resp om <- parseObjectMetadata (HTTP.responseHeaders resp) return $ GetObjectResponse om rsp- | otherwise = throwM $ HTTP.StatusCodeException status headers cookies+ | otherwise = throwStatusCodeException httpReq resp where status = HTTP.responseStatus resp- headers = HTTP.responseHeaders resp- cookies = HTTP.responseCookieJar resp instance Transaction GetObject GetObjectResponse
Aws/S3/Commands/GetService.hs view
@@ -25,7 +25,7 @@ instance ResponseConsumer r GetServiceResponse where type ResponseMetadata GetServiceResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse el = do owner <- forceM "Missing Owner" $ el $/ Cu.laxElement "Owner" &| parseUserInfo
Aws/S3/Commands/HeadObject.hs view
@@ -4,12 +4,12 @@ import Aws.Core import Aws.S3.Core import Control.Applicative-import Control.Monad.Trans.Resource (throwM) import Data.ByteString.Char8 ({- IsString -}) import qualified Data.ByteString.Char8 as B8 import Data.Maybe import qualified Data.Text as T import qualified Data.Text.Encoding as T+import Prelude import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP @@ -60,14 +60,13 @@ instance ResponseConsumer HeadObject HeadObjectResponse where type ResponseMetadata HeadObjectResponse = S3Metadata- responseConsumer HeadObject{..} _ resp+ responseConsumer httpReq HeadObject{..} _ resp | status == HTTP.status200 = HeadObjectResponse . Just <$> parseObjectMetadata headers | status == HTTP.status404 = return $ HeadObjectResponse Nothing- | otherwise = throwM $ HTTP.StatusCodeException status headers cookies+ | otherwise = throwStatusCodeException httpReq resp where status = HTTP.responseStatus resp headers = HTTP.responseHeaders resp- cookies = HTTP.responseCookieJar resp instance Transaction HeadObject HeadObjectResponse
Aws/S3/Commands/Multipart.hs view
@@ -22,6 +22,7 @@ import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP import qualified Text.XML as XML+import Prelude {- Aws supports following 6 api for Multipart-Upload.@@ -99,7 +100,7 @@ instance ResponseConsumer r InitiateMultipartUploadResponse where type ResponseMetadata InitiateMultipartUploadResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse cursor = do bucket <- force "Missing Bucket Name" $ cursor $/ elContent "Bucket" key <- force "Missing Key" $ cursor $/ elContent "Key"@@ -172,7 +173,7 @@ instance ResponseConsumer UploadPart UploadPartResponse where type ResponseMetadata UploadPartResponse = S3Metadata- responseConsumer _ = s3ResponseConsumer $ \resp -> do+ responseConsumer _ _ = s3ResponseConsumer $ \resp -> do let vid = T.decodeUtf8 `fmap` lookup "x-amz-version-id" (HTTP.responseHeaders resp) let etag = fromMaybe "" $ T.decodeUtf8 `fmap` lookup "ETag" (HTTP.responseHeaders resp) return $ UploadPartResponse vid etag@@ -259,7 +260,7 @@ instance ResponseConsumer r CompleteMultipartUploadResponse where type ResponseMetadata CompleteMultipartUploadResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse cursor = do location <- force "Missing Location" $ cursor $/ elContent "Location" bucket <- force "Missing Bucket Name" $ cursor $/ elContent "Bucket"@@ -318,7 +319,7 @@ instance ResponseConsumer r AbortMultipartUploadResponse where type ResponseMetadata AbortMultipartUploadResponse = S3Metadata - responseConsumer _ = s3XmlResponseConsumer parse+ responseConsumer _ _ = s3XmlResponseConsumer parse where parse _cursor = return AbortMultipartUploadResponse {}
Aws/S3/Commands/PutBucket.hs view
@@ -74,7 +74,7 @@ instance ResponseConsumer r PutBucketResponse where type ResponseMetadata PutBucketResponse = S3Metadata - responseConsumer _ = s3ResponseConsumer $ \_ -> return PutBucketResponse+ responseConsumer _ _ = s3ResponseConsumer $ \_ -> return PutBucketResponse instance Transaction PutBucket PutBucketResponse
Aws/S3/Commands/PutObject.hs view
@@ -13,6 +13,7 @@ import qualified Data.CaseInsensitive as CI import qualified Data.Text as T import qualified Data.Text.Encoding as T+import Prelude import qualified Network.HTTP.Conduit as HTTP data PutObject = PutObject {@@ -83,7 +84,7 @@ instance ResponseConsumer PutObject PutObjectResponse where type ResponseMetadata PutObjectResponse = S3Metadata- responseConsumer _ = s3ResponseConsumer $ \resp -> do+ responseConsumer _ _ = s3ResponseConsumer $ \resp -> do let vid = T.decodeUtf8 `fmap` lookup "x-amz-version-id" (HTTP.responseHeaders resp) return $ PutObjectResponse vid
Aws/S3/Core.hs view
@@ -18,9 +18,7 @@ import Control.Applicative ((<|>)) import Data.Time import Data.Typeable-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format-#else+#if !MIN_VERSION_time(1,5,0) import System.Locale #endif import Text.XML.Cursor (($/), (&|))@@ -38,6 +36,7 @@ import qualified Network.HTTP.Types as HTTP import qualified Text.XML as XML import qualified Text.XML.Cursor as Cu+import Prelude data S3Authorization = S3AuthorizationHeader@@ -200,7 +199,22 @@ canonicalizedResource = Blaze8.fromChar '/' `mappend` maybe mempty (\s -> Blaze.copyByteString s `mappend` Blaze8.fromChar '/') s3QBucket `mappend` maybe mempty Blaze.copyByteString urlEncodedS3QObject `mappend`- HTTP.renderQueryBuilder True sortedSubresources+ encodeQuerySign sortedSubresources+ -- query parameters overriding response headers must not be URI encoded when calculating signature+ -- http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#ConstructingTheCanonicalizedResourceElement+ -- Note this is limited to amazon auth version 2 in the new auth version 4 this weird exception is not present+ encodeQuerySign qs =+ let ceq = Blaze8.fromChar '='+ cqt = Blaze8.fromChar '?'+ camp = Blaze8.fromChar '&'+ overrideParams = map B8.pack ["response-content-type", "response-content-language", "response-expires", "response-cache-control", "response-content-disposition", "response-content-encoding"]+ encItem (k, mv) =+ let enc = if k `elem` overrideParams then Blaze.copyByteString else HTTP.urlEncodeBuilder True+ in enc k `mappend` maybe mempty (mappend ceq . enc) mv+ in case intersperse camp (map encItem qs) of+ [] -> mempty+ qs' -> mconcat (cqt :qs')+ ti = case (s3UseUri, signatureTimeInfo) of (False, ti') -> ti' (True, AbsoluteTimestamp time) -> AbsoluteExpires $ s3DefaultExpiry `addUTCTime` time
Aws/Ses/Commands/DeleteIdentity.hs view
@@ -29,7 +29,8 @@ instance ResponseConsumer DeleteIdentity DeleteIdentityResponse where type ResponseMetadata DeleteIdentityResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \_ -> return DeleteIdentityResponse+ responseConsumer _ _+ = sesResponseConsumer $ \_ -> return DeleteIdentityResponse instance Transaction DeleteIdentity DeleteIdentityResponse where
Aws/Ses/Commands/GetIdentityDkimAttributes.hs view
@@ -44,7 +44,7 @@ instance ResponseConsumer GetIdentityDkimAttributes GetIdentityDkimAttributesResponse where type ResponseMetadata GetIdentityDkimAttributesResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \cursor -> do+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do let buildAttr e = do idIdentity <- force "Missing Key" $ e $/ elContent "key" enabled <- force "Missing DkimEnabled" $ e $// elContent "DkimEnabled"
Aws/Ses/Commands/GetIdentityNotificationAttributes.hs view
@@ -43,7 +43,7 @@ instance ResponseConsumer GetIdentityNotificationAttributes GetIdentityNotificationAttributesResponse where type ResponseMetadata GetIdentityNotificationAttributesResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \cursor -> do+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do let buildAttr e = do inIdentity <- force "Missing Key" $ e $/ elContent "key" fwdText <- force "Missing ForwardingEnabled" $ e $// elContent "ForwardingEnabled"
Aws/Ses/Commands/GetIdentityVerificationAttributes.hs view
@@ -45,7 +45,7 @@ instance ResponseConsumer GetIdentityVerificationAttributes GetIdentityVerificationAttributesResponse where type ResponseMetadata GetIdentityVerificationAttributesResponse = SesMetadata- responseConsumer _ =+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do let buildAttr e = do ivIdentity <- force "Missing Key" $ e $/ elContent "key"
Aws/Ses/Commands/ListIdentities.hs view
@@ -50,7 +50,7 @@ instance ResponseConsumer ListIdentities ListIdentitiesResponse where type ResponseMetadata ListIdentitiesResponse = SesMetadata- responseConsumer _ =+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do let ids = cursor $// laxElement "Identities" &/ elContent "member" return $ ListIdentitiesResponse ids
Aws/Ses/Commands/SendRawEmail.hs view
@@ -45,7 +45,7 @@ instance ResponseConsumer SendRawEmail SendRawEmailResponse where type ResponseMetadata SendRawEmailResponse = SesMetadata- responseConsumer _ =+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do messageId <- force "MessageId not found" $ cursor $// elContent "MessageId" return (SendRawEmailResponse messageId)
Aws/Ses/Commands/SetIdentityDkimEnabled.hs view
@@ -32,7 +32,8 @@ instance ResponseConsumer SetIdentityDkimEnabled SetIdentityDkimEnabledResponse where type ResponseMetadata SetIdentityDkimEnabledResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \_ -> return SetIdentityDkimEnabledResponse+ responseConsumer _ _+ = sesResponseConsumer $ \_ -> return SetIdentityDkimEnabledResponse instance Transaction SetIdentityDkimEnabled SetIdentityDkimEnabledResponse
Aws/Ses/Commands/SetIdentityFeedbackForwardingEnabled.hs view
@@ -34,7 +34,8 @@ instance ResponseConsumer SetIdentityFeedbackForwardingEnabled SetIdentityFeedbackForwardingEnabledResponse where type ResponseMetadata SetIdentityFeedbackForwardingEnabledResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \_ -> return SetIdentityFeedbackForwardingEnabledResponse + responseConsumer _ _+ = sesResponseConsumer $ \_ -> return SetIdentityFeedbackForwardingEnabledResponse instance Transaction SetIdentityFeedbackForwardingEnabled SetIdentityFeedbackForwardingEnabledResponse
Aws/Ses/Commands/SetIdentityNotificationTopic.hs view
@@ -48,7 +48,8 @@ instance ResponseConsumer SetIdentityNotificationTopic SetIdentityNotificationTopicResponse where type ResponseMetadata SetIdentityNotificationTopicResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \_ -> return SetIdentityNotificationTopicResponse + responseConsumer _ _+ = sesResponseConsumer $ \_ -> return SetIdentityNotificationTopicResponse instance Transaction SetIdentityNotificationTopic SetIdentityNotificationTopicResponse
Aws/Ses/Commands/VerifyDomainDkim.hs view
@@ -28,7 +28,7 @@ instance ResponseConsumer VerifyDomainDkim VerifyDomainDkimResponse where type ResponseMetadata VerifyDomainDkimResponse = SesMetadata- responseConsumer _ =+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do let tokens = cursor $// laxElement "DkimTokens" &/ elContent "member" return (VerifyDomainDkimResponse tokens)
Aws/Ses/Commands/VerifyDomainIdentity.hs view
@@ -29,7 +29,7 @@ instance ResponseConsumer VerifyDomainIdentity VerifyDomainIdentityResponse where type ResponseMetadata VerifyDomainIdentityResponse = SesMetadata- responseConsumer _ =+ responseConsumer _ _ = sesResponseConsumer $ \cursor -> do token <- force "Verification token not found" $ cursor $// elContent "VerificationToken" return (VerifyDomainIdentityResponse token)
Aws/Ses/Commands/VerifyEmailIdentity.hs view
@@ -29,7 +29,8 @@ instance ResponseConsumer VerifyEmailIdentity VerifyEmailIdentityResponse where type ResponseMetadata VerifyEmailIdentityResponse = SesMetadata- responseConsumer _ = sesResponseConsumer $ \_ -> return VerifyEmailIdentityResponse+ responseConsumer _ _+ = sesResponseConsumer $ \_ -> return VerifyEmailIdentityResponse instance Transaction VerifyEmailIdentity VerifyEmailIdentityResponse where
Aws/Ses/Core.hs view
@@ -36,6 +36,7 @@ import Data.Text (Text) import qualified Data.Text.Encoding as TE import Data.Typeable+import Prelude import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP import Text.XML.Cursor (($/), ($//))
Aws/SimpleDb/Commands/Attributes.hs view
@@ -5,6 +5,7 @@ import Control.Applicative import Control.Monad import Data.Maybe+import Prelude import Text.XML.Cursor (($//), (&|)) import qualified Data.Text as T import qualified Data.Text.Encoding as T@@ -39,7 +40,8 @@ instance ResponseConsumer r GetAttributesResponse where type ResponseMetadata GetAttributesResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer parse+ responseConsumer _ _+ = sdbResponseConsumer parse where parse cursor = do sdbCheckResponseType () "GetAttributesResponse" cursor attributes <- sequence $ cursor $// Cu.laxElement "Attribute" &| readAttribute@@ -83,7 +85,8 @@ instance ResponseConsumer r PutAttributesResponse where type ResponseMetadata PutAttributesResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer $ sdbCheckResponseType PutAttributesResponse "PutAttributesResponse"+ responseConsumer _ _+ = sdbResponseConsumer $ sdbCheckResponseType PutAttributesResponse "PutAttributesResponse" instance Transaction PutAttributes PutAttributesResponse @@ -123,7 +126,8 @@ instance ResponseConsumer r DeleteAttributesResponse where type ResponseMetadata DeleteAttributesResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer $ sdbCheckResponseType DeleteAttributesResponse "DeleteAttributesResponse"+ responseConsumer _ _+ = sdbResponseConsumer $ sdbCheckResponseType DeleteAttributesResponse "DeleteAttributesResponse" instance Transaction DeleteAttributes DeleteAttributesResponse @@ -156,7 +160,8 @@ instance ResponseConsumer r BatchPutAttributesResponse where type ResponseMetadata BatchPutAttributesResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer $ sdbCheckResponseType BatchPutAttributesResponse "BatchPutAttributesResponse"+ responseConsumer _ _+ = sdbResponseConsumer $ sdbCheckResponseType BatchPutAttributesResponse "BatchPutAttributesResponse" instance Transaction BatchPutAttributes BatchPutAttributesResponse @@ -189,7 +194,8 @@ instance ResponseConsumer r BatchDeleteAttributesResponse where type ResponseMetadata BatchDeleteAttributesResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer $ sdbCheckResponseType BatchDeleteAttributesResponse "BatchDeleteAttributesResponse"+ responseConsumer _ _+ = sdbResponseConsumer $ sdbCheckResponseType BatchDeleteAttributesResponse "BatchDeleteAttributesResponse" instance Transaction BatchDeleteAttributes BatchDeleteAttributesResponse
Aws/SimpleDb/Commands/Domain.hs view
@@ -6,6 +6,7 @@ import Data.Maybe import Data.Time import Data.Time.Clock.POSIX+import Prelude import Text.XML.Cursor (($//), (&|)) import qualified Data.Text as T import qualified Data.Text.Encoding as T@@ -30,7 +31,8 @@ instance ResponseConsumer r CreateDomainResponse where type ResponseMetadata CreateDomainResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer $ sdbCheckResponseType CreateDomainResponse "CreateDomainResponse"+ responseConsumer _ _+ = sdbResponseConsumer $ sdbCheckResponseType CreateDomainResponse "CreateDomainResponse" instance Transaction CreateDomain CreateDomainResponse @@ -58,7 +60,8 @@ instance ResponseConsumer r DeleteDomainResponse where type ResponseMetadata DeleteDomainResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer $ sdbCheckResponseType DeleteDomainResponse "DeleteDomainResponse"+ responseConsumer _ _+ = sdbResponseConsumer $ sdbCheckResponseType DeleteDomainResponse "DeleteDomainResponse" instance Transaction DeleteDomain DeleteDomainResponse @@ -95,7 +98,8 @@ instance ResponseConsumer r DomainMetadataResponse where type ResponseMetadata DomainMetadataResponse = SdbMetadata - responseConsumer _ = sdbResponseConsumer parse+ responseConsumer _ _+ = sdbResponseConsumer parse where parse cursor = do sdbCheckResponseType () "DomainMetadataResponse" cursor dmrTimestamp <- forceM "Timestamp expected" $ cursor $// elCont "Timestamp" &| (fmap posixSecondsToUTCTime . readInt)@@ -141,7 +145,7 @@ instance ResponseConsumer r ListDomainsResponse where type ResponseMetadata ListDomainsResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer parse+ responseConsumer _ _ = sdbResponseConsumer parse where parse cursor = do sdbCheckResponseType () "ListDomainsResponse" cursor let names = cursor $// elContent "DomainName"
Aws/SimpleDb/Commands/Select.hs view
@@ -6,6 +6,7 @@ import Control.Applicative import Control.Monad import Data.Maybe+import Prelude import Text.XML.Cursor (($//), (&|)) import qualified Data.Text as T import qualified Data.Text.Encoding as T@@ -42,7 +43,7 @@ instance ResponseConsumer r SelectResponse where type ResponseMetadata SelectResponse = SdbMetadata- responseConsumer _ = sdbResponseConsumer parse+ responseConsumer _ _ = sdbResponseConsumer parse where parse cursor = do sdbCheckResponseType () "SelectResponse" cursor items <- sequence $ cursor $// Cu.laxElement "Item" &| readItem
Aws/SimpleDb/Core.hs view
@@ -15,6 +15,7 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as T import Data.Typeable+import Prelude import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP import Text.XML.Cursor (($|), ($/), ($//), (&|))
Aws/Sqs/Commands/Message.hs view
@@ -39,6 +39,7 @@ import qualified Network.HTTP.Types as HTTP import Text.Read (readEither) import qualified Text.XML.Cursor as Cu+import Prelude -- -------------------------------------------------------------------------- -- -- User Message Attributes@@ -216,7 +217,7 @@ instance ResponseConsumer r SendMessageResponse where type ResponseMetadata SendMessageResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse el = SendMessageResponse <$> force "Missing MD5 Signature"@@ -287,7 +288,7 @@ instance ResponseConsumer r DeleteMessageResponse where type ResponseMetadata DeleteMessageResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse _ = return DeleteMessageResponse {} @@ -559,7 +560,7 @@ instance ResponseConsumer r ReceiveMessageResponse where type ResponseMetadata ReceiveMessageResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse el = do result <- force "Missing ReceiveMessageResult"@@ -660,7 +661,7 @@ instance ResponseConsumer r ChangeMessageVisibilityResponse where type ResponseMetadata ChangeMessageVisibilityResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse _ = return ChangeMessageVisibilityResponse {}
Aws/Sqs/Commands/Permission.hs view
@@ -25,7 +25,7 @@ instance ResponseConsumer r AddPermissionResponse where type ResponseMetadata AddPermissionResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse _ = do return AddPermissionResponse {}@@ -55,7 +55,7 @@ instance ResponseConsumer r RemovePermissionResponse where type ResponseMetadata RemovePermissionResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse _ = do return RemovePermissionResponse {}
Aws/Sqs/Commands/Queue.hs view
@@ -5,6 +5,7 @@ import Aws.Sqs.Core import Control.Applicative import Data.Maybe+import Prelude import Text.XML.Cursor (($//), (&/)) import qualified Data.Text as T import qualified Data.Text.Encoding as TE@@ -23,7 +24,7 @@ instance ResponseConsumer r CreateQueueResponse where type ResponseMetadata CreateQueueResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse el = do url <- force "Missing Queue Url" $ el $// Cu.laxElement "QueueUrl" &/ Cu.content@@ -55,7 +56,7 @@ instance ResponseConsumer r DeleteQueueResponse where type ResponseMetadata DeleteQueueResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse _ = do return DeleteQueueResponse{} @@ -82,7 +83,7 @@ instance ResponseConsumer r ListQueuesResponse where type ResponseMetadata ListQueuesResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse el = do let queues = el $// Cu.laxElement "QueueUrl" &/ Cu.content
Aws/Sqs/Commands/QueueAttributes.hs view
@@ -27,7 +27,7 @@ instance ResponseConsumer r GetQueueAttributesResponse where type ResponseMetadata GetQueueAttributesResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse el = do let attributes = concat $ el $// Cu.laxElement "Attribute" &| parseAttributes@@ -64,7 +64,7 @@ instance ResponseConsumer r SetQueueAttributesResponse where type ResponseMetadata SetQueueAttributesResponse = SqsMetadata- responseConsumer _ = sqsXmlResponseConsumer parse+ responseConsumer _ _ = sqsXmlResponseConsumer parse where parse _ = do return SetQueueAttributesResponse {}
Aws/Sqs/Core.hs view
@@ -22,11 +22,10 @@ import qualified Data.Text.Encoding as TE import Data.Time import Data.Typeable+import Prelude import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HTTP-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format-#else+#if !MIN_VERSION_time(1,5,0) import System.Locale #endif import qualified Text.XML as XML
CHANGELOG.md view
@@ -1,15 +1,29 @@+0.15 series+-----------++NOTES: 0.15 brings technically breaking changes, but should not affect+most users.++- 0.15+ - Drop support for time <1.5+ - Support http-client 2.2+ - Support directory 1.3+ - Add upper bound on http-client in testsuite+ - DynamoDB: Eliminate orphan instance that conflicted with aeson-1.0+ - S3: Don't URI encode response header override query params when signing+ - Use HTTP.newManager instead of deprecated HTTP.withManager+ - Signing: Change date format from space-padding to zero-padding+ 0.14 series+----------- NOTES: 0.14 brings potentially breaking changes -- 0.14.1- - Eliminate orphan instance that conflicted with aeson-1.0- - Add upper bound on http-client in testsuite - 0.14 - transformers 0.5 support - data-default 0.6 support (also in 0.13.1) - time < 2.0 support- - General: Use AWS_SESSION_TOKEN if in environment for loading credentials+ - General: Use `AWS_SESSION_TOKEN` if in environment for loading credentials - General: loadCredentialsDefault fails gracefully if HOME is not set - DDB: Add parseAttr combinator for parsing an attribute into a FromDynItem - DDB: Expose the new DynBool type
+ Examples/GetObjectGoogle.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE OverloadedStrings #-}++import qualified Aws+import qualified Aws.Core as Aws+import qualified Aws.S3 as S3+import Data.Conduit (($$+-))+import Data.Conduit.Binary (sinkFile)+import Network.HTTP.Conduit (withManager, responseBody)++main :: IO ()+main = do+ Just creds <- Aws.loadCredentialsFromEnv+ let cfg = Aws.Configuration Aws.Timestamp creds (Aws.defaultLog Aws.Debug)+ let s3cfg = S3.s3 Aws.HTTP "storage.googleapis.com" False+ {- Set up a ResourceT region with an available HTTP manager. -}+ withManager $ \mgr -> do+ {- Create a request object with S3.getObject and run the request with pureAws. -}+ S3.GetObjectResponse { S3.gorResponse = rsp } <-+ Aws.pureAws cfg s3cfg mgr $+ {- Public bucket from GCP examples -}+ S3.getObject "uspto-pair" "applications/05900016.zip"++ {- Save the response to a file. -}+ responseBody rsp $$+- sinkFile "getobject-test.zip"
aws.cabal view
@@ -1,5 +1,5 @@ Name: aws-Version: 0.14.1+Version: 0.15 Synopsis: Amazon Web Services (AWS) for Haskell Description: Bindings for Amazon Web Services (AWS), with the aim of supporting all AWS services. To see a high level overview of the library, see the README at <https://github.com/aristidb/aws/blob/master/README.md>. Homepage: http://github.com/aristidb/aws@@ -19,7 +19,7 @@ Source-repository this type: git location: https://github.com/aristidb/aws.git- tag: 0.14.0+ tag: 0.15 Source-repository head type: git@@ -125,9 +125,9 @@ containers >= 0.4, cryptohash >= 0.11 && < 0.12, data-default >= 0.5.3 && < 0.8,- directory >= 1.0 && < 1.3,+ directory >= 1.0 && < 2.0, filepath >= 1.1 && < 1.5,- http-conduit >= 2.1 && < 2.2,+ http-conduit >= 2.1 && < 2.3, http-types >= 0.7 && < 0.10, lifted-base >= 0.1 && < 0.3, monad-control >= 0.3,@@ -139,7 +139,7 @@ scientific >= 0.3, tagged >= 0.7 && < 0.9, text >= 0.11,- time >= 1.1.4 && < 2.0,+ time >= 1.4.0 && < 1.7, transformers >= 0.2.2 && < 0.6, unordered-containers >= 0.2, utf8-string >= 0.3 && < 1.1,@@ -169,6 +169,23 @@ Executable GetObject Main-is: GetObject.hs+ Hs-source-dirs: Examples++ if !flag(Examples)+ Buildable: False+ else+ Buildable: True+ Build-depends:+ base == 4.*,+ aws,+ http-conduit,+ conduit,+ conduit-extra++ Default-Language: Haskell2010++Executable GetObjectGoogle+ Main-is: GetObjectGoogle.hs Hs-source-dirs: Examples if !flag(Examples)