"""Database management."""
from os.path import isfile
+from difflib import Differ
from sqlite3 import connect as sql_connect
from plomtask.misc import HandledException
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))