Coverage for src\genesis\parsers\sheet_detector.py: 100%
20 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
1from __future__ import annotations
3from typing import Any
5from genesis.data_models import SheetType
7# Sheet 名关键词(design §3.5.1,顺序即优先级)
8NAME_KEYWORDS: list[tuple[str, SheetType]] = [
9 ("機能", SheetType.FUNCTION),
10 ("画面", SheetType.SCREEN),
11 ("帳票", SheetType.REPORT),
12 ("テーブル", SheetType.DATABASE),
13 ("DB", SheetType.DATABASE),
14 ("インターフェース", SheetType.INTERFACE),
15 ("IF", SheetType.INTERFACE),
16 ("バッチ", SheetType.BATCH),
17 ("ジョブ", SheetType.BATCH),
18 ("マスタ", SheetType.MASTER),
19 ("コード", SheetType.MASTER),
20]
22# 表头关键词
23HEADER_KEYWORDS: list[tuple[str, SheetType]] = [
24 ("機能ID", SheetType.FUNCTION),
25 ("画面ID", SheetType.SCREEN),
26 ("帳票ID", SheetType.REPORT),
27 ("テーブルID", SheetType.DATABASE),
28 ("IF名", SheetType.INTERFACE),
29 ("バッチID", SheetType.BATCH),
30]
33def _name_hit(sheet_name: str) -> SheetType | None:
34 for kw, st in NAME_KEYWORDS:
35 if kw in sheet_name:
36 return st
37 return None
40def _header_hit(matrix: list[list[Any]]) -> SheetType | None:
41 for row in matrix[:3]:
42 for cell in row:
43 if isinstance(cell, str):
44 for kw, st in HEADER_KEYWORDS:
45 if kw in cell:
46 return st
47 return None
50def detect_sheet_type(sheet_name: str, matrix: list[list[Any]]) -> SheetType:
51 return _name_hit(sheet_name) or _header_hit(matrix) or SheetType.GENERIC