class REPO: def __init__(self, name): self.name = name self.db = self.cache(f"{self.name}.db") try: from tomllib import load with open('repos.toml', 'rb') as f: repo = load(f).get(name) if "platforms" in repo: self.platforms = repo.get('platforms') except: pass def cache(self, db): try: import sqlite3 as sql cachedb = sql.connect(db) except: pass return cachedb def get(self, url) self._url = urlparse(url) self._request = Request(self._url.geturl()) self._request.add_header('User-Agent', 'Mozilla/5.0') try: from urllib.error import HTTPError from urllib.parse import unquote, urlparse from urllib.request import Request, urlopen self._response = urlopen(request) except HTTPError as e: self.code = e.code # HTTPError code self.error = e.msg # HTTPError message self.headers = e.hdr # HTTPError headers self._response = e.fp # HTTPResponse object return e self.code = self._response.status self.error = None self.headers = dict(response.getheaders()) if self._url.geturl() != response.url: self.redirect = True if not self.error: contentType = self.headers['Content-Type'] if 'application/json' in contentType: try: from json import loads self.data = loads(self._response.read()) except JSONDecodeError as e: self.error = 'JSON decoding failed!' return e elif 'text/html' in contentType: try: from bs4 import BeautifulSoup self.data = BeautifulSoup(self.response.read(), 'lxml') except: self.error = 'accident in the kitchen while making soup' return else: self.error = f"unknown response from {self._url}" return def search(self, query):