]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blobdiff - scripts/update_sledrun_wikitext.py
Implement parameter "all".
[philipp/winterrodeln/wrpylib.git] / scripts / update_sledrun_wikitext.py
index 557494d57dc58f065bc30f300e9a3366f5e33d3a..075dd8875495324cb5b8ee4aba8931cfe4fc603c 100644 (file)
@@ -1,50 +1,17 @@
 #!/usr/bin/python
 import argparse
 import json
-from difflib import SequenceMatcher
+import sys
 from typing import List
 
 from termcolor import cprint  # python3-termcolor
 import jsonschema
-from pywikibot import input_yn
 
+from wrpylib.cli_tools import unified_diff, input_yes_no_quit, Choice
 from wrpylib.mwapi import WikiSite
 from wrpylib.wrmwmarkup import create_sledrun_wiki
 
 
-def _format_range_unified(start: int, stop: int) -> str:
-    """Copied from difflib._format_range_unified"""
-    beginning = start + 1  # lines start numbering with one
-    length = stop - start
-    if length == 1:
-        return str(beginning)
-    if not length:
-        beginning -= 1  # empty ranges begin at line just before the range
-    return f'{beginning},{length}'
-
-
-def unified_diff(a: str, b: str, context: int = 3):
-    a_lines = a.splitlines()
-    b_lines = b.splitlines()
-    for group in SequenceMatcher(None, a_lines, b_lines).get_grouped_opcodes(context):
-        first, last = group[0], group[-1]
-        file1_range = _format_range_unified(first[1], last[2])
-        file2_range = _format_range_unified(first[3], last[4])
-        cprint(f'@@ -{file1_range} +{file2_range} @@', 'magenta')
-
-        for tag, i1, i2, j1, j2 in group:
-            if tag == 'equal':
-                for line in a_lines[i1:i2]:
-                    print(f'  {line}')
-                continue
-            if tag in {'replace', 'delete'}:
-                for line in a_lines[i1:i2]:
-                    cprint(f'- {line}', 'red')
-            if tag in {'replace', 'insert'}:
-                for line in b_lines[j1:j2]:
-                    cprint(f'+ {line}', 'green')
-
-
 def update_sledrun(site: WikiSite, wiki_page: dict, json_page: dict, map_page: dict, impression_page: dict):
     json_page_main_slot = json_page['revisions'][0]['slots']['main']
     assert json_page_main_slot['contentmodel'] == 'json'
@@ -71,10 +38,13 @@ def update_sledrun(site: WikiSite, wiki_page: dict, json_page: dict, map_page: d
 
     cprint(wiki_page['title'], 'green')
     unified_diff(previous_text, new_text)
-    yn = input_yn('Do you accept the changes?', True)
-    if not yn:
+    choice = input_yes_no_quit('Do you accept the changes [yes, no, quit]? ', None)
+    if choice == Choice.no:
         return
 
+    if choice == Choice.quit:
+        sys.exit(0)
+
     site(
         'edit',
         pageid=wiki_page['pageid'],
@@ -104,7 +74,7 @@ def update_sledrun_wikitext(ini_files: List[str], update_all: bool):
             assert wikitext_page['title'] + '/Rodelbahn.json' == json_page['title']
             if 'missing' in json_page:
                 continue
-            if wikitext_page['revisions'][0]['timestamp'] < json_page['revisions'][0]['timestamp']:
+            if update_all or (wikitext_page['revisions'][0]['timestamp'] < json_page['revisions'][0]['timestamp']):
                 update_wikitext_title_list.append(wikitext_page['title'])
                 update_json_title_list.append(json_page['title'])