amazonka-s3-streaming 0.1.0.3 → 0.1.0.4
raw patch · 4 files changed
+71/−58 lines, 4 filesdep ~amazonka-s3-streamingPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: amazonka-s3-streaming
API changes (from Hackage documentation)
Files
- Main.hs +19/−14
- README.md +3/−2
- amazonka-s3-streaming.cabal +2/−2
- src/Network/AWS/S3/StreamingUpload.hs +47/−40
Main.hs view
@@ -3,17 +3,22 @@ module Main where -import Data.Conduit (($$))-import Data.Conduit.Binary (sourceHandle)-import Data.Text (pack)-import Network.AWS-import Network.AWS.Data.Text (fromText)-import Network.AWS.S3.CreateMultipartUpload-import Network.AWS.S3.StreamingUpload-import System.Environment-import System.IO (BufferMode (BlockBuffering),- hSetBuffering, stdin)+import Data.Conduit (($$))+import Data.Conduit.Binary (sourceHandle)+import Data.Text (pack) +import Network.AWS+import Network.AWS.Data.Text (fromText)+import Network.AWS.S3.CreateMultipartUpload+import Network.AWS.S3.StreamingUpload++import System.Environment+import System.IO (BufferMode(BlockBuffering), hSetBuffering, stdin)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative (pure, (<$>), (<*>))+#endif+ main :: IO () main = do args <- getArgs@@ -24,9 +29,9 @@ <*> fromText (pack bucket) <*> fromText (pack key) of- Right (creds,reg,buck,ky) -> do+ Right (creds,_reg,buck,ky) -> do #if !MIN_VERSION_amazonka(1,4,4)- env <- newEnv reg creds+ env <- newEnv _reg creds #else env <- newEnv creds #endif@@ -43,9 +48,9 @@ <*> (fromText (pack region) :: Either String Region) <*> fromText (pack bucket) of- Right (creds,reg,buck) -> do+ Right (creds,_reg,buck) -> do #if !MIN_VERSION_amazonka(1,4,4)- env <- newEnv reg creds+ env <- newEnv _reg creds #else env <- newEnv creds #endif
README.md view
@@ -1,2 +1,3 @@-# amazonka-s3-streaming-Provides a conduit based interface to uploading data to S3 using the Multipart API+# amazonka-s3-streaming [](https://travis-ci.org/axman6/amazonka-s3-streaming)++Provides a conduit based streaming interface and a concurrent interface to uploading data to S3 using the Multipart API.
amazonka-s3-streaming.cabal view
@@ -1,5 +1,5 @@ name: amazonka-s3-streaming-version: 0.1.0.3+version: 0.1.0.4 cabal-version: >=1.10 build-type: Simple license: BSD3@@ -52,7 +52,7 @@ amazonka >=1.4.3 && <1.5, amazonka-core >=1.4.3 && <1.5, amazonka-s3 >=1.4.3 && <1.5,- amazonka-s3-streaming >=0.1.0.3 && <0.2,+ amazonka-s3-streaming >=0.1.0.4 && <0.2, conduit-extra >=1.1.15 && <1.2, conduit >=1.2.8 && <1.3, bytestring >=0.10.8.1 && <0.11,
src/Network/AWS/S3/StreamingUpload.hs view
@@ -18,52 +18,59 @@ , chunkSize ) where -import Network.AWS (Error, HasEnv (..),- LogLevel (..),- MonadAWS, getFileSize,- hashedBody, send,- toBody)+import Network.AWS+ ( HasEnv(..)+ , LogLevel(..)+ , MonadAWS+ , getFileSize+ , hashedBody+ , send+ , toBody+ ) -import Control.Monad.Trans.AWS (AWSConstraint)-import Network.AWS.Data.Crypto (Digest, SHA256,- hashFinalize, hashInit,- hashUpdate)+import Control.Monad.Trans.AWS (AWSConstraint)+import Network.AWS.Data.Crypto+ (Digest, SHA256, hashFinalize, hashInit, hashUpdate) -import Network.AWS.S3.AbortMultipartUpload-import Network.AWS.S3.CompleteMultipartUpload-import Network.AWS.S3.CreateMultipartUpload-import Network.AWS.S3.ListMultipartUploads-import Network.AWS.S3.Types (BucketName, cmuParts, completedMultipartUpload,- completedPart, muKey,- muUploadId)-import Network.AWS.S3.UploadPart+import Network.AWS.S3.AbortMultipartUpload+import Network.AWS.S3.CompleteMultipartUpload+import Network.AWS.S3.CreateMultipartUpload+import Network.AWS.S3.ListMultipartUploads+import Network.AWS.S3.Types+ ( BucketName+ , cmuParts+ , completedMultipartUpload+ , completedPart+ , muKey+ , muUploadId+ )+import Network.AWS.S3.UploadPart -import Control.Applicative-import Control.Category ((>>>))-import Control.Monad (forM_, when, (>=>))-import Control.Monad.IO.Class (MonadIO, liftIO)-import Control.Monad.Morph (lift)-import Control.Monad.Trans.Resource (MonadBaseControl,- MonadResource, throwM)+import Control.Applicative+import Control.Category ((>>>))+import Control.Monad (forM_, when, (>=>))+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad.Morph (lift)+import Control.Monad.Trans.Resource (MonadBaseControl, MonadResource, throwM) -import Data.Conduit (Sink, await)-import Data.Conduit.List (sourceList)+import Data.Conduit (Sink, await)+import Data.Conduit.List (sourceList) -import Data.ByteString (ByteString)-import qualified Data.ByteString as BS-import Data.ByteString.Builder (stringUtf8)-import System.IO.MMap (mmapFileByteString)+import Data.ByteString (ByteString)+import qualified Data.ByteString as BS+import Data.ByteString.Builder (stringUtf8)+import System.IO.MMap (mmapFileByteString) -import qualified Data.DList as D-import Data.List (unfoldr)-import Data.List.NonEmpty (nonEmpty)+import qualified Data.DList as D+import Data.List (unfoldr)+import Data.List.NonEmpty (nonEmpty) -import Control.Exception.Lens (catching, handling)-import Control.Lens+import Control.Exception.Lens (catching, handling)+import Control.Lens -import Text.Printf (printf)+import Text.Printf (printf) -import Control.Concurrent.Async.Lifted (forConcurrently)+import Control.Concurrent.Async.Lifted (forConcurrently) -- | Minimum size of data which will be sent in a single part, currently 6MB chunkSize :: Int@@ -82,7 +89,7 @@ be charged for storage of the parts until it is completed or aborted. See the AWS documentation for more details. -May throw 'Error'+May throw 'Network.AWS.Error' -} streamUpload :: (MonadResource m, MonadAWS m, AWSConstraint r m) => CreateMultipartUpload@@ -168,7 +175,7 @@ into memory as a strict 'ByteString'. The usual caveats about mmaped files apply: if the file is modified during this operation, the data may become corrupt. -May throw `Error`, or `IOError`.+May throw `Network.AWS.Error`, or `IOError`. -} concurrentUpload :: (MonadAWS m, MonadBaseControl IO m) => UploadLocation -> CreateMultipartUpload -> m CompleteMultipartUploadResponse@@ -213,7 +220,7 @@ forM_ (rs ^. lmursUploads) $ \mu -> do let mki = (,) <$> mu ^. muKey <*> mu ^. muUploadId case mki of- Nothing -> pure ()+ Nothing -> pure () Just (key,uid) -> send (abortMultipartUpload bucket key uid) >> pure ()