From 28acbc6d686a8274d8fcc2c3021e3c96cb70d964 Mon Sep 17 00:00:00 2001 From: strifel <info@strifel.de> Date: Mon, 10 Oct 2022 17:13:44 +0200 Subject: [PATCH] Add comments to vanitymapv2 --- shortlinks/generator.py | 10 ++++----- shortlinks/utils.py | 46 ++++++++++++++++++++++++++++++----------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/shortlinks/generator.py b/shortlinks/generator.py index 8a4b668..9f8708c 100644 --- a/shortlinks/generator.py +++ b/shortlinks/generator.py @@ -13,7 +13,7 @@ from shortlinks.utils import ( class ShortlinkGenerator: logger = logging.getLogger("shortlinks.ShortlinkGenerator") - link_mappings: dict[str, str] = {} + link_mappings: dict[str, dict[str, str]] = {} vanity_file: TextIOWrapper ignore_urls: List[str] @@ -40,8 +40,8 @@ class ShortlinkGenerator: def generate(self, out_path: str) -> None: flat_map = flatten_links(self.link_mappings) export_vanity_map_json(out_path, self.link_mappings) - for path, url in flat_map.items(): - if url: + for path, data in flat_map.items(): + if data: self.logger.info(f"Writing redirect for {path}") - check_url(url, self.ignore_urls) - write_redirect_html(out_path, path, url) + check_url(data['url'], self.ignore_urls) + write_redirect_html(out_path, path, data['url']) diff --git a/shortlinks/utils.py b/shortlinks/utils.py index 80a6007..52766de 100644 --- a/shortlinks/utils.py +++ b/shortlinks/utils.py @@ -13,8 +13,14 @@ logger = logging.getLogger("shortlinks.utils") def export_vanity_map_json(out_path: str, link_mappings: dict[str, str]) -> None: serialized_map = json.dumps(link_mappings) os.makedirs(out_path, exist_ok=True) - with open(os.path.join(out_path, "vanitymap.json"), "w") as file: + with open(os.path.join(out_path, "vanitymapv2.json"), "w") as file: file.write(serialized_map) + old_format = {} + for path in link_mappings: + old_format[path] = link_mappings[path]['url'] + serialized_old_format = json.dumps(old_format) + with open(os.path.join(out_path, "vanitymap.json"), "w") as file: + file.write(serialized_old_format) def check_url(url: str, ignore_list: list[str]) -> bool: @@ -29,33 +35,49 @@ def check_url(url: str, ignore_list: list[str]) -> bool: return False -def read_file(file: TextIOWrapper) -> dict[str, str]: +def read_file(file: TextIOWrapper) -> dict[str, dict[str, str]]: _link_mappings = {} for line in file: if line.startswith("#") or len(line.strip()) == 0: continue - _path, _url, *_ = line.split() + # parse comment if given + parsed_line = line.replace("\n", "").split(maxsplit=2) + _path = parsed_line[0] + _url = parsed_line[1] + if len(parsed_line) == 3: + _comment = parsed_line[2] + else: + _comment = "" if _path in _link_mappings: raise ValueError(f"Redirect target for {_path} already defined") - _link_mappings[_path] = _url + # Set comment content + if _comment.startswith("\"") and _comment.endswith("\""): + _comment = _comment[1:len(_comment)-1] + else: + _comment = _path[1:] + _link_mappings[_path] = {'url': _url, 'comment': _comment, 'group': _path} return _link_mappings -def flatten_links(link_mappings: dict[str, str]) -> dict[str, Optional[str]]: - _flat_mappings: dict[str, Optional[str]] = link_mappings.copy() # type: ignore +def flatten_links(link_mappings: dict[str, dict[str, str]]) -> dict[str, Optional[dict[str, str]]]: + _flat_mappings: dict[str, Optional[dict[str, str]]] = link_mappings.copy() # type: ignore _remaining_rounds = 10 while _remaining_rounds != 0: found = False for key, value in _flat_mappings.items(): - if value and value.startswith("/"): + if value is not None and value['url'].startswith("/"): found = True - logger.info(f"Detected internal link: {key} -> {value}") - if value not in _flat_mappings.keys(): - logger.error(f"Target {value} not found!") + logger.info(f"Detected internal link: {key} -> {value['url']}") + if value['url'] not in _flat_mappings.keys(): + logger.error(f"Target {value['url']} not found!") _flat_mappings[key] = None else: - logger.info(f"Replacing {value} with {_flat_mappings[value]}") - _flat_mappings[key] = _flat_mappings[value] + logger.info(f"Replacing {value['url']} with {_flat_mappings[value['url']]['url']}") + # Replace comment if default comment and new would not be default + if _flat_mappings[key]['comment'] == key[1:] and \ + _flat_mappings[value['url']]['comment'] != value['url'][1:]: + _flat_mappings[key]['comment'] = _flat_mappings[value['url']]['comment'] + _flat_mappings[key]['url'] = _flat_mappings[value['url']]['url'] _remaining_rounds = _remaining_rounds - 1 if not found: logger.info("No (remaining) internal links found, quitting loop") -- GitLab