Skip to content

Commit 9c62c8d

Browse files
committed
fix: Fix type hints for Python 3.9 as the | operator is not supported
1 parent 13ab6e0 commit 9c62c8d

5 files changed

Lines changed: 40 additions & 46 deletions

File tree

statemachine/io/__init__.py

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,37 @@
1111
from ..statemachine import StateMachine
1212
from ..transition_list import TransitionList
1313

14-
CallbacksType = str | Callable | List[str] | List[Callable]
15-
1614

1715
class TransitionDict(TypedDict, total=False):
1816
target: str
19-
event: str | None
17+
event: "str | None"
2018
internal: bool
2119
validators: bool
22-
cond: CallbacksType
23-
unless: CallbacksType
24-
on: CallbacksType
25-
before: CallbacksType
26-
after: CallbacksType
20+
cond: "str | Callable | List[str] | List[Callable]"
21+
unless: "str | Callable | List[str] | List[Callable]"
22+
on: "str | Callable | List[str] | List[Callable]"
23+
before: "str | Callable | List[str] | List[Callable]"
24+
after: "str | Callable | List[str] | List[Callable]"
2725

2826

29-
TransitionsDict = Dict[str | None, List[TransitionDict]]
27+
TransitionsDict = Dict["str | None", List[TransitionDict]]
3028

3129

3230
class StateDict(TypedDict, total=False):
3331
name: str
3432
value: Any
3533
initial: bool
3634
final: bool
37-
enter: CallbacksType
38-
exit: CallbacksType
35+
enter: "str | Callable | List[str] | List[Callable]"
36+
exit: "str | Callable | List[str] | List[Callable]"
3937

4038

4139
class StateWithTransitionsDict(StateDict, total=False):
4240
on: TransitionsDict
4341

4442

45-
StateOptions = StateDict | StateWithTransitionsDict
46-
47-
4843
def create_machine_class_from_definition(
49-
name: str, states: Mapping[str, StateOptions], **definition
44+
name: str, states: Mapping[str, "StateDict | StateWithTransitionsDict"], **definition
5045
) -> StateMachine: # noqa: C901
5146
"""
5247
Creates a StateMachine class from a dictionary definition, using the StateMachineMetaclass.

statemachine/io/scxml/actions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ParseTime:
3434
pattern = re.compile(r"(\d+)?(\.\d+)?(s|ms)")
3535

3636
@classmethod
37-
def parse_delay(cls, delay: str | None, delayexpr: str | None, **kwargs):
37+
def parse_delay(cls, delay: "str | None", delayexpr: "str | None", **kwargs):
3838
if delay:
3939
return cls.time_in_ms(delay)
4040
elif delayexpr:
@@ -377,7 +377,7 @@ def data_initializer(machine: StateMachine, **kwargs):
377377
return data_initializer
378378

379379

380-
def create_datamodel_action_callable(action: DataModel) -> Callable | None:
380+
def create_datamodel_action_callable(action: DataModel) -> "Callable | None":
381381
data_elements = [_create_dataitem_callable(item) for item in action.data]
382382
data_elements.extend([create_script_action_callable(script) for script in action.scripts])
383383

statemachine/io/scxml/parser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def parse_scxml(scxml_content: str) -> StateMachineDefinition:
6969
return definition
7070

7171

72-
def parse_datamodel(root: ET.Element) -> DataModel | None:
72+
def parse_datamodel(root: ET.Element) -> "DataModel | None":
7373
data_model = DataModel()
7474

7575
for datamodel_elem in root.findall(".//datamodel"):
@@ -95,7 +95,7 @@ def parse_datamodel(root: ET.Element) -> DataModel | None:
9595

9696
def parse_state(
9797
state_elem: ET.Element,
98-
initial_state: str | None,
98+
initial_state: "str | None",
9999
is_final: bool = False,
100100
is_parallel: bool = False,
101101
) -> State:

statemachine/io/scxml/processor.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from typing import Dict
44
from typing import List
55

6-
from .. import StateOptions
76
from .. import StateWithTransitionsDict
87
from .. import TransitionDict
98
from .. import TransitionsDict
@@ -33,7 +32,7 @@ def parse_scxml(self, sm_name: str, scxml_content: str):
3332
self.process_definition(definition, location=sm_name)
3433

3534
def process_definition(self, definition, location: str):
36-
states_dict: Dict[str, StateOptions] = {}
35+
states_dict: Dict[str, StateWithTransitionsDict] = {}
3736
for state_id, state in definition.states.items():
3837
state_dict = StateWithTransitionsDict()
3938
if state.initial:

statemachine/io/scxml/schema.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ class AssignAction(Action):
2727

2828
@dataclass
2929
class LogAction(Action):
30-
label: str | None
30+
label: "str | None"
3131
expr: str
3232

3333

3434
@dataclass
3535
class IfBranch(Action):
36-
cond: str | None
36+
cond: "str | None"
3737
actions: List[Action] = field(default_factory=list)
3838

3939
def append(self, action: Action):
@@ -49,36 +49,36 @@ class IfAction(Action):
4949
class ForeachAction(Action):
5050
array: str
5151
item: str
52-
index: str | None
52+
index: "str | None"
5353
content: ExecutableContent
5454

5555

5656
@dataclass
5757
class Param:
5858
name: str
59-
expr: str | None
60-
location: str | None = None
59+
expr: "str | None"
60+
location: "str | None" = None
6161

6262

6363
@dataclass
6464
class SendAction(Action):
65-
event: str | None = None
66-
eventexpr: str | None = None
67-
target: str | None = None
68-
type: str | None = None
69-
id: str | None = None
70-
idlocation: str | None = None
71-
delay: str | None = None
72-
delayexpr: str | None = None
73-
namelist: str | None = None
65+
event: "str | None" = None
66+
eventexpr: "str | None" = None
67+
target: "str | None" = None
68+
type: "str | None" = None
69+
id: "str | None" = None
70+
idlocation: "str | None" = None
71+
delay: "str | None" = None
72+
delayexpr: "str | None" = None
73+
namelist: "str | None" = None
7474
params: List[Param] = field(default_factory=list)
75-
content: str | None = None
75+
content: "str | None" = None
7676

7777

7878
@dataclass
7979
class CancelAction(Action):
80-
sendid: str | None = None
81-
sendidexpr: str | None = None
80+
sendid: "str | None" = None
81+
sendidexpr: "str | None" = None
8282

8383

8484
@dataclass
@@ -89,9 +89,9 @@ class ScriptAction(Action):
8989
@dataclass
9090
class Transition:
9191
target: str
92-
event: str | None = None
93-
cond: str | None = None
94-
on: ExecutableContent | None = None
92+
event: "str | None" = None
93+
cond: "str | None" = None
94+
on: "ExecutableContent | None" = None
9595

9696

9797
@dataclass
@@ -109,9 +109,9 @@ class State:
109109
@dataclass
110110
class DataItem:
111111
id: str
112-
src: str | None
113-
expr: str | None
114-
content: str | None
112+
src: "str | None"
113+
expr: "str | None"
114+
content: "str | None"
115115

116116

117117
@dataclass
@@ -123,5 +123,5 @@ class DataModel:
123123
@dataclass
124124
class StateMachineDefinition:
125125
states: Dict[str, State] = field(default_factory=dict)
126-
initial_state: str | None = None
127-
datamodel: DataModel | None = None
126+
initial_state: "str | None" = None
127+
datamodel: "DataModel | None" = None

0 commit comments

Comments
 (0)