arch-scripts/aur.py

119 lines
2.9 KiB
Python

#!/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