#!/usr/bin/python """ User script for pywikibot (https://gerrit.wikimedia.org/r/pywikibot/core.git), tested with version 6.6.1. Put it in directory scripts/userscripts. Replace a sledrun page with content generated from associated JSON subpages (Rodelbahn and Landkarte). The following generators and filters are supported: ¶ms; """ import json import pywikibot from pywikibot import pagegenerators, Page from pywikibot.bot import ( AutomaticTWSummaryBot, ConfigParserBot, ExistingPageBot, NoRedirectPageBot, SingleSiteBot, ) from pywikibot.logging import warning from wrpylib.wrmwmarkup import create_sledrun_wiki docuReplacements = {'¶ms;': pagegenerators.parameterHelp} class SledrunFromJsonBot( SingleSiteBot, ConfigParserBot, ExistingPageBot, NoRedirectPageBot, AutomaticTWSummaryBot, ): def treat_page(self) -> None: """Load the given page, do some changes, and save it.""" sledrun_json_page = Page(self.site, self.current_page.title() + '/Rodelbahn.json') if not sledrun_json_page.exists(): warning(f"{sledrun_json_page.title()} does not exist. Skipping.") return if sledrun_json_page.content_model != 'json': warning(f"Content model of {sledrun_json_page.title()} is not 'json'.") return sledrun_json = json.loads(sledrun_json_page.text) map_json_page = Page(self.site, self.current_page.title() + '/Landkarte.json') if map_json_page.exists(): map_json = json.loads(map_json_page.text) else: map_json = None impressions = None sledrun_impressions_page = Page(self.site, self.current_page.title() + '/Impressionen') if sledrun_impressions_page.exists(): impressions = sledrun_impressions_page.title() text = create_sledrun_wiki(sledrun_json, map_json, impressions) summary = 'Rodelbahnbeschreibung aus JSON Daten aktualisiert.' self.put_current(text, summary=summary) def main(*args: str) -> None: local_args = pywikibot.handle_args(args) gen_factory = pagegenerators.GeneratorFactory() gen_factory.handle_args(local_args) gen = gen_factory.getCombinedGenerator(preload=True) if gen: bot = SledrunFromJsonBot(generator=gen) bot.run() else: pywikibot.bot.suggest_help(missing_generator=True) if __name__ == '__main__': main()