Skip to content

Commit

Permalink
add listDirectoriesAndFilesC
Browse files Browse the repository at this point in the history
  • Loading branch information
Marco Zocca committed Jun 25, 2023
1 parent 867f3e0 commit 7d7adbc
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 5 deletions.
10 changes: 8 additions & 2 deletions ms-azure-api/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,22 @@ and this project adheres to the

## 0.3.0.0

add 'conduit' as a dependency

add listDirectoriesAndFilesC

MSAzureAPI.MachineLearning.Compute
MSAzureAPI.MachineLearning.Jobs
MSAzureAPI.MachineLearning.Usages

* breaking changes:
MSAzureAPI.StorageServices.FileService. listDirectoriesAndFiles now has an extra parameter to support paginated results
MSAzureAPI.StorageServices.FileService. listDirectoriesAndFiles now has an extra parameter to support paginated results, as well as a more informative return type.

## 0.2.0.0

MSAzureAPI.StorageServices.FileService. listDirectoriesAndFiles
* MSAzureAPI.StorageServices.FileService

add listDirectoriesAndFiles

Add XML support via `xeno` and `xmlbf` to parse `listDirectoriesAndFiles` response bodies

Expand Down
1 change: 1 addition & 0 deletions ms-azure-api/ms-azure-api.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ library
build-depends: base >= 4.7 && < 5
, aeson
, bytestring
, conduit
, containers
, hoauth2 == 2.6.0
, http-types
Expand Down
29 changes: 26 additions & 3 deletions ms-azure-api/src/MSAzureAPI/StorageServices/FileService.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,31 @@ module MSAzureAPI.StorageServices.FileService (
getFile
-- * Directories
, listDirectoriesAndFiles
, listDirectoriesAndFilesC
, DirItems(..)
, DirItem(..)
) where

import Control.Applicative (Alternative(..), optional)
import Control.Monad (when)
import Control.Monad.IO.Class (MonadIO(..))
import Data.Foldable (asum)
import Data.Functor (void)
import Data.Maybe (listToMaybe)
import Data.Maybe (listToMaybe, isJust)
import qualified Text.ParserCombinators.ReadP as RP (ReadP, readP_to_S, choice, many, between, char, string, satisfy)

-- bytestring
import qualified Data.ByteString as BS (ByteString)
import qualified Data.ByteString.Char8 as BS8 (pack, unpack)
import qualified Data.ByteString.Lazy as LBS (ByteString)
-- conduit
import qualified Data.Conduit as C (ConduitT, yield, runConduitRes)
import Data.Conduit ((.|))
-- hoauth2
-- import Network.OAuth.OAuth2 (OAuth2Token(..))
import Network.OAuth.OAuth2.Internal (AccessToken(..))
-- req
import Network.HTTP.Req (Req, Url, Option, Scheme(..), header, (=:))
import Network.HTTP.Req (HttpException, runReq, defaultHttpConfig, Req, Url, Option, Scheme(..), header, (=:))
-- text
import Data.Text (Text, pack, unpack)
import qualified Data.Text.Lazy as TL (Text, pack, unpack, toStrict)
Expand All @@ -42,7 +47,7 @@ import qualified Xmlbf.Xeno as XB (fromRawXml)
-- xmlbf
import qualified Xmlbf as XB (Parser, runParser, pElement, pText)

import MSAzureAPI.Internal.Common (APIPlane(..), (==:), get, getBs, post, getLbs)
import MSAzureAPI.Internal.Common (APIPlane(..), (==:), get, getBs, post, getLbs, tryReq)



Expand Down Expand Up @@ -142,6 +147,24 @@ listDirectoriesAndFiles acct fshare fpath mm atok = do
Just m -> ("marker" ==: m)
_ -> mempty

-- | Repeated call of 'listDirectoriesAndFiles' supporting multi-page results
listDirectoriesAndFilesC :: MonadIO m =>
Text -- ^ storage account
-> Text -- ^ file share
-> Text -- ^ directory path, including directories
-> AccessToken -> C.ConduitT i [DirItem] m ()
listDirectoriesAndFilesC acct fshare fpath atok = go Nothing
where
go mm = do
eres <- runReq defaultHttpConfig $ tryReq $ listDirectoriesAndFiles acct fshare fpath mm atok
case eres of
Left _ -> undefined -- FIXME http exception
Right xe -> case xe of
Left _ -> undefined -- FIXME xml parsing error
Right (DirItems xs nMarker) -> do
C.yield xs
when (isJust nMarker) (go nMarker)

-- | Directory item, as returned by 'listDirectoriesAndFiles'
data DirItem = DIFile {diId :: Text, diName :: Text} -- ^ file
| DIDirectory {diId :: Text, diName :: Text} -- ^ directory
Expand Down

0 comments on commit 7d7adbc

Please sign in to comment.