certflow.controllers.history_controller 源代码

# src/certflow/controllers/history_controller.py
"""打印历史控制器

封装打印历史的查询逻辑,隔离 View 层对 Model 的直接依赖。
"""

from __future__ import annotations

from collections.abc import Sequence
from typing import TYPE_CHECKING

from sqlalchemy.orm import Session

if TYPE_CHECKING:
    from certflow.models.print_log import PrintLog


[文档] class HistoryController: """打印历史控制器 为 HistoryView 提供数据查询能力,View 不直接操作 ORM。 """ def __init__(self, session: Session) -> None: from certflow.services.cert_log_service import CertLogService self._log_service = CertLogService(session)
[文档] def get_recent_logs(self, limit: int = 200) -> list[PrintLog]: """获取最近的打印日志 Args: limit: 返回条数上限,默认 200 Returns: PrintLog 列表,按 id 降序排列 """ return self._log_service.get_recent_logs(limit)
[文档] def query_logs(self, filters: dict | None = None, limit: int = 2000) -> list[PrintLog]: """按条件查询打印日志(日期区间 + 型号搜索,参数化防注入) Args: filters: 过滤条件字典(见 CertLogService.query_logs) limit: 返回条数上限,默认 2000 Returns: PrintLog 列表,按 id 降序排列 """ return self._log_service.query_logs(filters, limit)
[文档] def export_logs_csv(self, logs: Sequence[PrintLog], file_path: str) -> int: """将打印日志导出为 CSV(UTF-8 BOM) 收口 View 对 ``handlers.csv_export`` 的直连调用,使导出动作 也经 Controller 统一分发,符合 M5「View→Controller 收口」架构约束。 Args: logs: PrintLog 序列 file_path: 输出文件路径 Returns: int: 导出的数据行数(不含表头) """ from certflow.handlers.csv_export import export_print_logs_csv return export_print_logs_csv(logs, file_path)