Skip to content
Snippets Groups Projects
DatabaseMigrator.py 1.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • from __future__ import annotations
    
    import logging
    from typing import TYPE_CHECKING
    
    from blueprints.RoadmapAPI import RoadmapParameters
    from logic import Constants
    
    if TYPE_CHECKING:
        from logic.Database import Database
    
    LOGGER = logging.getLogger(Constants.APP_NAME)
    
    
    class DatabaseMigrator:
        def __init__(self, database: Database):
            self._database = database
    
        def migrate(self):
            latestVersion = self._database.VERSION
            currentVersion = self._database.get_version()
    
            while currentVersion < latestVersion:
                currentVersion = self._database.get_version()
                self.__migrate_version(currentVersion)
    
            if latestVersion == currentVersion:
                LOGGER.debug(f'Database version: {latestVersion} (latest)')
                return
    
        def __migrate_version(self, currentVersion):
            from logic.Database import FetchType
    
            if currentVersion == 1:
                LOGGER.debug('Migrating database from version 1 to 2...')
    
                queryColumnExists = f'SELECT EXISTS (SELECT 1 FROM information_schema.columns ' \
                                    f'WHERE table_name=\'roadmaps\' AND column_name=\'{RoadmapParameters.HIDDEN.value}\');'
                exists = self._database._query(queryColumnExists, fetch_type=FetchType.ONE)
    
                if not exists['exists']:
                    query = f'ALTER TABLE "roadmaps" ADD "{RoadmapParameters.HIDDEN.value}" boolean NOT NULL DEFAULT false;'
                    self._database._query(query, fetch_type=FetchType.NONE)
    
                self._database.update_version(2)
                return
    
            raise ValueError(f'No migration handler for version {currentVersion} defined')