packages feed

hw-uri 0.1.1.3 → 0.1.1.4

raw patch · 4 files changed

+16/−6 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ HaskellWorks.Data.Uri.IO.Lazy: writeResourceWithParent :: (MonadUnliftIO m, MonadCatch m) => Env -> Location -> ByteString -> ExceptT UriError m (Maybe ETag)
- HaskellWorks.Data.Uri.IO.Lazy: firstExistingResource :: (MonadUnliftIO m, MonadCatch m, MonadIO m) => Env -> [Location] -> m (Maybe Location)
+ HaskellWorks.Data.Uri.IO.Lazy: firstExistingResource :: (MonadUnliftIO m, MonadCatch m) => Env -> [Location] -> m (Maybe Location)
- HaskellWorks.Data.Uri.IO.Lazy: resourceExists :: (MonadUnliftIO m, MonadCatch m, MonadIO m) => Env -> Location -> m Bool
+ HaskellWorks.Data.Uri.IO.Lazy: resourceExists :: (MonadUnliftIO m, MonadCatch m) => Env -> Location -> m Bool

Files

README.md view
@@ -1,2 +1,2 @@ # s3-uri-[![master](https://circleci.com/gh/haskell-works/h3-uri/tree/master.svg?style=svg)](https://circleci.com/gh/haskell-works/h3-uri/tree/master)+[![CircleCI](https://circleci.com/gh/haskell-works/hw-uri.svg?style=svg)](https://circleci.com/gh/haskell-works/hw-uri)
hw-uri.cabal view
@@ -1,7 +1,7 @@ cabal-version:          2.2  name:                   hw-uri-version:                0.1.1.3+version:                0.1.1.4 synopsis:               Supports IO on URIs description:            Supports IO on URIs. homepage:               https://github.com/haskell-works/hw-uri
src/HaskellWorks/Data/Uri/IO/Lazy.hs view
@@ -9,6 +9,7 @@   , firstExistingResource   , headS3Uri   , writeResource+  , writeResourceWithParent   , writeResource'   , createLocalDirectoryIfMissing   , linkOrCopyResource@@ -34,6 +35,7 @@ import qualified Data.ByteString.Lazy             as LBS import qualified Data.Text                        as T import qualified HaskellWorks.Data.Uri.IO.Console as CIO+import qualified HaskellWorks.Data.Uri.Location   as URI import qualified Network.AWS                      as AWS import qualified Network.AWS.S3.CopyObject        as AWS import qualified Network.AWS.S3.HeadObject        as AWS@@ -56,7 +58,7 @@     (AWS.ServiceError (AWS.ServiceError' _ s@(HTTP.Status 301 _) _ _ _ _)) -> return (Left (AwsUriError s))     _                                                                      -> throwM e -handleHttpError :: (MonadCatch m, MonadIO m) => m a -> m (Either UriError a)+handleHttpError :: MonadCatch m => m a -> m (Either UriError a) handleHttpError f = catch (Right <$> f) $ \(e :: HTTP.HttpException) ->   case e of     (HTTP.HttpExceptionRequest _ e') -> case e' of@@ -94,7 +96,7 @@           then return False           else return True -resourceExists :: (MonadUnliftIO m, MonadCatch m, MonadIO m) => AWS.Env -> Location -> m Bool+resourceExists :: (MonadUnliftIO m, MonadCatch m) => AWS.Env -> Location -> m Bool resourceExists envAws = \case   S3 s3Uri        -> isRight <$> runResourceT (headS3Uri envAws s3Uri)   HttpUri httpUri -> isRight <$> headHttpUri httpUri@@ -110,7 +112,7 @@             resourceExists envAws (Local target)           else return False -firstExistingResource :: (MonadUnliftIO m, MonadCatch m, MonadIO m) => AWS.Env -> [Location] -> m (Maybe Location)+firstExistingResource :: (MonadUnliftIO m, MonadCatch m) => AWS.Env -> [Location] -> m (Maybe Location) firstExistingResource _ [] = return Nothing firstExistingResource envAws (a:as) = do   exists <- resourceExists envAws a@@ -131,11 +133,19 @@ uploadToS3' envAws uri fn =   handleAwsError $ runResAws envAws $ AWS.putFile' uri fn +-- | Write a lazy bytestring to a location writeResource :: (MonadUnliftIO m, MonadCatch m) => AWS.Env -> Location -> LBS.ByteString -> ExceptT UriError m (Maybe AWS.ETag) writeResource envAws loc lbs = ExceptT $ case loc of   S3 s3Uri   -> uploadToS3 envAws s3Uri lbs   Local path -> liftIO (LBS.writeFile path lbs) >> return (Right Nothing)   HttpUri _  -> return (Left (GenericUriError "HTTP PUT method not supported"))++-- | Write a lazy bytestring to a location, creating the parent directory if necessary.+writeResourceWithParent :: (MonadUnliftIO m, MonadCatch m) => AWS.Env -> Location -> LBS.ByteString -> ExceptT UriError m (Maybe AWS.ETag)+writeResourceWithParent envAws location lbs = do+  let parent = URI.dirname location+  createLocalDirectoryIfMissing parent+  writeResource envAws location lbs  writeResource' :: (MonadUnliftIO m, MonadCatch m) => AWS.Env -> Location -> FilePath -> ExceptT UriError m (Maybe AWS.ETag) writeResource' envAws loc fn = ExceptT $ case loc of
src/HaskellWorks/Data/Uri/Internal/List.hs view
@@ -9,6 +9,6 @@ mapLast f (a:as) = a:mapLast f as  dropSave1 :: [a] -> [a]-dropSave1 (_:xs) = xs dropSave1 [x]    = [x]+dropSave1 (_:xs) = xs dropSave1 []     = []