55import random
66import struct
77from datetime import datetime
8- from typing import Any , Callable
8+ from typing import Any , Callable , TypedDict
99
1010
1111WORD_SIZE = 16
@@ -96,7 +96,14 @@ def try_get(cls, key, config_part):
9696 raise RuntimeError (txt )
9797 return config_part [key ]
9898
99-
99+ ConfigType = TypedDict ('ConfigType' , # noqa: UP013
100+ {
101+ 'type' : int ,
102+ 'next' : int | None ,
103+ 'value' : int ,
104+ 'action' : str | None ,
105+ 'method' : Callable [..., None ]
106+ })
100107class Setup :
101108 """Setup simulator.
102109
@@ -107,41 +114,41 @@ def __init__(self, runtime):
107114 """Initialize."""
108115 self .runtime = runtime
109116 self .config = {}
110- self .config_types : dict [str , dict [ str , Any ] ] = {
117+ self .config_types : dict [str , ConfigType ] = {
111118 Label .type_bits : {
112- Label . type : CellType .BITS ,
113- Label . next : None ,
114- Label . value : 0 ,
115- Label . action : None ,
116- Label . method : self .handle_type_bits ,
119+ ' type' : CellType .BITS ,
120+ ' next' : None ,
121+ ' value' : 0 ,
122+ ' action' : None ,
123+ ' method' : self .handle_type_bits ,
117124 },
118125 Label .type_uint16 : {
119- Label . type : CellType .UINT16 ,
120- Label . next : None ,
121- Label . value : 0 ,
122- Label . action : None ,
123- Label . method : self .handle_type_uint16 ,
126+ ' type' : CellType .UINT16 ,
127+ ' next' : None ,
128+ ' value' : 0 ,
129+ ' action' : None ,
130+ ' method' : self .handle_type_uint16 ,
124131 },
125132 Label .type_uint32 : {
126- Label . type : CellType .UINT32 ,
127- Label . next : CellType .NEXT ,
128- Label . value : 0 ,
129- Label . action : None ,
130- Label . method : self .handle_type_uint32 ,
133+ ' type' : CellType .UINT32 ,
134+ ' next' : CellType .NEXT ,
135+ ' value' : 0 ,
136+ ' action' : None ,
137+ ' method' : self .handle_type_uint32 ,
131138 },
132139 Label .type_float32 : {
133- Label . type : CellType .FLOAT32 ,
134- Label . next : CellType .NEXT ,
135- Label . value : 0 ,
136- Label . action : None ,
137- Label . method : self .handle_type_float32 ,
140+ ' type' : CellType .FLOAT32 ,
141+ ' next' : CellType .NEXT ,
142+ ' value' : 0 ,
143+ ' action' : None ,
144+ ' method' : self .handle_type_float32 ,
138145 },
139146 Label .type_string : {
140- Label . type : CellType .STRING ,
141- Label . next : CellType .NEXT ,
142- Label . value : 0 ,
143- Label . action : None ,
144- Label . method : self .handle_type_string ,
147+ ' type' : CellType .STRING ,
148+ ' next' : CellType .NEXT ,
149+ ' value' : 0 ,
150+ ' action' : None ,
151+ ' method' : self .handle_type_string ,
145152 },
146153 }
147154
@@ -213,7 +220,7 @@ def handle_type_string(self, start, stop, value, action, action_kwargs):
213220 self .runtime .registers [start ].action = action
214221 self .runtime .registers [start ].action_kwargs = action_kwargs
215222
216- def handle_setup_section (self ):
223+ def handle_setup_section (self ) -> None :
217224 """Load setup section."""
218225 layout = Label .try_get (Label .setup , self .config )
219226 self .runtime .fc_offset = {key : 0 for key in range (25 )}
@@ -243,12 +250,12 @@ def handle_setup_section(self):
243250 defaults_value = Label .try_get (Label .value , defaults )
244251 defaults_action = Label .try_get (Label .action , defaults )
245252 for key , entry in self .config_types .items ():
246- entry [Label . value ] = Label .try_get (key , defaults_value )
253+ entry [' value' ] = Label .try_get (key , defaults_value )
247254 if (
248255 action := Label .try_get (key , defaults_action )
249256 ) not in self .runtime .action_name_to_id :
250257 raise RuntimeError (f"ERROR illegal action { key } in { defaults_action } " )
251- entry [Label . action ] = action
258+ entry [' action' ] = action
252259 del self .config [Label .setup ]
253260
254261 def handle_invalid_address (self ):
@@ -282,25 +289,25 @@ def handle_write_allowed(self):
282289 reg .access = True
283290 del self .config [Label .write ]
284291
285- def handle_types (self ):
292+ def handle_types (self ) -> None :
286293 """Handle the different types."""
287294 for section , type_entry in self .config_types .items ():
288295 layout = Label .try_get (section , self .config )
289296 for entry in layout :
290297 if not isinstance (entry , dict ):
291- entry = {Label . addr : entry }
292- regs = Label .try_get (Label . addr , entry )
298+ entry = {' addr' : entry }
299+ regs = Label .try_get (' addr' , entry )
293300 if not isinstance (regs , list ):
294301 regs = [regs , regs ]
295302 start = regs [0 ]
296303 if (stop := regs [1 ]) >= self .runtime .register_count :
297304 raise RuntimeError (f'Error "{ section } " { start } , { stop } illegal' )
298- type_entry [Label . method ](
305+ type_entry [' method' ](
299306 start ,
300307 stop + 1 ,
301- entry .get (Label .value , type_entry [Label . value ]),
308+ entry .get (Label .value , type_entry [' value' ]),
302309 self .runtime .action_name_to_id [
303- entry .get (Label . action , type_entry [Label . action ])
310+ entry .get (' action' , type_entry [' action' ])
304311 ],
305312 entry .get (Label .kwargs , None ),
306313 )
0 commit comments