#!/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()