From: Christian Heller Date: Sun, 17 Mar 2024 02:21:22 +0000 (+0100) Subject: To DB schema validation error message add diff of offending lines. X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/%7B%7B%20web_path%20%7D%7D/%7B%7Bprefix%7D%7D/static/%7B%7Btodo.date%7D%7D?a=commitdiff_plain;h=357e434444f45ddb3df506b18c5d12fbab2b9153;p=plomtask To DB schema validation error message add diff of offending lines. --- diff --git a/plomtask/db.py b/plomtask/db.py index a8bdbec..b7291db 100644 --- a/plomtask/db.py +++ b/plomtask/db.py @@ -1,5 +1,6 @@ """Database management.""" from os.path import isfile +from difflib import Differ from sqlite3 import connect as sql_connect from plomtask.misc import HandledException @@ -29,11 +30,13 @@ class DatabaseFile: def validate_schema(self): """Compare found schema with what's stored at PATH_DB_SCHEMA.""" sql_for_schema = 'SELECT sql FROM sqlite_master ORDER BY sql' - msg_wrong_schema = 'Database has wrong tables schema.' + msg_err = 'Database has wrong tables schema. Diff:\n' with sql_connect(self.path) as conn: schema_rows = [r[0] for r in conn.execute(sql_for_schema) if r[0]] retrieved_schema = ';\n'.join(schema_rows) + ';' with open(PATH_DB_SCHEMA, 'r', encoding='utf-8') as f: stored_schema = f.read().rstrip() if stored_schema != retrieved_schema: - raise HandledException(msg_wrong_schema) + diff_msg = Differ().compare(retrieved_schema.splitlines(), + stored_schema.splitlines()) + raise HandledException(msg_err + '\n'.join(diff_msg))