]> 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 0df28427b4135fdf21695edbad28aa96c03ef861..075dd8875495324cb5b8ee4aba8931cfe4fc603c 100644 (file)
@@ -2,70 +2,16 @@
 import argparse
 import json
 import sys
-from difflib import SequenceMatcher
-from enum import Enum, auto
-from typing import List, Optional
+from typing import List
 
 from termcolor import cprint  # python3-termcolor
 import jsonschema
 
+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')
-
-
-class Choice(Enum):
-    yes = auto()
-    no = auto()
-    quit = auto()
-
-
-def input_yes_no_quit(text: str, default: Optional[Choice]) -> Choice:
-    while True:
-        result = input(text)
-        if result in ['Y', 'y', 'yes']:
-            return Choice.yes
-        elif result in ['N', 'n', 'no']:
-            return Choice.no
-        elif result in ['Q', 'q', 'quit']:
-            return Choice.quit
-        elif result == '' and default is not None:
-            return default
-        cprint(f'Unrecognized input: "{result}"', 'red')
-
-
 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'
@@ -128,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'])