11from copy import deepcopy
22from typing import Any
3+ from typing import TypeAlias
34
45from .callbacks import Callbacks
56from .exceptions import StateMachineError
910
1011
1112class NestedStateFactory (type ):
12- def __new__ (cls , classname , bases , attrs , name = None , initial = False , parallel = False ):
13+ def __new__ ( # type: ignore [misc]
14+ cls , classname , bases , attrs , name = None , initial = False , parallel = False
15+ ) -> "State" :
1316
1417 if not bases :
15- return super ().__new__ (cls , classname , bases , attrs )
18+ return super ().__new__ (cls , classname , bases , attrs ) # type: ignore [return-value]
1619
1720 substates = []
1821 for key , value in attrs .items ():
19- if not isinstance (value , State ):
20- continue
21- value ._set_id (key )
22- substates .append (value )
22+ if isinstance (value , State ):
23+ value ._set_id (key )
24+ substates .append (value )
25+ if isinstance (value , TransitionList ):
26+ value .add_event (key )
2327
24- return State (name , initial = initial , parallel = parallel , substates = substates )
28+ return State (name = name , initial = initial , parallel = parallel , substates = substates )
2529
2630
2731class NestedStateBuilder (metaclass = NestedStateFactory ):
@@ -107,28 +111,28 @@ class State:
107111
108112 """
109113
110- Builder = NestedStateBuilder
114+ Builder : TypeAlias = NestedStateBuilder
111115
112116 def __init__ (
113117 self ,
114118 name : str = "" ,
115119 value : Any = None ,
116120 initial : bool = False ,
117121 final : bool = False ,
118- parallel = False ,
119- substates = None ,
122+ parallel : bool = False ,
123+ substates : Any = None ,
120124 enter : Any = None ,
121125 exit : Any = None ,
122126 ):
123127 self .name = name
124128 self .value = value
125129 self .parallel = parallel
126- self .parent : "State" = None
127130 self .substates = substates or []
128131 self ._initial = initial
129132 self ._final = final
130133 self ._id : str = ""
131134 self ._storage : str = ""
135+ self .parent : "State" = None
132136 self .transitions = TransitionList ()
133137 self .enter = Callbacks ().add (enter )
134138 self .exit = Callbacks ().add (exit )
@@ -137,6 +141,7 @@ def __init__(
137141 def _init_substates (self ):
138142 for substate in self .substates :
139143 substate .parent = self
144+ setattr (self , substate .id , substate )
140145
141146 def __eq__ (self , other ):
142147 return (
0 commit comments