#!/usr/bin/python import argparse from typing import List 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 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()