2025-01-20 17:43:15 +01:00
|
|
|
from glob import glob
|
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
|
|
|
|
from .sql_migration import BrickSQLMigration
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
class BrickSQLMigrationList(object):
|
|
|
|
migrations: list[BrickSQLMigration]
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
# Load the migrations only there is none already loaded
|
|
|
|
migrations = getattr(self, 'migrations', None)
|
|
|
|
|
|
|
|
if migrations is None:
|
|
|
|
logger.info('Loading SQL migrations list')
|
|
|
|
|
|
|
|
BrickSQLMigrationList.migrations = []
|
|
|
|
|
|
|
|
path: str = os.path.join(
|
|
|
|
os.path.dirname(__file__),
|
|
|
|
'sql/migrations/*.sql'
|
|
|
|
)
|
|
|
|
|
|
|
|
files = glob(path)
|
|
|
|
|
|
|
|
for file in files:
|
|
|
|
try:
|
|
|
|
BrickSQLMigrationList.migrations.append(
|
|
|
|
BrickSQLMigration(file)
|
|
|
|
)
|
|
|
|
# Ignore file if error
|
2025-01-21 17:25:36 +01:00
|
|
|
except Exception:
|
2025-01-20 17:43:15 +01:00
|
|
|
pass
|
|
|
|
|
|
|
|
# Get the sorted list of pending migrations
|
|
|
|
def pending(
|
|
|
|
self,
|
|
|
|
current: int,
|
|
|
|
/
|
|
|
|
) -> list[BrickSQLMigration]:
|
|
|
|
pending: list[BrickSQLMigration] = []
|
|
|
|
|
|
|
|
for migration in self.migrations:
|
|
|
|
if migration.is_needed(current):
|
|
|
|
pending.append(migration)
|
|
|
|
|
|
|
|
# Sort the list
|
|
|
|
pending.sort(key=lambda e: e.version)
|
|
|
|
|
|
|
|
return pending
|