- 修复二进制打包插件表缺失的问题

This commit is contained in:
jxxghp 2023-12-04 11:33:16 +08:00
parent 7d73cdef33
commit 0214beb679
3 changed files with 28 additions and 3 deletions

View File

@ -9,6 +9,7 @@ from app.core.security import get_password_hash
from app.db import Engine, SessionFactory from app.db import Engine, SessionFactory
from app.db.models import Base from app.db.models import Base
from app.db.models.user import User from app.db.models.user import User
from app.helper.module import ModuleHelper
from app.log import logger from app.log import logger
@ -17,8 +18,8 @@ def init_db():
初始化数据库 初始化数据库
""" """
# 导入模块,避免建表缺失 # 导入模块,避免建表缺失
for module in Path(__file__).with_name("models").glob("*.py"): models_path = Path(__file__).with_name("models")
importlib.import_module(f"app.db.models.{module.stem}") ModuleHelper.dynamic_import_all_modules(models_path, "app.db.models")
# 全量建表 # 全量建表
Base.metadata.create_all(bind=Engine) Base.metadata.create_all(bind=Engine)
# 初始化超级管理员 # 初始化超级管理员

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import importlib import importlib
import pkgutil import pkgutil
from pathlib import Path
class ModuleHelper: class ModuleHelper:
@ -35,3 +36,26 @@ class ModuleHelper:
print(f'加载模块 {package_name} 失败:{err}') print(f'加载模块 {package_name} 失败:{err}')
return submodules return submodules
@staticmethod
def dynamic_import_all_modules(base_path: Path, package_name: str):
"""
动态导入所有模块到全局对象
"""
modules = []
# 遍历文件夹,找到所有模块文件
for file in base_path.glob("*.py"):
file_name = file.stem
if file_name != "__init__":
modules.append(file_name)
# 保存已有的全局对象
existing_globals = set(globals().keys())
# 动态导入并添加到全局命名空间
for module in modules:
full_module_name = f"{package_name}.{module}"
import_module = importlib.import_module(full_module_name)
module_globals = import_module.__dict__
# 仅导入全局对象中不存在的部分
new_objects = {name: value for name, value in module_globals.items() if name not in existing_globals}
# 更新全局命名空间
globals().update(new_objects)

View File

@ -1 +1 @@
APP_VERSION = 'v1.4.8' APP_VERSION = 'v1.4.8-1'