fix dynamic fields and ext db migration

This commit is contained in:
dni ⚡
2024-10-17 10:40:41 +02:00
parent 26d557e06c
commit 88058fa69b
5 changed files with 24 additions and 19 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ async def install_extension(ext_info: InstallableExtension) -> Extension:
ext_info.extract_archive()
db_version = (await get_dbversions()).get(ext_id, 0)
await migrate_extension_database(extension, db_version)
await migrate_extension_database(ext_info, db_version)
await create_installed_extension(ext_info)
+14 -11
View File
@@ -13,23 +13,22 @@ from lnbits.core.crud import (
update_migration_version,
)
from lnbits.core.db import db as core_db
from lnbits.core.extensions.models import (
Extension,
)
from lnbits.core.extensions.models import InstallableExtension
from lnbits.db import COCKROACH, POSTGRES, SQLITE, Connection
from lnbits.settings import settings
async def migrate_extension_database(ext: Extension, current_version):
async def migrate_extension_database(ext: InstallableExtension, current_version: int):
try:
ext_migrations = importlib.import_module(f"{ext.module_name}.migrations")
ext_db = importlib.import_module(ext.module_name).db
except ImportError as exc:
logger.error(exc)
raise ImportError(f"Cannot import module for extension '{ext.code}'.") from exc
raise ImportError(f"Cannot import module for extension '{ext.id}'.") from exc
async with ext_db.connect() as ext_conn:
await run_migration(ext_conn, ext_migrations, ext.code, current_version)
await run_migration(ext_conn, ext_migrations, ext.id, current_version)
async def run_migration(
@@ -72,6 +71,7 @@ async def load_disabled_extension_list() -> None:
async def migrate_databases():
"""Creates the necessary databases if they don't exist already; or migrates them."""
current_versions = await get_dbversions()
async with core_db.connect() as conn:
exists = False
if conn.type == SQLITE:
@@ -87,7 +87,6 @@ async def migrate_databases():
if not exists:
await core_migrations.m000_create_migrations_table(conn)
current_versions = await get_dbversions(conn)
core_version = current_versions.get("core", 0)
await run_migration(conn, core_migrations, "core", core_version)
@@ -95,13 +94,17 @@ async def migrate_databases():
# `installed_extensions` table has been created
await load_disabled_extension_list()
# todo: revisit, use installed extensions
for ext in Extension.get_valid_extensions(False):
current_version = current_versions.get(ext.code, 0)
for ext in await get_installed_extensions():
current_version = current_versions.get(ext.id)
if current_version is None:
logger.warning(
f"Extension {ext.id} has no migration version. This should not happen."
)
continue
try:
await migrate_extension_database(ext, current_version)
except Exception as e:
logger.exception(f"Error migrating extension {ext.code}: {e}")
logger.exception(f"Error migrating extension {ext.id}: {e}")
logger.info("✔️ All migrations done.")