Files
swingmusic-extended/app/migrations/__init__.py
T
cwilvx 4a9f804e70 combine userdata and swing db into one
+ port populate to new db interface
+ add genrehashes and hash info to tracks
+ properly structure new db table files
+ move helpers to dedicated utils file
+ move settings from db to config file
+ move artists, albums, auth and favorites endpoint to new db interface
+ use folder store to index filepaths
+ paginate favorite pages
+ 56 moretiny changes 😅
2024-06-30 15:06:33 +03:00

73 lines
2.2 KiB
Python

"""
Migrations module.
Reads and applies the latest database migrations.
"""
import inspect
import sys
from types import ModuleType
# from app.db.sqlite.migrations import MigrationManager
from app.db.metadata import MigrationTable
from app.logger import log
from app.migrations import v1_3_0, v1_4_9
from app.migrations.base import Migration
def get_all_migrations(module: ModuleType) -> list[Migration]:
"""
Extracts all migration classes from a module.
"""
predicate = (
lambda obj: inspect.isclass(obj)
and issubclass(obj, Migration)
and obj.enabled
and obj.__module__ == module.__name__
)
# INFO: I couldn't find how to sort the classes in order of appearance
# so I just renamed them to be sortable by name
return [obj for name, obj in inspect.getmembers(module, predicate)]
def apply_migrations():
"""
Applies the latest database migrations.
The length of all the migrations is stored in the database
and used to check for new migrations. When the length of the
migrations list is larger than the number stored in the db,
migrations past that index are applied and the new length
is stored as the new migration index.
"""
modules = [v1_3_0, v1_4_9]
migrations = [get_all_migrations(m) for m in modules]
# index = MigrationManager.get_index()
index = MigrationTable.get_version()
all_migrations = [migration for sublist in migrations for migration in sublist]
to_apply: list[Migration] = []
# if index is from old release,
# get migrations from the "migrations" list
# if index < 3:
# _migrations = migrations[index:]
# to_apply = [migration for sublist in _migrations for migration in sublist]
# else:
# to_apply = all_migrations[index:]
# for migration in to_apply:
# # try:
# migration.migrate()
# log.info("Applied migration: %s", migration.__name__)
# except Exception as e:
# log.error("Failed to run migration: %s", migration.__name__)
# log.error(e)
# sys.exit(0)
# MigrationManager.set_index(len(all_migrations))
MigrationTable.set_version(len(all_migrations))