#!/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: print("🚨 Errors: 🚨") print("\n".join(map(str_from_error, errors))) else: print("No errors! 🎉") def main(): import sys numbers, errors = parse_numberdealers.parse(sys.stdin) 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}") report_errors(errors) if __name__ == "__main__": main()