check_numberdealers/numberdealers/report_errors.py

68 lines
2.2 KiB
Python
Executable file

#!/usr/bin/env python3
from . import parse_numberdealers
def link(link_text: str, message_obj: parse_numberdealers.Message):
return f"[{link_text}]({parse_numberdealers.URL_PREFIX}{message_obj.id})"
def mention(message: parse_numberdealers.Message):
if message.username is not None:
return f" (@{message.username})"
else:
return ""
def str_from_error(err):
if isinstance(err, parse_numberdealers.UnrecognizedNumber):
msg = f"🚨 Unrecognized post {link(err.message.message, err.message)}"
elif isinstance(err, parse_numberdealers.EditedMessage):
msg = f"🚨 Edited post {link(err.message.message, err.message)}"
elif isinstance(err, parse_numberdealers.NonNumberMessage):
msg = f"🚨 Non-number message {link(err.message.message, err.message)}"
elif isinstance(err, parse_numberdealers.ShouldHaveBeen):
msg = f"🚨 {link(err.message.recognized_number, err.message)} should have been {err.expected_number}"
elif isinstance(err, parse_numberdealers.Duplicate):
msg = f"🚨 Duplicate {link(err.message.recognized_number, err.message)}"
elif isinstance(err, parse_numberdealers.Stray):
msg = f"🚨 Stray {link(err.message.recognized_number, err.message)}"
elif isinstance(err, parse_numberdealers.Skipped):
msg = f"🚨 {link('Skipped', err.message)} {err.expected_number}"
elif isinstance(err, parse_numberdealers.Jump):
msg = f"🚨 Going from {link(err.previous_message.recognized_number, err.previous_message)}" \
f" to {link(err.message.recognized_number, err.message)}"
return msg + mention(err.message)
def report_errors(errors):
if errors:
return list(map(str_from_error, errors))
else:
return []
def main():
import sys
error_style = {
"--numberdealers": parse_numberdealers.ErrorStyle.NUMBERDEALERS,
"--numberdealers-ng": parse_numberdealers.ErrorStyle.NUMBERDEALERS_NG
}[sys.argv[1]]
numbers, errors = parse_numberdealers.parse(sys.stdin, error_style)
if numbers == [] and errors == []:
print("No input data")
else:
if numbers == []:
print("No valid number messages!")
else:
print(f"Checked from {numbers[0].recognized_number} up to {numbers[-1].recognized_number}")
if not errors:
print("No errors! 🎉")
else:
print("\n".join(report_errors(errors)))
if __name__ == "__main__":
main()