packages feed

fedora-releases-0.2.0: src/Distribution/Fedora/BodhiReleases.hs

{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE CPP                 #-}

{-|
Low level library with aeson Object's for releases fetched from Bodhi API.
-}

module Distribution.Fedora.BodhiReleases (
  getBodhiReleases,
  getBodhiProductReleases,
  getBodhiFedoraReleases,
  getBodhiEPELReleases,
  getBodhiBranchReleases,
  lookupKey
  )
where

import Control.Exception.Extra (retry)
import Data.Aeson (Object)
import Fedora.Bodhi (bodhiReleases, makeKey)
import System.Cached.JSON

-- FIXME softer/warning on failure?
-- | Get Releases from Fedora Bodhi API (excluding archived)
getBodhiReleases :: IO [Object]
getBodhiReleases =
  retry 2 $
  getCachedJSONQuery "fedora" "bodhi-releases.json"
  (bodhiReleases (makeKey "exclude_archived" "True")) 450

-- | Get Releases from Bodhi API filtered by id_prefix
getBodhiProductReleases :: String -> IO [Object]
getBodhiProductReleases name =
  reverse . filter (\r -> lookupKey "id_prefix" r == Just name) <$> getBodhiReleases

-- | Get FEDORA Releases from Bodhi API
getBodhiFedoraReleases :: IO [Object]
getBodhiFedoraReleases =
  getBodhiProductReleases "FEDORA"

-- | Get FEDORA-EPEL Releases from Bodhi API
getBodhiEPELReleases :: IO [Object]
getBodhiEPELReleases =
  getBodhiProductReleases "FEDORA-EPEL"

-- | Get releases for branch name
getBodhiBranchReleases :: String -> IO [Object]
getBodhiBranchReleases br =
  filter (\r -> lookupKey "branch" r == Just br) <$> getBodhiReleases