77
88import logging
99from abc import ABC , abstractmethod
10- from typing import Generic , Optional , Tuple , TypeVar
1110
1211import structlog
1312from power_grid_model import DatasetType
1716from power_grid_model_io .data_types import ExtraInfo
1817from power_grid_model_io .utils .auto_id import AutoID
1918
20- T = TypeVar ("T" )
2119
22-
23- class BaseConverter (Generic [T ], ABC ):
20+ class BaseConverter [T ](ABC ):
2421 """Abstract converter class"""
2522
2623 def __init__ (
2724 self ,
28- source : Optional [ BaseDataStore [T ]] = None ,
29- destination : Optional [ BaseDataStore [T ]] = None ,
25+ source : BaseDataStore [T ] | None = None ,
26+ destination : BaseDataStore [T ] | None = None ,
3027 log_level : int = logging .INFO ,
3128 ):
3229 """
@@ -39,9 +36,7 @@ def __init__(
3936 self ._destination = destination
4037 self ._auto_id = AutoID ()
4138
42- def load_input_data (
43- self , data : Optional [T ] = None , make_extra_info : bool = True
44- ) -> Tuple [SingleDataset , ExtraInfo ]:
39+ def load_input_data (self , data : T | None = None , make_extra_info : bool = True ) -> tuple [SingleDataset , ExtraInfo ]:
4540 """Load input data and extra info
4641
4742 Note: You shouldn't have to overwrite this method. Check _parse_data() instead.
@@ -62,70 +57,70 @@ def load_input_data(
6257 raise TypeError ("Input data can not be batch data" )
6358 return parsed_data , extra_info
6459
65- def load_update_data (self , data : Optional [ T ] = None ) -> Dataset :
60+ def load_update_data (self , data : T | None = None ) -> Dataset :
6661 """Load update data
6762
6863 Note: You shouldn't have to overwrite this method. Check _parse_data() instead.
6964
7065 Args:
71- data: Optional[T] : (Default value = None)
66+ data: T | None : (Default value = None)
7267
7368 Returns:
7469
7570 """
7671 data = self ._load_data (data )
7772 return self ._parse_data (data = data , data_type = DatasetType .update , extra_info = None )
7873
79- def load_sym_output_data (self , data : Optional [ T ] = None ) -> Dataset :
74+ def load_sym_output_data (self , data : T | None = None ) -> Dataset :
8075 """Load symmetric output data
8176
8277 Note: You shouldn't have to overwrite this method. Check _parse_data() instead.
8378
8479 Args:
85- data: Optional[T] : (Default value = None)
80+ data: T | None : (Default value = None)
8681
8782 Returns:
8883
8984 """
9085 data = self ._load_data (data )
9186 return self ._parse_data (data = data , data_type = DatasetType .sym_output , extra_info = None )
9287
93- def load_asym_output_data (self , data : Optional [ T ] = None ) -> Dataset :
88+ def load_asym_output_data (self , data : T | None = None ) -> Dataset :
9489 """Load asymmetric output data
9590
9691 Note: You shouldn't have to overwrite this method. Check _parse_data() instead.
9792
9893 Args:
99- data: Optional[T] : (Default value = None)
94+ data: T | None : (Default value = None)
10095
10196 Returns:
10297
10398 """
10499 data = self ._load_data (data )
105100 return self ._parse_data (data = data , data_type = DatasetType .asym_output , extra_info = None )
106101
107- def load_sc_output_data (self , data : Optional [ T ] = None ) -> Dataset :
102+ def load_sc_output_data (self , data : T | None = None ) -> Dataset :
108103 """Load sc output data
109104
110105 Note: You shouldn't have to overwrite this method. Check _parse_data() instead.
111106
112107 Args:
113- data: Optional[T] : (Default value = None)
108+ data: T | None : (Default value = None)
114109
115110 Returns:
116111
117112 """
118113 data = self ._load_data (data )
119114 return self ._parse_data (data = data , data_type = DatasetType .sc_output , extra_info = None )
120115
121- def convert (self , data : Dataset , extra_info : Optional [ ExtraInfo ] = None ) -> T :
116+ def convert (self , data : Dataset , extra_info : ExtraInfo | None = None ) -> T :
122117 """Convert input/update/(a)sym_output data and optionally extra info.
123118
124119 Note: You shouldn't have to overwrite this method. Check _serialize_data() instead.
125120
126121 Args:
127122 data: Dataset:
128- extra_info: Optional[ ExtraInfo] : (Default value = None)
123+ extra_info: ExtraInfo | None : (Default value = None)
129124
130125 Returns:
131126
@@ -135,17 +130,17 @@ def convert(self, data: Dataset, extra_info: Optional[ExtraInfo] = None) -> T:
135130 def save (
136131 self ,
137132 data : Dataset ,
138- extra_info : Optional [ ExtraInfo ] = None ,
139- destination : Optional [ BaseDataStore [T ]] = None ,
133+ extra_info : ExtraInfo | None = None ,
134+ destination : BaseDataStore [T ] | None = None ,
140135 ) -> None :
141136 """Save input/update/(a)sym_output data and optionally extra info.
142137
143138 Note: You shouldn't have to overwrite this method. Check _serialize_data() instead.
144139
145140 Args:
146141 data: Dataset:
147- extra_info: Optional[ ExtraInfo] : (Default value = None)
148- destination: Optional[ BaseDataStore[T]] : (Default value = None)
142+ extra_info: ExtraInfo | None : (Default value = None)
143+ destination: BaseDataStore[T] | None : (Default value = None)
149144
150145 Returns:
151146
@@ -177,17 +172,17 @@ def get_log_level(self) -> int:
177172 """
178173 return self ._logger .getEffectiveLevel ()
179174
180- def _load_data (self , data : Optional [ T ] ) -> T :
175+ def _load_data (self , data : T | None ) -> T :
181176 if data is not None :
182177 return data
183178 if self ._source is not None :
184179 return self ._source .load ()
185180 raise ValueError ("No data supplied!" )
186181
187182 @abstractmethod # pragma: nocover
188- def _parse_data (self , data : T , data_type : DatasetType , extra_info : Optional [ ExtraInfo ] ) -> Dataset :
183+ def _parse_data (self , data : T , data_type : DatasetType , extra_info : ExtraInfo | None ) -> Dataset :
189184 pass
190185
191186 @abstractmethod # pragma: nocover
192- def _serialize_data (self , data : Dataset , extra_info : Optional [ ExtraInfo ] ) -> T :
187+ def _serialize_data (self , data : Dataset , extra_info : ExtraInfo | None ) -> T :
193188 pass
0 commit comments