Loading generateCR/changemarks.py +24 −13 Original line number Diff line number Diff line Loading @@ -14,8 +14,8 @@ import logging import requests from unidiff import PatchSet def fetch(url : str, expected_content_type : str = None) -> requests.Response: r = requests.get(url) def fetch(url : str, expected_content_type : str = None, headers = None) -> requests.Response: r = requests.get(url, headers = headers) logging.debug(f"Fetching {url}") if (r.status_code != 200): errorMessage = f"Failed attempting to retrieve {url}, status code {r.status_code}" Loading @@ -28,12 +28,12 @@ def fetch(url : str, expected_content_type : str = None) -> requests.Response: raise ValueError(errorMessage) return r def fetch_text(url : str, expected_content_type : str = None) -> str: r = fetch(url, expected_content_type) def fetch_text(url : str, expected_content_type : str = None, headers = None) -> str: r = fetch(url, expected_content_type, headers) return r.text def fetch_json(url : str, expected_content_type : str = None) -> requests.Response: r = fetch(url, expected_content_type) def fetch_json(url : str, expected_content_type : str = None, headers = None) -> requests.Response: r = fetch(url, expected_content_type, headers) return r.json() def readMDFile(progress:Progress, document:str) -> list[str]: Loading Loading @@ -131,26 +131,27 @@ def find_all_clauses(progress:Progress, mdLines:list[str]): return clauses class MR: def __init__(self, project_id, mr_id, root = "https://git.onem2m.org"): def __init__(self, project_id, mr_id, root = "https://git.onem2m.org", headers = None): self.project_id = project_id self.mr_id = mr_id self.root = root self.raw_project_details = fetch_json(self.api_url()) self.raw_project_details = fetch_json(self.api_url(), headers = headers) self.web_url = self.raw_project_details['web_url'] self.raw_mr_details = fetch_json(self.api_url(f'/merge_requests/{self.mr_id}')) self.raw_mr_details = fetch_json(self.api_url(f'/merge_requests/{self.mr_id}'), headers = headers) self.author = self.raw_mr_details['author']['name'] self.date = self.raw_mr_details['updated_at'] self.target_branch = self.raw_mr_details['target_branch'] self.source_branch = self.raw_mr_details['source_branch'] self.title = self.raw_mr_details['title'] self.description = self.raw_mr_details['description'] self.raw_diff = fetch_text(f'{self.web_url}/-/merge_requests/{self.mr_id}.diff', expected_content_type='text/plain') self.raw_diff = fetch_text(f'{self.web_url}/-/merge_requests/{self.mr_id}.diff', expected_content_type='text/plain', headers = headers) self.patch_set = PatchSet.from_string(self.raw_diff) self.headers = headers def api_url(self, route : str = "") -> str: return f"{self.root}/api/v4/projects/{self.project_id}/{route}" def retrieve_text(self, branch: str, filename: str) -> str: return fetch_text(f"{self.web_url}/-/raw/{branch}/{filename}") return fetch_text(f"{self.web_url}/-/raw/{branch}/{filename}", headers = self.headers) def find_changed_clauses(progress:Progress, mdLines:list[str], clauses:list[Clause], mr:MR, outDirectory:str ): ''' Loading Loading @@ -585,6 +586,7 @@ def main(args=None): # Parse command line arguments parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--outdir', '-o', action='store', dest='outDirectory', default = 'out', metavar = '<output directory>', help = 'specify output directory') parser.add_argument('-t', '--token', default = None, help="Token required for internal/private repositories") parser.add_argument('rootURL', help="Forge root URL") parser.add_argument('projectID', help="Forge project ID") parser.add_argument('mergeID', help="Merge IID") Loading @@ -596,7 +598,16 @@ def main(args=None): os.makedirs(pargs.outDirectory, exist_ok = True) mr = MR(pargs.projectID, pargs.mergeID, pargs.rootURL) if pargs.token: headers = {'PRIVATE-TOKEN' : pargs.token} else: logging.debug(f"No token provided, repository MUST BE PUBLIC") headers = None try: mr = MR(pargs.projectID, pargs.mergeID, pargs.rootURL, headers) except ValueError as e: logging.debug(f"Error creating MR object: {e}. Repository may not be public or token is incorrect") return 1 for patched_file in mr.patch_set: if not patched_file.source_file.startswith("a/README") and patched_file.source_file.endswith(".md"): Loading Loading
generateCR/changemarks.py +24 −13 Original line number Diff line number Diff line Loading @@ -14,8 +14,8 @@ import logging import requests from unidiff import PatchSet def fetch(url : str, expected_content_type : str = None) -> requests.Response: r = requests.get(url) def fetch(url : str, expected_content_type : str = None, headers = None) -> requests.Response: r = requests.get(url, headers = headers) logging.debug(f"Fetching {url}") if (r.status_code != 200): errorMessage = f"Failed attempting to retrieve {url}, status code {r.status_code}" Loading @@ -28,12 +28,12 @@ def fetch(url : str, expected_content_type : str = None) -> requests.Response: raise ValueError(errorMessage) return r def fetch_text(url : str, expected_content_type : str = None) -> str: r = fetch(url, expected_content_type) def fetch_text(url : str, expected_content_type : str = None, headers = None) -> str: r = fetch(url, expected_content_type, headers) return r.text def fetch_json(url : str, expected_content_type : str = None) -> requests.Response: r = fetch(url, expected_content_type) def fetch_json(url : str, expected_content_type : str = None, headers = None) -> requests.Response: r = fetch(url, expected_content_type, headers) return r.json() def readMDFile(progress:Progress, document:str) -> list[str]: Loading Loading @@ -131,26 +131,27 @@ def find_all_clauses(progress:Progress, mdLines:list[str]): return clauses class MR: def __init__(self, project_id, mr_id, root = "https://git.onem2m.org"): def __init__(self, project_id, mr_id, root = "https://git.onem2m.org", headers = None): self.project_id = project_id self.mr_id = mr_id self.root = root self.raw_project_details = fetch_json(self.api_url()) self.raw_project_details = fetch_json(self.api_url(), headers = headers) self.web_url = self.raw_project_details['web_url'] self.raw_mr_details = fetch_json(self.api_url(f'/merge_requests/{self.mr_id}')) self.raw_mr_details = fetch_json(self.api_url(f'/merge_requests/{self.mr_id}'), headers = headers) self.author = self.raw_mr_details['author']['name'] self.date = self.raw_mr_details['updated_at'] self.target_branch = self.raw_mr_details['target_branch'] self.source_branch = self.raw_mr_details['source_branch'] self.title = self.raw_mr_details['title'] self.description = self.raw_mr_details['description'] self.raw_diff = fetch_text(f'{self.web_url}/-/merge_requests/{self.mr_id}.diff', expected_content_type='text/plain') self.raw_diff = fetch_text(f'{self.web_url}/-/merge_requests/{self.mr_id}.diff', expected_content_type='text/plain', headers = headers) self.patch_set = PatchSet.from_string(self.raw_diff) self.headers = headers def api_url(self, route : str = "") -> str: return f"{self.root}/api/v4/projects/{self.project_id}/{route}" def retrieve_text(self, branch: str, filename: str) -> str: return fetch_text(f"{self.web_url}/-/raw/{branch}/{filename}") return fetch_text(f"{self.web_url}/-/raw/{branch}/{filename}", headers = self.headers) def find_changed_clauses(progress:Progress, mdLines:list[str], clauses:list[Clause], mr:MR, outDirectory:str ): ''' Loading Loading @@ -585,6 +586,7 @@ def main(args=None): # Parse command line arguments parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--outdir', '-o', action='store', dest='outDirectory', default = 'out', metavar = '<output directory>', help = 'specify output directory') parser.add_argument('-t', '--token', default = None, help="Token required for internal/private repositories") parser.add_argument('rootURL', help="Forge root URL") parser.add_argument('projectID', help="Forge project ID") parser.add_argument('mergeID', help="Merge IID") Loading @@ -596,7 +598,16 @@ def main(args=None): os.makedirs(pargs.outDirectory, exist_ok = True) mr = MR(pargs.projectID, pargs.mergeID, pargs.rootURL) if pargs.token: headers = {'PRIVATE-TOKEN' : pargs.token} else: logging.debug(f"No token provided, repository MUST BE PUBLIC") headers = None try: mr = MR(pargs.projectID, pargs.mergeID, pargs.rootURL, headers) except ValueError as e: logging.debug(f"Error creating MR object: {e}. Repository may not be public or token is incorrect") return 1 for patched_file in mr.patch_set: if not patched_file.source_file.startswith("a/README") and patched_file.source_file.endswith(".md"): Loading