]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blob - scripts/update_sledrun_with_wrsledrunjson.py
802450406b538fd26b224e9be8f7bf08feeb8093
[philipp/winterrodeln/wrpylib.git] / scripts / update_sledrun_with_wrsledrunjson.py
1 #!/usr/bin/python
2 import argparse
3 from typing import List
4
5 from termcolor import cprint  # python3-termcolor
6
7 from wrpylib.cli_tools import unified_diff, input_yes_no_quit, Choice
8 from wrpylib.mwapi import WikiSite
9
10
11 def query_revisions(site: WikiSite, title_list: List[str], extra_rv_prop: List[str]) -> List[dict]:
12     rv_prop = ['timestamp', 'ids'] + extra_rv_prop
13     pages = next(site.query(prop='revisions', titles=title_list, rvslots='*', rvprop=rv_prop))['pages']
14     pages = sorted(pages, key=lambda p: title_list.index(p['title']))
15     assert len(title_list) == len(pages)
16     return pages
17
18
19 def update_sledrun_wikitext_with_wrsledrunjson_tag(ini_files: List[str]):
20     site = WikiSite(ini_files)
21     cm_limit = 5  # 'max'
22     for category_members in site.query(list='categorymembers', cmtitle='Kategorie:Rodelbahn', cmlimit=cm_limit):
23         title_list = [page["title"] for page in category_members['categorymembers']]
24         pages = query_revisions(site, title_list, ['content'])
25         for page in pages:
26             new_text = '<wrsledrunjson />\n\n[[Kategorie:Rodelbahn]]'
27
28             previous_text = page['revisions'][0]['slots']['main']['content'].strip()
29             if new_text == previous_text:
30                 continue
31
32             cprint(page['title'], 'green')
33             unified_diff(previous_text, new_text)
34             choice = input_yes_no_quit('Do you accept the changes [yes, no, quit]? ', None)
35             if choice == Choice.no:
36                 continue
37
38             if choice == Choice.quit:
39                 return
40
41             site(
42                 'edit',
43                 pageid=page['pageid'],
44                 text=new_text,
45                 summary='Rodelbahnbeschreibung wird jetzt direkt aus den JSON Daten generiert.',
46                 bot=1,
47                 baserevid=page['revisions'][0]['revid'],
48                 nocreate=1,
49                 token=site.token(),
50             )
51
52
53 def main():
54     parser = argparse.ArgumentParser(description='Replace sledrun wikitext with <wrsledrunjson /> tag.')
55     parser.add_argument('inifile', nargs='+', help='inifile.ini, see: https://www.winterrodeln.org/trac/wiki/ConfigIni')
56     args = parser.parse_args()
57     update_sledrun_wikitext_with_wrsledrunjson_tag(args.inifile)
58
59
60 if __name__ == '__main__':
61     main()