From: Philipp Spitzer Date: Fri, 24 Nov 2023 17:02:57 +0000 (+0100) Subject: Create script to replace all sledrun wikitext with wrsledrunjson tag. X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wrpylib.git/commitdiff_plain/784c68bb3acf581fc17c957b6c4db7503ba836b5 Create script to replace all sledrun wikitext with wrsledrunjson tag. --- diff --git a/scripts/update_sledrun_with_wrsledrunjson.py b/scripts/update_sledrun_with_wrsledrunjson.py new file mode 100644 index 0000000..8024504 --- /dev/null +++ b/scripts/update_sledrun_with_wrsledrunjson.py @@ -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 = '\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 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()