certflow.views.bases.datasources.base_data 源代码

"""基础数据数据源(客户端过滤 + 排序)

统一的全量加载 → 客户端过滤 → 客户端排序 → 客户端分页实现,供材质牌号 /
口径映射 / 型号→压力 三张基础表复用,避免每表各写一遍。
"""

from __future__ import annotations

from typing import Any

from certflow.views.bases.query_data_source import (
    BaseQueryDataSource,
    client_filter_records,
    client_sort_records,
    export_records_to_csv,
)


[文档] class BaseDataDataSource(BaseQueryDataSource): """基础数据(全量小表)数据源:list_all 后客户端过滤/排序/分页。""" supports_server_sort = False supports_server_paging = False quick_search_or = False editable = False correction = False def __init__( self, controller: Any, columns: list[tuple[str, str]], filter_columns: list[dict] | None = None, label: str = "基础数据", ) -> None: self._controller = controller self._columns = list(columns) self._filter_columns = filter_columns or [{"label": h, "field": f} for h, f in columns] self.label = label
[文档] def get_columns(self) -> list[tuple[str, str]]: return list(self._columns)
[文档] def get_filter_columns(self) -> list[dict]: return list(self._filter_columns)
[文档] def query( self, conditions: dict, page: int, page_size: int, order_by: str | None = None, order_desc: bool = False, or_filters: Any = None, ) -> dict[str, Any]: records = self._controller.list_all() records = client_filter_records(records, conditions) records = client_sort_records(records, order_by, order_desc) return self.client_paginate(records, page, page_size, conditions)
[文档] def export_csv(self, path: str) -> int: return export_records_to_csv(self._controller.list_all(), self.get_columns(), path)