mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-30 20:05:42 +08:00
30 lines
910 B
Python
30 lines
910 B
Python
"""
|
|
插件专属声明式基类工厂。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from sqlalchemy.orm import DeclarativeBase
|
|
|
|
__all__ = ["plugin_declarative_base"]
|
|
|
|
|
|
def plugin_declarative_base() -> type[DeclarativeBase]:
|
|
"""
|
|
产出携带全新 ``MetaData`` 的声明式基类。
|
|
|
|
插件模型继承本函数的返回值定义,其表便注册在独立的 ``MetaData`` 上:既不与宿主
|
|
``app.db.base.Base`` 抢同一份注册表,也允许两个插件各自定义同名表。插件热重载会
|
|
重新执行插件模块、重新调用本函数,因此每次都拿到干净的注册表,不会在同一
|
|
``MetaData`` 上重复定义同名表而报错。
|
|
|
|
:return: 声明式基类
|
|
"""
|
|
|
|
class PluginBase(DeclarativeBase): # type: ignore[misc] # SQLAlchemy 无 py.typed 基类
|
|
"""
|
|
插件自有表的声明式基类。
|
|
"""
|
|
|
|
return PluginBase
|