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 +1/−1
- hw-uri.cabal +1/−1
- src/HaskellWorks/Data/Uri/IO/Lazy.hs +13/−3
- src/HaskellWorks/Data/Uri/Internal/List.hs +1/−1
README.md view
@@ -1,2 +1,2 @@ # s3-uri-[](https://circleci.com/gh/haskell-works/h3-uri/tree/master)+[](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 [] = []