#!/usr/bin/env python # -*- coding: utf-8 -*- import certifi import json import urllib3 class AURPackage: """Representation of an Arch Linux User Repsitory (AUR) package.""" """URL of the [AUR] website""" AUR_URL = 'https://aur.archlinux.org' """URL-path for packages""" PACKAGE_PATH = 'packages' """URL-path of RPC""" RPC_PATH = 'rpc.php' """Parameters of RPC""" RPC_PARAMS = 'type=info&arg=' def __init__(self, name): """Construct a new AUR package representation.""" self.name = name self.version = None self.desc = None self.url = None self.license = None self.maintainer = None self.votes = None self.url_path = None self.package_base = None self.out_of_date = None self.last_modified = None self._load(name) def _load(self, name): """Load package via API.""" # Construct URL url = "{}/{}?{}{}".format(AURPackage.AUR_URL, AURPackage.RPC_PATH, AURPackage.RPC_PARAMS, name) # Call API via https https = urllib3.PoolManager(ca_certs=certifi.where()) # Get and parse response response = https.request('GET', url) if response.status == 200: data = json.loads(response.data.decode('utf-8')) if data['resultcount'] > 0: values = data['results'] self.version = values['Version'] self.desc = values['Description'] self.url = values['URL'] self.license = values['License'] self.maintainer = values['Maintainer'] self.votes = values['NumVotes'] self.url_path = values['URLPath'] self.package_base = values['PackageBase'] self.out_of_date = values['OutOfDate'] self.last_modified = values['LastModified'] else: print("error:", response.status) def get_name(self): """Get name.""" return self.name def get_version(self): """Get version.""" return self.version def get_desc(self): """Get description.""" return self.desc def get_url(self): """Get URL.""" return self.url def get_license(self): """Get license.""" return self.license def get_maintainer(self): """Get maintainer.""" return self.maintainer def get_votes(self): """Get number of votes.""" return self.votes def get_url_path(self): """Get URL path.""" return self.url_path def get_package_base(self): """Get package base.""" return self.package_base def get_out_of_date(self): """Get date the package was flagged as out-of-date.""" return self.out_of_date def get_last_modified(self): """Get date of last modification.""" return self.last_modified