from plomtask.exceptions import HandledException
PATH_DB_SCHEMA = 'scripts/init.sql'
+EXPECTED_DB_VERSION = 0
class DatabaseFile: # pylint: disable=too-few-public-methods
self._check()
def _check(self) -> None:
- """Check file exists, and is of proper schema."""
+ """Check file exists, and is of proper DB version and schema."""
self.exists = isfile(self.path)
if self.exists:
+ self._validate_user_version()
self._validate_schema()
+ def _validate_user_version(self) -> None:
+ """Compare DB user_version with EXPECTED_DB_VERSION."""
+ sql_for_db_version = 'PRAGMA user_version'
+ with sql_connect(self.path) as conn:
+ db_version = list(conn.execute(sql_for_db_version))[0][0]
+ if db_version != EXPECTED_DB_VERSION:
+ msg = f'Wrong DB version, expected '\
+ f'{EXPECTED_DB_VERSION}, got {db_version}.'
+ raise HandledException(msg)
+
def _validate_schema(self) -> None:
"""Compare found schema with what's stored at PATH_DB_SCHEMA."""
sql_for_schema = 'SELECT sql FROM sqlite_master ORDER BY sql'