pagure 0.1.0 → 0.1.1
raw patch · 4 files changed
+30/−11 lines, 4 filesdep ~http-queryPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: http-query
API changes (from Hackage documentation)
+ Fedora.Pagure: queryPagure' :: String -> String -> Query -> IO Object
Files
- CHANGELOG.md +6/−0
- README.md +4/−4
- pagure.cabal +3/−3
- src/Fedora/Pagure.hs +17/−4
CHANGELOG.md view
@@ -2,5 +2,11 @@ `pagure-hs` uses [PVP Versioning](https://pvp.haskell.org). +## 0.1.1 (2022-02-17)+- add queryPagure' which errors when JSON response has "error" field+ and use it for queryPagureCount and queryPagurePaged+ This requires http-query-0.1.2 or later to avoid early exceptions+ and get meanful error messages instead+ ## 0.1.0 (2021-12-27) * Initial Hackage release
README.md view
@@ -1,14 +1,14 @@ # pagure-hs -[](https://hackage.haskell.org/package/pagure-hs)-[](http://stackage.org/lts/package/pagure-hs)-[](http://stackage.org/nightly/package/pagure-hs)+[](https://hackage.haskell.org/package/pagure)+[](http://stackage.org/lts/package/pagure)+[](http://stackage.org/nightly/package/pagure) [](LICENSE) Pagure REST client library. [Pagure](https://pagure.io/pagure) is an opensource git forge-(ie similar to gitlab).+(ie somewhat like gitlab). The primary instance is https://pagure.io, but pagure is also used to host current Fedora package
pagure.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.22 name: pagure-version: 0.1.0+version: 0.1.1 synopsis: Pagure REST client library description: A library for querying Pagure gitforges via REST. homepage: https://github.com/juhp/pagure-hs@@ -9,7 +9,7 @@ license-file: LICENSE author: Jens Petersen <petersen@redhat.com> maintainer: Jens Petersen <petersen@redhat.com>-copyright: 2020-2021 Jens Petersen <petersen@redhat.com>+copyright: 2020-2022 Jens Petersen <petersen@redhat.com> category: Network build-type: Simple extra-doc-files: README.md@@ -28,7 +28,7 @@ library build-depends: aeson , base >= 4 && < 5- , http-query+ , http-query >= 0.1.2 , text hs-source-dirs: src exposed-modules: Fedora.Pagure
src/Fedora/Pagure.hs view
@@ -24,6 +24,7 @@ , pagureListGroups , pagureProjectGitURLs , queryPagure+ , queryPagure' , queryPagureSingle , queryPagurePaged , queryPagureCount@@ -124,7 +125,8 @@ -- | List repo branches with commits -- -- https://pagure.io/api/0/#projects-tab-pagureListGitBranchesWithCommits :: String -> String -> IO (Either String Object)+pagureListGitBranchesWithCommits :: String -> String+ -> IO (Either String Object) pagureListGitBranchesWithCommits server repo = do let path = repo +/+ "git/branches" params = makeKey "with_commits" "1"@@ -173,6 +175,14 @@ let url = "https://" ++ server +/+ "api/0" +/+ path in webAPIQuery url params +-- | low-level query+-- Like queryPagure but errors if JSON has "error" field:+-- eg for a non-existent API query path+queryPagure' :: String -> String -> Query -> IO Object+queryPagure' server path params = do+ eres <- queryPagureSingle server path params+ either error return eres+ -- | single query queryPagureSingle :: String -> String -> Query -> IO (Either String Object) queryPagureSingle server path params = do@@ -182,20 +192,23 @@ Nothing -> Right res -- | count total number of hits+-- FIXME: errors if the query fails queryPagureCount :: String -> String -> Query -> String -> IO (Maybe Integer) queryPagureCount server path params pagination = do- res <- queryPagure server path (params ++ makeKey "per_page" "1")+ res <- queryPagure' server path (params ++ makeKey "per_page" "1") return $ lookupKey (T.pack pagination) res >>= lookupKey "pages" -- | get all pages of results ----- Note this can potentially download very large amount of data.+-- Warning: this can potentially download very large amounts of data. -- For potentially large queries, it is a good idea to queryPagureCount first.+--+-- Errors for a non-existent API path queryPagurePaged :: String -> String -> Query -> (String,String) -> IO [Object] queryPagurePaged server path params (pagination,paging) = do -- FIXME allow overriding per_page let maxPerPage = "100"- res1 <- queryPagure server path (params ++ makeKey "per_page" maxPerPage)+ res1 <- queryPagure' server path (params ++ makeKey "per_page" maxPerPage) case (lookupKey (T.pack pagination) res1 :: Maybe Object) >>= lookupKey "pages" :: Maybe Int of Nothing -> return [] Just pages -> do