#!/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
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'
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'],