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

1"""Write the tags to a wiki formatted table.""" 

2 

3import json 

4import requests 

5import re 

6 

7 

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 } 

19 

20 # Send the request to the MediaWiki API 

21 response = requests.get(url, params=params) 

22 data = response.json() 

23 

24 # Extract the page id (keys are page ids) 

25 page = next(iter(data["query"]["pages"].values())) 

26 

27 # Get the wikitext content 

28 wikitext = page["revisions"][0]["slots"]["main"]["*"] 

29 

30 return wikitext 

31 

32 

33def main() -> None: 

34 text = [] 

35 with open("scripts/tags.json", "r", encoding="utf-8") as f: 

36 tags = json.load(f) 

37 

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}") 

41 

42 pattern = r"{\| class=\"wikitable\" .*\|}" 

43 replacement = f'{ | class="wikitable" id="mapping_table"\n!Overture!!OSM\n{"\n".join(text)}\n|} ' 

44 

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) 

48 

49 print("Done!") 

50 

51 

52if __name__ == "__main__": 

53 main()