From b541e594822e4554bc230a2be1a163a79379f712 Mon Sep 17 00:00:00 2001 From: Philipp Spitzer Date: Sun, 28 Nov 2021 11:45:26 +0100 Subject: [PATCH] Start to work on wikitext to JSON conversion. --- bots/sledrun_wikitext_to_json.py | 81 ++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 bots/sledrun_wikitext_to_json.py diff --git a/bots/sledrun_wikitext_to_json.py b/bots/sledrun_wikitext_to_json.py new file mode 100644 index 0000000..29c860b --- /dev/null +++ b/bots/sledrun_wikitext_to_json.py @@ -0,0 +1,81 @@ +#!/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. + +Create a sledrun JSON page from a sledrun wikitext page (including map). + +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 SledrunWikiTextToJsonBot( + SingleSiteBot, + ConfigParserBot, + ExistingPageBot, + NoRedirectPageBot, + AutomaticTWSummaryBot, +): + def treat_page(self) -> None: + """Load the given page, do some changes, and save it.""" + wikitext_content_model = 'wikitext' + if self.current_page.content_model != wikitext_content_model: + warning(f"The content model of {self.current_page.title()} is {self.current_page.content_model} " + f"instead of {wikitext_content_model}.") + return + + sledrun_json_page = Page(self.site, self.current_page.title() + '/Rodelbahn.json') + if sledrun_json_page.exists(): + warning(f"{sledrun_json_page.title()} already exists, skipping {self.current_page.title()}.") + return + + map_json_page = Page(self.site, self.current_page.title() + '/Landkarte.json') + if map_json_page.exists(): + warning(f"{map_json_page.title()} already exists, skipping {self.current_page.title()}.") + return + + sledrun_json = { + "name": self.current_page.title(), + "description": "Holadrio!", + } + + map_json = None + + text = create_sledrun_wiki(sledrun_json, map_json) + summary = 'Rodelbahnbeschreibung nach Konvertierung nach und von JSON.' + 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 = SledrunWikiTextToJsonBot(generator=gen) + bot.run() + else: + pywikibot.bot.suggest_help(missing_generator=True) + + +if __name__ == '__main__': + main() -- 2.39.5