from Scripts import resource_fetcher from Scripts import utils import random import json class Github: def __init__(self): self.utils = utils.Utils() self.fetcher = resource_fetcher.ResourceFetcher() def extract_payload(self, response): for line in response.splitlines(): if "type=\"application/json\"" in line: payload = line.split(">", 1)[1].split("<", 1)[0] try: payload = json.loads(payload) payload = payload["payload"] except: continue return payload return None def get_commits(self, owner, repo, branch="main", start_commit=None, after=-1): if after > -1 and not start_commit: start_commit = self.get_commits(owner, repo, branch)["currentCommit"]["oid"] if after < 0: url = "https://github.com/{}/{}/commits/{}".format(owner, repo, branch) else: url = "https://github.com/{}/{}/commits/{}?after={}+{}".format(owner, repo, branch, start_commit, after) response = self.fetcher.fetch_and_parse_content(url) if not response: raise ValueError("Failed to fetch commit information from GitHub.") payload = self.extract_payload(response) if not "commitGroups" in payload: raise ValueError("Cannot find commit information for repository {} on branch {}.".format(repo, branch)) return payload def get_latest_release(self, owner, repo): url = "https://github.com/{}/{}/releases".format(owner, repo) response = self.fetcher.fetch_and_parse_content(url) if not response: raise ValueError("Failed to fetch release information from GitHub.") tag_name = self._extract_tag_name(response) body = self._extract_body_content(response) release_tag_url = "https://github.com/{}/{}/releases/expanded_assets/{}".format(owner, repo, tag_name) response = self.fetcher.fetch_and_parse_content(release_tag_url) if not response: raise ValueError("Failed to fetch expanded assets information from GitHub.") assets = self._extract_assets(response) return { "body": body, "assets": assets } def _extract_tag_name(self, response): for line in response.splitlines(): if "", 1)[0], 1)[1].split("", 1)[0][1:] return "" def _extract_assets(self, response): assets = [] in_li_block = False for line in response.splitlines(): if "