diff --git a/pyproject.toml b/pyproject.toml index 16f9336..be1bda7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,6 @@ nice_path = "work_helpers.nice_path:make_nice_path" random_password = "work_helpers.password:get_random_password" random_ints = "work_helpers.random_int:generate_random_number_list" sensospot_rename = "work_helpers.sensospot_rename:sensospot_rename" -sg_list_frms = "work_helpers.sg_frm_list:cli" sg_mbp_new_version = "work_helpers.sg_mbp_build:sg_mbp_new_version" sg_mbp_build = "work_helpers.sg_mbp_build:sg_mbp_build" xls2changelog = "work_helpers.excel2changelog:cli" diff --git a/work_helpers/sg_frm_list.py b/work_helpers/sg_frm_list.py deleted file mode 100644 index 5fc6034..0000000 --- a/work_helpers/sg_frm_list.py +++ /dev/null @@ -1,117 +0,0 @@ -import os -import re - -from pathlib import Path - -import click -import gitea - - -GITEA_URL = "https://git.cpi.imtek.uni-freiburg.de" -GITEA_OWNER = "Safeguard" -GITEA_REPO = "MBP-issues" - -DIR_MBP_WORKBOOKS = "/mnt/e/Safeguard MBP Workbooks" -FILE_CHANGELOG = "/mnt/e/Safeguard-MBP-issues/CHANGELOG.txt" -FILE_OUTPUT = "List of FRMs.txt" - -RE_ISSUE_CHANGES = re.compile("#(\d+)") -RE_ISSUE_FILENAME = re.compile("Issue (\d+)", re.IGNORECASE) - -WORKBOOK_TYPES = ["hyb", "regen", "dry", "qc"] - - -def connect_to_gitea(url=GITEA_URL): - token = os.getenv("GITEA_SG_FRM_TOKEN") - return gitea.Gitea(url, token) - - -def get_gitea_issues(url=GITEA_URL, owner=GITEA_OWNER, repo=GITEA_REPO): - client = connect_to_gitea(url) - repo = gitea.Repository.request(client, owner, repo) - return repo.get_issues_state(gitea.Issue.CLOSED) - - -def get_issue_numbers_from_changelog(filepath=FILE_CHANGELOG): - with Path(FILE_CHANGELOG).open("r") as fh: - # remove starting lines - for line in fh: - if line.startswith("v3"): - break - - # this are now the changes, until a blank line occures - issues = set() - for line in fh: - if not line.strip(): - break - results = (r.group(1) for r in RE_ISSUE_CHANGES.finditer(line)) - # hash_stripped = (issue[1:] for issue in results) - issues.update(int(issue) for issue in results) - return issues - - -def _issue_and_type_from_file_path(file_path): - raw_issue = RE_ISSUE_FILENAME.search(file_path.stem) - issue = int(raw_issue.group(1)) - rest, raw_kind = file_path.stem.rsplit(" ", 1) - kind = raw_kind.lower() - if kind == "reg": - kind = "regen" - if kind not in WORKBOOK_TYPES: - raise ValueError(f"Unknown workbook type: {file_path.name}") - return issue, kind - - -def get_frms(issues, workbook_dir=DIR_MBP_WORKBOOKS): - directory = Path(DIR_MBP_WORKBOOKS) - search_result = directory.glob("**/*.docx") - visible = (i for i in search_result if not i.stem.startswith(".")) - file_paths = (i for i in visible if i.is_file()) - result = {} - for file_path in file_paths: - if file_path.parent == directory: - continue - try: - issue, kind = _issue_and_type_from_file_path(file_path) - except ValueError(): - continue - if issue in issues: - item = result.setdefault(issue, dict.fromkeys(WORKBOOK_TYPES, "")) - item[kind] = file_path.name - return result - - -def process( - url=GITEA_URL, - owner=GITEA_OWNER, - repo=GITEA_REPO, - changes=FILE_CHANGELOG, - frm_dir=DIR_MBP_WORKBOOKS, -): - gitea_issues = get_gitea_issues(url, owner, repo) - closed_issues = {i.number: i.title for i in gitea_issues} - change_issues = get_issue_numbers_from_changelog(changes) - frm_issues = get_frms(change_issues) - for issue, info in frm_issues.items(): - info["title"] = closed_issues.get(issue, "") - return frm_issues - - -def write(frms, output_path=FILE_OUTPUT): - with Path(output_path).open("w") as fh: - for issue in sorted(frms.keys()): - frm = frms[issue] - title = frm["title"] - fh.write(f"Issue {issue}: {title}\n") - for kind in WORKBOOK_TYPES: - frm_file_name = frm[kind] - if frm_file_name: - fh.write(f" - {frm_file_name}\n") - fh.write("\n") - - -@click.command() -@click.option("-o", "--output", default=FILE_OUTPUT) -def cli(output=FILE_OUTPUT): - frms = process() - write(frms, output)