11import enum
22import logging
3- import sys
43import typing
54from typing import Any , Generic , TypeVar
65
@@ -24,10 +23,10 @@ class TableType(enum.Enum):
2423
2524class ElementTable (Generic [ElementType ]):
2625 table_type : TableType = TableType .general
27- keywords : dict [str , Keyword ] = {}
28- dtos : dict [str , type [DTO ]] = {}
26+ keywords : dict [str , Keyword [ Any ] ] = {}
27+ dtos : dict [str , type [DTO [ Any ] ]] = {}
2928
30- def __init__ (self , table : Table = None , migrate_header : bool = False ):
29+ def __init__ (self , table : Table | None = None , migrate_header : bool = False ):
3130 self .table = Table ()
3231 if table is not None :
3332 if migrate_header :
@@ -36,18 +35,17 @@ def __init__(self, table: Table=None, migrate_header: bool=False):
3635 else :
3736 _table = table
3837
39- if _table is not None :
40- def add_data (keyword : str , data_length : int ) -> None :
41- for column in self .get_columns (_table , keyword , data_length ):
42- self .table .append_right (column )
38+ def add_data (keyword : str , data_length : int ) -> None :
39+ for column in self .get_columns (_table , keyword , data_length ):
40+ self .table .append_right (column )
4341
44- for keyword in self .keywords :
45- data_length = self .keywords [keyword ].attribute_length
46- add_data (keyword , data_length )
42+ for keyword in self .keywords :
43+ data_length = self .keywords [keyword ].attribute_length
44+ add_data (keyword , data_length )
4745
48- for dto in self .dtos :
49- data_length = self .dtos [dto ].column_length ()
50- add_data (dto , data_length )
46+ for dto in self .dtos :
47+ data_length = self .dtos [dto ].column_length ()
48+ add_data (dto , data_length )
5149
5250 def __json__ (self ) -> dict [str , Any ]:
5351 return {
@@ -56,7 +54,7 @@ def __json__(self) -> dict[str, Any]:
5654
5755 @classmethod
5856 def get_columns (cls , table : Table , keyword : str , data_length : int ) -> list [Table ]:
59- columns = []
57+ columns : list [ Table ] = []
6058 column = 0
6159
6260 if keyword in cls .keywords :
@@ -69,6 +67,8 @@ def get_columns(cls, table: Table, keyword: str, data_length: int) -> list[Table
6967 header [0 , 0 ] = keyword
7068 for i , (field_name , field_type ) in enumerate (types ):
7169 header [1 , i ] = f"{ field_name } : { field_type } "
70+ else :
71+ raise ValueError (f"unknown keyword { keyword } " )
7272
7373 while column < table .num_columns :
7474 if table [0 , column ] == keyword :
@@ -85,7 +85,7 @@ def get_columns(cls, table: Table, keyword: str, data_length: int) -> list[Table
8585
8686 def get (self , row_no : int , keywords : list [str ] | None = None , ** kwargs : Any ) -> list [ElementType ]:
8787 row_no += 2 # skip header line
88- elements = []
88+ elements : list [ ElementType ] = []
8989
9090 for keyword in list (self .keywords .keys ()) + list (self .dtos .keys ()):
9191 if keyword in self .keywords :
@@ -136,14 +136,14 @@ def get_one(self, row_no: int, keywords: list[str] | None=None, **kwargs: Any) -
136136
137137 return None
138138
139- def _prepare_dto_data (self , row : int , dto : type [DTO ], data : list [Any ], resolvers : list [Parser ]) -> dict [str , Any ]:
139+ def _prepare_dto_data (self , row : int , dto : type [DTO [ Any ] ], data : list [Any ], resolvers : list [Parser ]) -> dict [str , Any ]:
140140 fields = dto .model_fields .items ()
141141
142142 dct : dict [str , Any ] = {}
143143 index = 0
144144
145145 for field_name , field in fields :
146- if tuple_type := dto ._is_cell_tuple (field .annotation ):
146+ if tuple_type := dto .check_is_cell_tuple (field .annotation ):
147147 offset1 , offset2 = tuple_type .index_offset
148148 dct [field_name ] = (
149149 resolvers [row ].parse (data [index + offset1 ]),
@@ -176,11 +176,11 @@ def get_element(self, row: int, keyword: str, data: list[typing.Any], **kwargs:
176176 raise ValueError ()
177177
178178 def _repr_html_ (self ) -> str :
179- return self .table ._repr_html_ ()
179+ return self .table ._repr_html_ () # type: ignore
180180
181181
182- class CellTable (ElementTable ):
182+ class CellTable (ElementTable [ Any ] ):
183183 table_type = TableType .cell
184184
185- class RibTable (ElementTable ):
185+ class RibTable (ElementTable [ Any ] ):
186186 table_type = TableType .rib
0 commit comments