Coverage for scripts/write_wiki.py: 0%
24 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-07-22 06:43 -0400
« prev ^ index » next coverage.py v7.6.1, created at 2025-07-22 06:43 -0400
1"""Write the tags to a wiki formatted table."""
3import json
4import requests
5import re
8def get_wikitext(page_title: str = "Overture categories") -> str:
9 # Define the API endpoint and parameters
10 url = "https://wiki.openstreetmap.org/w/api.php"
11 params = {
12 "action": "query",
13 "format": "json",
14 "titles": page_title,
15 "prop": "revisions",
16 "rvprop": "content",
17 "rvslots": "main",
18 }
20 # Send the request to the MediaWiki API
21 response = requests.get(url, params=params)
22 data = response.json()
24 # Extract the page id (keys are page ids)
25 page = next(iter(data["query"]["pages"].values()))
27 # Get the wikitext content
28 wikitext = page["revisions"][0]["slots"]["main"]["*"]
30 return wikitext
33def main() -> None:
34 text = []
35 with open("scripts/tags.json", "r", encoding="utf-8") as f:
36 tags = json.load(f)
38 for k, v in tags.items():
39 sec = " ".join([f"{ { tag|{k1}|{v1}} } " for k1, v1 in v.items()])
40 text.append(f"|-\n|{k}||{sec}")
42 pattern = r"{\| class=\"wikitable\" .*\|}"
43 replacement = f'{ | class="wikitable" id="mapping_table"\n!Overture!!OSM\n{"\n".join(text)}\n|} '
45 with open("scripts/wiki.txt", "w+", encoding="utf-8") as f:
46 new = re.sub(pattern, replacement, get_wikitext(), flags=re.DOTALL)
47 f.write(new)
49 print("Done!")
52if __name__ == "__main__":
53 main()