]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/commitdiff
Create script to replace all sledrun wikitext with wrsledrunjson tag.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 24 Nov 2023 17:02:57 +0000 (18:02 +0100)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 24 Nov 2023 17:02:57 +0000 (18:02 +0100)
scripts/update_sledrun_with_wrsledrunjson.py [new file with mode: 0644]

diff --git a/scripts/update_sledrun_with_wrsledrunjson.py b/scripts/update_sledrun_with_wrsledrunjson.py
new file mode 100644 (file)
index 0000000..8024504
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+import argparse
+from typing import List
+
+from termcolor import cprint  # python3-termcolor
+
+from wrpylib.cli_tools import unified_diff, input_yes_no_quit, Choice
+from wrpylib.mwapi import WikiSite
+
+
+def query_revisions(site: WikiSite, title_list: List[str], extra_rv_prop: List[str]) -> List[dict]:
+    rv_prop = ['timestamp', 'ids'] + extra_rv_prop
+    pages = next(site.query(prop='revisions', titles=title_list, rvslots='*', rvprop=rv_prop))['pages']
+    pages = sorted(pages, key=lambda p: title_list.index(p['title']))
+    assert len(title_list) == len(pages)
+    return pages
+
+
+def update_sledrun_wikitext_with_wrsledrunjson_tag(ini_files: List[str]):
+    site = WikiSite(ini_files)
+    cm_limit = 5  # 'max'
+    for category_members in site.query(list='categorymembers', cmtitle='Kategorie:Rodelbahn', cmlimit=cm_limit):
+        title_list = [page["title"] for page in category_members['categorymembers']]
+        pages = query_revisions(site, title_list, ['content'])
+        for page in pages:
+            new_text = '<wrsledrunjson />\n\n[[Kategorie:Rodelbahn]]'
+
+            previous_text = page['revisions'][0]['slots']['main']['content'].strip()
+            if new_text == previous_text:
+                continue
+
+            cprint(page['title'], 'green')
+            unified_diff(previous_text, new_text)
+            choice = input_yes_no_quit('Do you accept the changes [yes, no, quit]? ', None)
+            if choice == Choice.no:
+                continue
+
+            if choice == Choice.quit:
+                return
+
+            site(
+                'edit',
+                pageid=page['pageid'],
+                text=new_text,
+                summary='Rodelbahnbeschreibung wird jetzt direkt aus den JSON Daten generiert.',
+                bot=1,
+                baserevid=page['revisions'][0]['revid'],
+                nocreate=1,
+                token=site.token(),
+            )
+
+
+def main():
+    parser = argparse.ArgumentParser(description='Replace sledrun wikitext with <wrsledrunjson /> tag.')
+    parser.add_argument('inifile', nargs='+', help='inifile.ini, see: https://www.winterrodeln.org/trac/wiki/ConfigIni')
+    args = parser.parse_args()
+    update_sledrun_wikitext_with_wrsledrunjson_tag(args.inifile)
+
+
+if __name__ == '__main__':
+    main()