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

1from __future__ import annotations 

2 

3from typing import Any 

4 

5from genesis.data_models import SheetType 

6 

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] 

21 

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] 

31 

32 

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 

38 

39 

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 

48 

49 

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