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)