import requests from losoup.models import Asset, GithubSoftware from losoup.cvs.github_settings import GithubSettings class GithubConnector: def __init__(self, settings: GithubSettings): self.settings = settings def get_release_assets_list(self, release_url: str) -> list[Asset]: headers = { "Accept": "application/vnd.github+json", "Authorization": f"token {self.settings.token}", "X-Github-Api-Version": "2022-11-28", } response = requests.get(release_url, headers=headers) assets = [] for asset in response.json().get("assets"): assets.append(Asset(name=asset.get("name"), url=asset.get("url"))) return assets def get_release_asset(self, software: GithubSoftware) -> Asset: for asset in self.get_release_assets_list(software.release_url): if asset.name == software.filename: return asset else: continue def download_release_asset(self, asset: Asset) -> bytes: headers = { "Accept": "application/octet-stream", "Authorization": f"token {self.settings.token}", "X-Github-Api-Version": "2022-11-28", } response = requests.get(asset.url, headers=headers) return response.content def download_software(self, software: GithubSoftware) -> bytes: release_asset = self.get_release_asset(software) return self.download_release_asset(release_asset)