11from typing import TYPE_CHECKING
22from typing import Any
33from typing import Dict
4+ from typing import TypeAlias
45from weakref import ref
56
67from .callbacks import CallbackMetaList
1415
1516
1617class NestedStateFactory (type ):
17- def __new__ (cls , classname , bases , attrs , name = None , initial = False , parallel = False ):
18+ def __new__ ( # type: ignore [misc]
19+ cls , classname , bases , attrs , name = None , initial = False , parallel = False
20+ ) -> "State" :
1821
1922 if not bases :
20- return super ().__new__ (cls , classname , bases , attrs )
23+ return super ().__new__ (cls , classname , bases , attrs ) # type: ignore [return-value]
2124
2225 substates = []
2326 for key , value in attrs .items ():
24- if not isinstance (value , State ):
25- continue
26- value ._set_id (key )
27- substates .append (value )
27+ if isinstance (value , State ):
28+ value ._set_id (key )
29+ substates .append (value )
30+ if isinstance (value , TransitionList ):
31+ value .add_event (key )
2832
29- return State (name , initial = initial , parallel = parallel , substates = substates )
33+ return State (name = name , initial = initial , parallel = parallel , substates = substates )
3034
3135
3236class NestedStateBuilder (metaclass = NestedStateFactory ):
@@ -112,27 +116,27 @@ class State:
112116
113117 """
114118
115- Builder = NestedStateBuilder
119+ Builder : TypeAlias = NestedStateBuilder
116120
117121 def __init__ (
118122 self ,
119123 name : str = "" ,
120124 value : Any = None ,
121125 initial : bool = False ,
122126 final : bool = False ,
123- parallel = False ,
124- substates = None ,
127+ parallel : bool = False ,
128+ substates : Any = None ,
125129 enter : Any = None ,
126130 exit : Any = None ,
127131 ):
128132 self .name = name
129133 self .value = value
130134 self .parallel = parallel
131- self .parent : "State" = None
132135 self .substates = substates or []
133136 self ._initial = initial
134137 self ._final = final
135138 self ._id : str = ""
139+ self .parent : "State" = None
136140 self .transitions = TransitionList ()
137141 self .enter = CallbackMetaList ().add (enter )
138142 self .exit = CallbackMetaList ().add (exit )
@@ -141,6 +145,7 @@ def __init__(
141145 def _init_substates (self ):
142146 for substate in self .substates :
143147 substate .parent = self
148+ setattr (self , substate .id , substate )
144149
145150 def __eq__ (self , other ):
146151 return (
0 commit comments