aur 2.0.4 → 3.0.0
raw patch · 4 files changed
+77/−44 lines, 4 filesdep +wreqdep −wreq-sbdep ~base
Dependencies added: wreq
Dependencies removed: wreq-sb
Dependency ranges changed: base
Files
- Linux/Arch/Aur/Pkgbuild.hs +2/−4
- Linux/Arch/Aur/Rpc.hs +68/−32
- Linux/Arch/Aur/Types.hs +4/−5
- aur.cabal +3/−3
Linux/Arch/Aur/Pkgbuild.hs view
@@ -13,12 +13,10 @@ , pkgbuild' , pkgbuildUrl ) where -import Control.Applicative ((<$>)) import Control.Exception (SomeException, catch) import Control.Lens ((^?)) import Control.Monad ((>=>)) import Control.Monad.Trans (MonadIO, liftIO)-import Data.Monoid ((<>)) import Data.Text hiding (take) import qualified Data.Text.Lazy as TL import Data.Text.Lazy.Encoding@@ -30,11 +28,11 @@ type E = SomeException baseUrl :: String-baseUrl = "https://aur.archlinux.org/packages/"+baseUrl = "https://aur4.archlinux.org/" -- | The location of a given package's PKGBUILD on the AUR servers. pkgbuildUrl :: String -> String-pkgbuildUrl p = baseUrl </> take 2 p </> p </> "PKGBUILD"+pkgbuildUrl p = baseUrl </> "cgit/aur.git/plain/PKGBUILD?h=" ++ p -- | The PKGBUILD of a given package, retrieved from the AUR servers. pkgbuild :: MonadIO m => String -> m (Maybe Text)
Linux/Arch/Aur/Rpc.hs view
@@ -7,22 +7,31 @@ -- Maintainer: Colin Woodbury <colingw@gmail.com> module Linux.Arch.Aur.Rpc- ( -- * Queries+ ( -- * AUR4 Queries info , multiinfo , search , msearch- -- * As JSON+ -- * AUR4 Queries as JSON+ , infoJ+ , multiinfoJ+ , searchJ+ , msearchJ+ -- * Explicit API version/endpoint , info' , multiinfo' , search' , msearch'+ -- * Explicit API version/endpoint as JSON+ , infoJ'+ , multiinfoJ'+ , searchJ'+ , msearchJ' -- * Pretty JSON , pretty) where import Linux.Arch.Aur.Types -import Control.Applicative ((<$>)) import Control.Lens import Control.Monad.Trans (MonadIO, liftIO) import Data.Aeson (Value(..), FromJSON, Result(..), fromJSON)@@ -37,53 +46,79 @@ --- -rpcUrl :: String-rpcUrl = "https://aur.archlinux.org/rpc.php?"+aurUrl :: String+aurUrl = "https://aur.archlinux.org/rpc.php?" -apiVersion :: Text-apiVersion = "3"+aur4Url :: String+aur4Url = "https://aur4.archlinux.org/rpc.php?" -- | Returns all information about one package.-info :: (MonadIO m, Functor m) => Text -> m (Maybe AurInfo)-info p = (>>= extract) <$> info' p---- | `info` call as Haskellised JSON.-info' :: (MonadIO m, Functor m) => Text -> m (Maybe Value)-info' pkg = (>>= (^? nth 0)) <$> multiinfo' [pkg]+info :: MonadIO m => Text -> m (Maybe AurInfo)+info p = (>>= extract) <$> infoJ p -- | Like `info`, but can handle requests for multiple packages at once. -- More efficient than using `info` multiple times.-multiinfo :: (MonadIO m, Functor m) => [Text] -> m [AurInfo]-multiinfo p = mapArray <$> multiinfo' p---- | `multiinfo` call as Haskellised JSON.-multiinfo' :: MonadIO m => [Text] -> m (Maybe Value)-multiinfo' pkgs = rpc "multiinfo" pkgs "arg[]"+multiinfo :: MonadIO m => [Text] -> m [AurInfo]+multiinfo ps = mapArray <$> multiinfoJ ps -- | Yields any matches to the input as `AurInfo`, but -- doesn't include dependency information.-search :: (MonadIO m, Functor m) => Text -> m [AurInfo]-search s = mapArray <$> search' s---- | `search` call as Haskellised JSON.-search' :: MonadIO m => Text -> m (Maybe Value)-search' query = rpc "search" [query] "arg"+search :: MonadIO m => Text -> m [AurInfo]+search s = mapArray <$> searchJ s -- | Search the AUR by Maintainer name.-msearch :: (MonadIO m, Functor m) => Text -> m [AurInfo]-msearch m = mapArray <$> msearch' m+msearch :: MonadIO m => Text -> m [AurInfo]+msearch m = mapArray <$> msearchJ m +-- | `info` call as Haskellised JSON.+infoJ :: MonadIO m => Text -> m (Maybe Value)+infoJ p = (>>= (^? nth 0)) <$> multiinfoJ [p]++-- | `multiinfo` call as Haskellised JSON.+multiinfoJ :: MonadIO m => [Text] -> m (Maybe Value)+multiinfoJ ps = multiinfoJ' ps aur4Url "4"++-- | `search` call as Haskellised JSON.+searchJ :: MonadIO m => Text -> m (Maybe Value)+searchJ s = searchJ' s aur4Url "4"+ -- | `msearch` call as Haskellised JSON.-msearch' :: MonadIO m => Text -> m (Maybe Value)-msearch' maintainer = rpc "msearch" [maintainer] "arg"+msearchJ :: MonadIO m => Text -> m (Maybe Value)+msearchJ m = msearchJ' m aur4Url "4" +-- | `info` with explicit RPC endpoint and API version.+info' :: MonadIO m => Text -> String -> Text -> m (Maybe AurInfo)+info' p url ver = (>>= extract) <$> infoJ' p url ver++-- | `multiinfo` with explicit RPC endpoint and API version.+multiinfo' :: MonadIO m => [Text] -> String -> Text -> m [AurInfo]+multiinfo' ps url ver = mapArray <$> multiinfoJ' ps url ver++search' :: MonadIO m => Text -> String -> Text -> m [AurInfo]+search' s url ver = mapArray <$> searchJ' s url ver++msearch' :: MonadIO m => Text -> String -> Text -> m [AurInfo]+msearch' m url ver = mapArray <$> msearchJ' m url ver++infoJ' :: MonadIO m => Text -> String -> Text -> m (Maybe Value)+infoJ' p url ver = (>>= (^? nth 0)) <$> multiinfoJ' [p] url ver++multiinfoJ' :: MonadIO m => [Text] -> String -> Text -> m (Maybe Value)+multiinfoJ' ps url ver = rpc "multiinfo" ps "arg[]" url ver++searchJ' :: MonadIO m => Text -> String -> Text -> m (Maybe Value)+searchJ' s url ver = rpc "search" [s] "arg" url ver++msearchJ' :: MonadIO m => Text -> String -> Text -> m (Maybe Value)+msearchJ' m url ver = rpc "msearch" [m] "arg" url ver+ -- | Call the RPC. -- Doesn't fail elegantly when there is a connection failure.-rpc :: MonadIO m => Text -> [Text] -> Text -> m (Maybe Value)-rpc method args argLabel = liftIO (rpcResults <$> getWith opts rpcUrl)+rpc :: MonadIO m => Text -> [Text] -> Text -> String -> Text -> m (Maybe Value)+rpc method args argLabel url ver = liftIO (rpcResults <$> getWith opts url) where opts = defaults & param "type" .~ [method] & param argLabel .~ args- & param "v" .~ [apiVersion]+ & param "v" .~ [ver] rpcResults :: AsValue r => Response r -> Maybe Value rpcResults r = r ^? responseBody . key "results"@@ -101,6 +136,7 @@ f _ = Nothing -- There must be a better way to do this.+-- Use lenses, child. mapArray :: FromJSON a => Maybe Value -> [a] mapArray (Just (Array v)) = catMaybes . V.toList . V.map extract $ v mapArray _ = []
Linux/Arch/Aur/Types.hs view
@@ -9,7 +9,6 @@ module Linux.Arch.Aur.Types ( AurInfo(..) ) where -import Control.Applicative import Control.Monad (mzero) import Data.Aeson import Data.Text@@ -21,16 +20,16 @@ , pkgBaseIdOf :: Int , pkgBaseOf :: Text , aurVersionOf :: Text- , aurCategoryOf :: Int , aurDescriptionOf :: Text , licenseOf :: [Text] , urlOf :: Text , aurVotesOf :: Int+ , popularityOf :: Float , isOutOfDate :: Bool , aurMaintainerOf :: Maybe Text , submissionDatOf :: Int , modifiedDateOf :: Int- , aurTarballUrlOf :: Text+ , urlPathOf :: Text , dependsOf :: [Text] , makeDepsOf :: [Text] , optDepsOf :: [Text]@@ -44,12 +43,12 @@ v .: "PackageBaseID" <*> v .: "PackageBase" <*> v .: "Version" <*>- v .: "CategoryID" <*> v .: "Description" <*> v .:? "License" .!= [] <*> v .: "URL" <*> v .: "NumVotes" <*>- (f <$> (v .: "OutOfDate")) <*>+ v .: "Popularity" <*>+ (f <$> (v .: "OutOfDate")) <*> v .:? "Maintainer" <*> v .: "FirstSubmitted" <*> v .: "LastModified" <*>
aur.cabal view
@@ -4,7 +4,7 @@ -- The name of the package. name: aur -version: 2.0.4+version: 3.0.0 synopsis: Access metadata from the Arch Linux User Repository. @@ -61,7 +61,7 @@ other-extensions: OverloadedStrings, ScopedTypeVariables - build-depends: base >=4.7 && <4.9,+ build-depends: base >=4.8 && <4.9, aeson >=0.7 && <1, aeson-pretty >=0.7 && <1, filepath,@@ -70,7 +70,7 @@ mtl >=2.1 && <3, text >=1.1 && <1.3, vector >=0.10 && <0.11,- wreq-sb >= 0.4+ wreq >=0.4 -- Directories containing source files. -- hs-source-dirs: