#!/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()