certflow.controllers.base_controller module

控制器基类

提供所有业务控制器的基类实现,封装数据库会话管理、事务处理等通用功能.

class certflow.controllers.base_controller.BaseController(db_session=None, db_manager=None, use_shared=True)[源代码]

基类:object

控制器基类

所有业务控制器的基类,提供统一的数据库会话管理和事务处理方法. 支持上下文管理器协议,可自动管理会话生命周期. 支持共享数据库管理器,实现全局WebDAV配置统一管理.

参数:
db_manager

数据库管理器实例,负责创建和管理数据库连接

session

SQLAlchemy数据库会话对象,用于执行数据库操作

_owns_session

是否拥有会话的所有权,决定close()时是否关闭会话

示例

>>> # 方式1: 使用上下文管理器(推荐)
>>> with BaseController() as controller:
...     result = controller.session.query(User).all()
...     controller.commit()
>>>
>>> # 方式2: 手动管理会话
>>> controller = BaseController()
>>> try:
...     result = controller.session.query(User).all()
...     controller.commit()
... finally:
...     controller.close()
>>>
>>> # 方式3: 共享数据库管理器(支持WebDAV)
>>> db_manager = DatabaseManager(webdav_config=config)
>>> controller = BaseController(db_manager=db_manager)
>>>
>>> # 方式4: 使用全局共享管理器
>>> BaseController.set_shared_db_manager(db_manager)
>>> controller = BaseController()  # 自动使用共享管理器
classmethod set_shared_db_manager(db_manager)[源代码]

设置共享的数据库管理器(用于全局WebDAV配置)

设置后,所有新创建的控制器如果没有显式传入db_manager, 都会使用这个共享实例。

参数:

db_manager (DatabaseManager) -- 共享的数据库管理器实例

返回:

None

返回类型:

None

示例

>>> # 在应用启动时设置
>>> db_manager = DatabaseManager(webdav_config=config)
>>> BaseController.set_shared_db_manager(db_manager)
classmethod get_shared_db_manager()[源代码]

获取共享的数据库管理器

返回:

共享的数据库管理器实例,如果未设置则返回None

返回类型:

DatabaseManager | None

classmethod clear_shared_db_manager()[源代码]

清除共享的数据库管理器

将类级别的共享管理器置空,后续控制器将回退到独立管理器。

返回:

None

返回类型:

None

__enter__()[源代码]

上下文管理器入口

支持with语句,返回控制器实例自身.

返回:

控制器实例自身

返回类型:

BaseController

示例

>>> with BaseController() as controller:
...     # 使用controller进行操作
...     pass
__exit__(exc_type, exc_val, exc_tb)[源代码]

上下文管理器出口

退出with代码块时自动关闭数据库会话.

参数:
  • exc_type (type[BaseException] | None) -- 异常类型,如果发生异常则为异常类

  • exc_val (BaseException | None) -- 异常实例,如果发生异常则为异常对象

  • exc_tb (TracebackType | None) -- 异常追踪信息,如果发生异常则为traceback对象

返回:

None

返回类型:

None

close()[源代码]

关闭数据库会话

仅当控制器拥有会话所有权(即通过无参构造函数自动创建会话)时, 才会关闭会话.外部传入的会话不会被关闭.

返回:

None

返回类型:

None

commit()[源代码]

提交数据库事务

提交当前会话中的所有更改.如果提交过程中发生异常, 会自动回滚事务并重新抛出异常.

返回:

None

抛出:

Exception -- 事务提交失败时抛出原始异常

返回类型:

None

rollback()[源代码]

回滚数据库事务

撤销当前会话中所有未提交的更改.

返回:

None

返回类型:

None

get_session()[源代码]

获取当前会话

返回:

当前使用的数据库会话

返回类型:

Session

get_service(service_cls, *args, **kwargs)[源代码]

以当前控制器会话构造一个 Service 实例(收口 Service 构造来源)

统一替代 XxxService(self.session) 的散落写法:session 来源经 BaseController 收口,调用方不直接触碰 self.session

仅适用于构造签名首个位置参数为 Session 的 Service;首个参数非 会话的 Service(如 PrinterService(printer_name))不应走此工厂。

参数:
  • service_cls (type) -- Service 类(如 CertificateService

  • *args (object) -- 透传给 Service 构造的额外位置参数(排在 session 之后)

  • **kwargs (object) -- 透传给 Service 构造的关键字参数

返回:

构造好的 Service 实例

返回类型:

object

static resolve_dict_csv_path(dict_key)[源代码]

解析字典 CSV 导出/导入路径(委托 dict_csv_sync.resolve_dict_csv_path)。

LookupTableManagerView 等查表视图替代对 certflow.services. dict_csv_sync 的直接依赖,统一经控制器门面取路径。

参数:

dict_key (str)

返回类型:

Any

refresh_session()[源代码]

刷新会话(如果会话已关闭,重新创建)

用于在长时间运行的应用中恢复会话。

返回:

None

返回类型:

None

is_session_active()[源代码]

检查会话是否活跃

返回:

会话是否存在且活跃

返回类型:

bool