from io import BytesIO import logging import re import requests as r import tarfile class Repository(object): def __init__(self, base_url, arch, db_name): self.base_url = base_url self.arch = arch self.db_name = db_name self.db = tarfile.open(fileobj=BytesIO(r.get(self.db_url).content)) logging.info(f"{self} loaded") @property def db_url(self): return f"{self.base_url}/{self.arch}/{self.db_name}" def __repr__(self): return self.db_url def get_package_version(self, pkgname): try: name = list(filter( lambda item: item.isdir() and pkgname in item.name, self.db.getmembers() ))[0].name except IndexError: logging.warning(f"{pkgname} is not online") version = "0.0.0" else: regex = re.compile(".+-(\d+\.\d+(?:\.\d+)?)-\d+") version = regex.search(name).group(1) logging.debug(f"{pkgname} is {version} online") return version