#!/usr/bin/env python # -*- coding: utf-8 -*- # Requirement: # python3 -m pip install lxml import re from time import sleep from urllib.request import urlopen from urllib.error import HTTPError from lxml.html import parse footer_delimiter = "\n\n[comment]: # (LINK_LIST_BEGIN_HERE)\n" footer = "" linked_id = [] present_id = [] def add_bracket(match): first_char = match.group(1) id = match.group(2) replace = first_char + "[#"+id+"]" return replace def add_link(match): id = match.group(1) present_id.append(id) replace = "#" + id if id in linked_id: return replace url = "https://github.com/hrydgard/ppsspp/issues/"+id title = None while title is None: try: p = parse(urlopen(url)) title = p.find(".//title").text.split('by')[0].split('ยท')[0].strip() title = re.sub(r"\"", r'\\"', title) except HTTPError: print("Something went wrong, retrying in 10 sec...") sleep(10) global footer addition = "[#"+id+"]: https://github.com/hrydgard/ppsspp/issues/"+id+" \""+title+"\"" footer += addition+"\n" linked_id.append(id) print("Linked: " + addition) return replace def already_added_id(match): linked_id.append(match.group(1)) return "[#" + match.group(1) + "]:" def remove_old_link(line): # Ignore extra new lines at the end if line.find("#") == -1: return "" id = line[line.find("[#")+2 : line.find("]:")] if id in present_id: return line + "\n" else: print("Removed: #" + id) return "" def update(file_name): global footer footer = "" global linked_id linked_id = [] global present_id present_id = [] f = open(file_name, "r+") cont = f.read() # We don't want to match issues id in title so stop before the link list d = cont.find(footer_delimiter) if (d != -1): footer = cont[d + len(footer_delimiter):] cont = cont[0 : d] re.sub(r"\[#(\d+)\]:", already_added_id, footer) # Add brackets if missing added_bracket = re.sub(r"([^[])#(\d+)", add_bracket, cont) # Add links if missing updated = re.sub(r"#(\d+)", add_link, added_bracket) # Remove old unused link updated_footer = "" for line in footer.split("\n"): updated_footer += remove_old_link(line) # Remove extra new lines at the end while updated_footer[-1] == "\n": updated_footer = updated_footer[0:-1] f.seek(0) f.write(updated) f.write(footer_delimiter) f.write(updated_footer) f.truncate() f.close() update("README.md") update("history.md")