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