]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/commitdiff
Implement own input function.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Wed, 26 Oct 2022 18:52:32 +0000 (20:52 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Wed, 26 Oct 2022 18:52:32 +0000 (20:52 +0200)
scripts/update_sledrun_wikitext.py

index 557494d57dc58f065bc30f300e9a3366f5e33d3a..0df28427b4135fdf21695edbad28aa96c03ef861 100644 (file)
@@ -1,12 +1,13 @@
 #!/usr/bin/python
 import argparse
 import json
+import sys
 from difflib import SequenceMatcher
-from typing import List
+from enum import Enum, auto
+from typing import List, Optional
 
 from termcolor import cprint  # python3-termcolor
 import jsonschema
-from pywikibot import input_yn
 
 from wrpylib.mwapi import WikiSite
 from wrpylib.wrmwmarkup import create_sledrun_wiki
@@ -45,6 +46,26 @@ def unified_diff(a: str, b: str, context: int = 3):
                     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'
@@ -71,10 +92,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'],