packages feed

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 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 -[![Hackage](https://img.shields.io/hackage/v/pagure-hs.svg?logo=haskell)](https://hackage.haskell.org/package/pagure-hs)-[![Stackage Lts](http://stackage.org/package/pagure-hs/badge/lts)](http://stackage.org/lts/package/pagure-hs)-[![Stackage Nightly](http://stackage.org/package/pagure-hs/badge/nightly)](http://stackage.org/nightly/package/pagure-hs)+[![Hackage](https://img.shields.io/hackage/v/pagure.svg?logo=haskell)](https://hackage.haskell.org/package/pagure)+[![Stackage Lts](http://stackage.org/package/pagure/badge/lts)](http://stackage.org/lts/package/pagure)+[![Stackage Nightly](http://stackage.org/package/pagure/badge/nightly)](http://stackage.org/nightly/package/pagure) [![GPL-2.0-only license](https://img.shields.io/badge/license-GPL--2.0--only-blue.svg)](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