python-statemachine 3.2.1__tar.gz → 3.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/pages.yml +4 -4
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/python-package.yml +9 -10
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/release.yml +6 -8
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.pre-commit-config.yaml +1 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/AGENTS.md +11 -4
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/PKG-INFO +7 -6
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/README.md +4 -4
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/async.md +20 -7
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/conf.py +2 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/contributing.md +83 -49
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/diagram.md +44 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/error_handling.md +96 -3
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/events.md +65 -6
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/guards.md +1 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/how-to/coming_from_state_pattern.md +3 -6
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/how-to/coming_from_transitions.md +18 -11
- python_statemachine-3.2.2/docs/images/readme_trafficlightmachine.png +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/installation.md +1 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/integrations.md +8 -7
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/security.md +15 -12
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/processing_model.md +42 -5
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.1.md +19 -13
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.0.0.md +0 -4
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.2.0.md +7 -4
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.0.md +3 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.4.0.md +2 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.5.0.md +4 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.1.0.md +4 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.2.0.md +2 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.2.1.md +2 -2
- python_statemachine-3.2.2/docs/releases/3.2.2.md +777 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/index.md +1 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/upgrade_2x_to_3.md +21 -21
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/statechart.md +32 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/states.md +5 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/validations.md +42 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/pyproject.toml +16 -15
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/__init__.py +1 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/callbacks.py +11 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/__init__.py +15 -6
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/formatter.py +4 -2
- python_statemachine-3.2.2/statemachine/contrib/diagram/graphviz.py +66 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/sphinx_ext.py +28 -7
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/dispatcher.py +3 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/engines/async_.py +209 -177
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/engines/base.py +245 -244
- python_statemachine-3.2.2/statemachine/engines/sync.py +319 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/event.py +29 -10
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/event_data.py +19 -3
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/events.py +5 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/factory.py +126 -29
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/actions.py +4 -2
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/schemas/statechart.schema.json +8 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/en/LC_MESSAGES/statemachine.po +58 -17
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/hi_IN/LC_MESSAGES/statemachine.po +66 -17
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/pt_BR/LC_MESSAGES/statemachine.po +66 -17
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/zh_CN/LC_MESSAGES/statemachine.po +60 -17
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/registry.py +6 -1
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/spec_parser.py +95 -19
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/state.py +45 -6
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/statemachine.py +42 -19
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/conftest.py +37 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_security.py +27 -12
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_validation.py +13 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scrape_images.py +2 -2
- python_statemachine-3.2.2/tests/scxml/test_parallel_regions.py +39 -0
- python_statemachine-3.2.2/tests/test_async_futures.py +1094 -0
- python_statemachine-3.2.2/tests/test_cancel_event.py +358 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_contrib_diagram.py +195 -6
- python_statemachine-3.2.2/tests/test_contrib_diagram_graphviz.py +122 -0
- python_statemachine-3.2.2/tests/test_event_ordering.py +109 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_events.py +44 -0
- python_statemachine-3.2.2/tests/test_expanded_event_ids.py +217 -0
- python_statemachine-3.2.2/tests/test_internal_triggers.py +461 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_invoke.py +21 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_spec_parser_values.py +46 -4
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_state.py +9 -0
- python_statemachine-3.2.2/tests/test_statechart_compound.py +1294 -0
- python_statemachine-3.2.2/tests/test_statechart_delayed.py +215 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_parallel.py +47 -7
- python_statemachine-3.2.2/uv.lock +2742 -0
- python_statemachine-3.2.1/docs/images/readme_trafficlightmachine.png +0 -0
- python_statemachine-3.2.1/statemachine/engines/sync.py +0 -203
- python_statemachine-3.2.1/tests/test_async_futures.py +0 -341
- python_statemachine-3.2.1/tests/test_statechart_compound.py +0 -304
- python_statemachine-3.2.1/tests/test_statechart_delayed.py +0 -100
- python_statemachine-3.2.1/uv.lock +0 -2343
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.git-blame-ignore-revs +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/FUNDING.yml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/ISSUE_TEMPLATE.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.gitignore +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.readthedocs.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/CLAUDE.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/LICENSE +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/conftest.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/contributing.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/_static/custom_machine.css +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/actions.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/api.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/authors.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/behaviour.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/concepts.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/_oc_machine_processing.svg +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/internal_transition_sc.png +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/lab_approval_machine_accepted.png +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/oc_machine_processing.svg +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/python-statemachine.png +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/test_state_machine_internal.png +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/traffic_light_machine.png +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/index.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/invoke.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/formats.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/index.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/json_schema.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/listeners.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/models.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.1.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.2.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.3.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.4.2.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.5.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.5.1.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.6.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.6.1.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.6.2.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.7.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.7.1.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.8.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.9.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.2.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.3.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.1.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.1.1.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.1.2.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.1.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.2.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.3.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.4.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.5.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.6.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.6.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.0.0.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.1.1.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.1.2.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/timeout.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/transitions.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/tutorial.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/weighted_transitions.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/configuration.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/__main__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/extract.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/model.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/dot.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/mermaid.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/table.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/timeout.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/weighted.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/engines/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/exceptions.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/graph.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/i18n.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/invoke.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/builder.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/class_factory.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/evaluators.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/interpreter.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/invoke.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/json/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/json/reader.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/loader.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/model.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/native.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/ports.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/scxml/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/scxml/processor.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/scxml/reader.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/system_variables.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/validation.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/yaml/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/yaml/reader.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/mixins.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/model.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/orderedset.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/py.typed +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/signature.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/states.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/transition.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/transition_list.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/transition_mixin.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/utils.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/app.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/core/__init__,.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/core/settings.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/core/wsgi.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/manage.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/apps.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/models.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/statemachines.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/tests.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/README.rst +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/ai_shell_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/air_conditioner_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/all_actions_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/async_guess_the_number_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/async_without_loop_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/enum_campaign_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/guess_the_number_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/lor_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/order_control_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/order_control_rich_model_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/persistent_model_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/recursive_event_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/reusing_transitions_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/sqlite_persistent_model_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_cleanup_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_compound_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_delayed_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_error_handling_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_eventless_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_history_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_in_condition_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_parallel_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/traffic_light_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/user_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/weighted_idle_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/helpers.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/order_pipeline.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/order_pipeline.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/telemetry.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/telemetry.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.json +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.yaml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_format_parity.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_guards_parity.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_interpreter.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_loader.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_model.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_native.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_native_behavior.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_native_invoke.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_ports.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_readers.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey_two_compounds.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey_with_finals.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/moria_expedition.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/moria_expedition_with_escape.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/quest_for_erebor.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/shire_to_rivendell.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/destroy_the_ring.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/destroy_the_ring_simple.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/nested_quest_donedata.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_done_convention.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_explicit_id.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_multi_word.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_with_event.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_convention_event.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_convention_transition_list.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_action_sc.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_action_sm_with_flag.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_after_sc.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_error_handler_sc.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_guard_sc.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_guard_sm.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_on_enter_sc.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/auto_advance.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/beacon_chain.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/beacon_chain_lighting.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/coordinated_advance.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption_with_bear_ring.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption_with_tick.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/deep_memory_of_moria.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality_default_gollum.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality_with_default.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/shallow_moria.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/combined_guard.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/descendant_check.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/eventless_in.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/fellowship.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/fellowship_coordination.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/gate_of_moria.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/session.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/session_with_done_state.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/two_towers.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/war_of_the_ring.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/war_with_exit.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_actions.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_compound.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_deep_history.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_guards.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_history.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_internal.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_parallel.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_parallel_compound.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_self_transition.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_simple.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/transition_from_any.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/tutorial_coffee_order.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/multi_validator.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/order_validation.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/order_validation_no_error_events.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/validator_fallthrough.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/validator_with_cond.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/validator_with_error_transition.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine_with_validator.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine_with_values.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/reverse_traffic_light.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/models.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/_harness.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/conftest.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/test_microwave.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/test_scxml_cases.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/LICENSE +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test144.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test145.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test147.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test148.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test149.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test150.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test151.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test152.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test153.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test155.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test156.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test158.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test159.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test172.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test173.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test174.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test175.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test176.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test179.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test183.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test185.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test186.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test187.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test189.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test190.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test191.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test192.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test194.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test198.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test199.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test200.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test205.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test207.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test208.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test210.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test215.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test216.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test216sub1.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test220.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test223.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test224.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test225.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test226.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test226sub1.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test228.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test229.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test232.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test233.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test234.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test235.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test236.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test237.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test239.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test239sub1.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test240.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test241.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test242.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test242sub1.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test243.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test244.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test245.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test247.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test252.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test253.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test276.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test276sub1.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test277.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test279.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test280.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test286.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test287.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test294.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test298.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test302.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test303.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test304.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test309.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test310.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test311.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test312.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test318.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test319.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test321.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test322.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test323.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test324.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test325.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test326.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test329.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test330.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test331.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test332.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test333.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test335.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test336.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test337.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test338.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test339.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test342.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test343.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test344.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test346.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test347.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test348.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test349.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test350.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test351.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test352.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test354.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test355.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test364.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test372.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test375.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test376.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test377.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test378.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test387.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test388.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test396.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test399.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test401.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test402.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403a.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403b.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403c.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test404.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test405.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test406.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test407.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test409.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test411.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test412.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test413.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test416.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test417.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test419.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test421.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test422.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test423.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test487.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test488.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test495.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test496.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test500.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test501.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test503.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test504.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test505.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test506.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test521.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test525.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test527.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test528.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test529.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test530.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test533.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test550.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test551.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test552.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test552.txt +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test553.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test554.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test570.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test576.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test579.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test580.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test193.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test201.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test278.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test444.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test445.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test446.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test446.txt +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test448.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test449.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test451.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test452.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test453.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test456.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test457.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test459.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test460.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test509.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test510.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test518.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test519.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test520.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test522.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test531.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test532.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test534.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test557.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test557.txt +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test558.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test558.txt +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test560.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test561.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test562.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test567.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test569.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test577.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test578.scxml +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_actions.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_api_contract.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_async.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_callbacks.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_callbacks_isolation.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_class_listeners.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_conditions_algebra.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_configuration.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_contrib_timeout.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_copy.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_dispatcher.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_error_execution.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_examples.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_fellowship_quest.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_io.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_listener.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_mermaid_renderer.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_mixins.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_mock_compatibility.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_multiple_destinations.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_optional_pydot.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_profiling.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_registry.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_rtc.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_scxml_datamodel.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_scxml_units.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_signature.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_signature_positional_only.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_spec_parser.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_state_callbacks.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_donedata.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_error.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_eventless.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_history.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_in_condition.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine_bounded_transitions.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine_compat.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine_inheritance.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_threading.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_transition_list.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_transition_table.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_transitions.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_translation_names.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_validators.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_weighted_transitions.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/__init__.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/issue308.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/issue384_multiple_observers.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/issue449.md +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/test_issue434.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/test_issue480.py +0 -0
- {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/test_issue509.py +0 -0
|
@@ -6,7 +6,7 @@ name: pages
|
|
|
6
6
|
|
|
7
7
|
on:
|
|
8
8
|
push:
|
|
9
|
-
branches: [
|
|
9
|
+
branches: [main]
|
|
10
10
|
paths:
|
|
11
11
|
- statemachine/io/schemas/statechart.schema.json
|
|
12
12
|
- .github/workflows/pages.yml
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
name: github-pages
|
|
32
32
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
33
33
|
steps:
|
|
34
|
-
- uses: actions/checkout@
|
|
34
|
+
- uses: actions/checkout@v7
|
|
35
35
|
- name: Assemble site
|
|
36
36
|
run: |
|
|
37
37
|
mkdir -p _site/schemas/statechart
|
|
@@ -44,8 +44,8 @@ jobs:
|
|
|
44
44
|
<p>See the <a href="schemas/statechart/v1.json">statechart JSON Schema</a> or the
|
|
45
45
|
<a href="https://python-statemachine.readthedocs.io/">documentation</a>.</p>
|
|
46
46
|
HTML
|
|
47
|
-
- uses: actions/upload-pages-artifact@
|
|
47
|
+
- uses: actions/upload-pages-artifact@v5
|
|
48
48
|
with:
|
|
49
49
|
path: _site
|
|
50
50
|
- id: deployment
|
|
51
|
-
uses: actions/deploy-pages@
|
|
51
|
+
uses: actions/deploy-pages@v5
|
{python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/python-package.yml
RENAMED
|
@@ -5,9 +5,9 @@ name: Python checks
|
|
|
5
5
|
|
|
6
6
|
on:
|
|
7
7
|
push:
|
|
8
|
-
branches: [ "
|
|
8
|
+
branches: [ "main", "release/**" ]
|
|
9
9
|
pull_request:
|
|
10
|
-
branches: [ "
|
|
10
|
+
branches: [ "main" ]
|
|
11
11
|
|
|
12
12
|
permissions:
|
|
13
13
|
contents: read
|
|
@@ -18,19 +18,18 @@ jobs:
|
|
|
18
18
|
strategy:
|
|
19
19
|
fail-fast: false
|
|
20
20
|
matrix:
|
|
21
|
-
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
21
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
|
|
22
22
|
|
|
23
23
|
steps:
|
|
24
|
-
- uses: actions/checkout@
|
|
25
|
-
- run: git fetch origin develop
|
|
24
|
+
- uses: actions/checkout@v7
|
|
26
25
|
- name: Set up Python ${{ matrix.python-version }}
|
|
27
|
-
uses: actions/setup-python@
|
|
26
|
+
uses: actions/setup-python@v7
|
|
28
27
|
with:
|
|
29
28
|
python-version: ${{ matrix.python-version }}
|
|
30
29
|
- name: Setup Graphviz
|
|
31
30
|
uses: ts-graphviz/setup-graphviz@v2
|
|
32
31
|
- name: Install uv
|
|
33
|
-
uses: astral-sh/setup-uv@
|
|
32
|
+
uses: astral-sh/setup-uv@v10.2.0
|
|
34
33
|
with:
|
|
35
34
|
enable-cache: true
|
|
36
35
|
cache-suffix: "python${{ matrix.python-version }}"
|
|
@@ -40,7 +39,7 @@ jobs:
|
|
|
40
39
|
# run ruff
|
|
41
40
|
#----------------------------------------------
|
|
42
41
|
- name: Linter with ruff
|
|
43
|
-
if: matrix.python-version == 3.
|
|
42
|
+
if: matrix.python-version == 3.15
|
|
44
43
|
run: |
|
|
45
44
|
uv run ruff check .
|
|
46
45
|
uv run ruff format --check .
|
|
@@ -55,8 +54,8 @@ jobs:
|
|
|
55
54
|
# upload coverage
|
|
56
55
|
#----------------------------------------------
|
|
57
56
|
- name: Upload coverage to Codecov
|
|
58
|
-
uses: codecov/codecov-action@
|
|
59
|
-
if: matrix.python-version == 3.
|
|
57
|
+
uses: codecov/codecov-action@v7
|
|
58
|
+
if: matrix.python-version == 3.15
|
|
60
59
|
with:
|
|
61
60
|
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
|
|
62
61
|
directory: .
|
|
@@ -11,20 +11,18 @@ jobs:
|
|
|
11
11
|
permissions:
|
|
12
12
|
id-token: write
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
15
|
-
|
|
16
|
-
- run: git fetch origin develop
|
|
14
|
+
- uses: actions/checkout@v7
|
|
17
15
|
|
|
18
16
|
- name: Setup Python
|
|
19
|
-
uses: actions/setup-python@
|
|
17
|
+
uses: actions/setup-python@v7
|
|
20
18
|
with:
|
|
21
|
-
python-version: '3.
|
|
19
|
+
python-version: '3.15'
|
|
22
20
|
|
|
23
21
|
- name: Setup Graphviz
|
|
24
22
|
uses: ts-graphviz/setup-graphviz@v2
|
|
25
23
|
|
|
26
24
|
- name: Install uv
|
|
27
|
-
uses: astral-sh/setup-uv@
|
|
25
|
+
uses: astral-sh/setup-uv@v10.2.0
|
|
28
26
|
with:
|
|
29
27
|
enable-cache: true
|
|
30
28
|
|
|
@@ -40,7 +38,7 @@ jobs:
|
|
|
40
38
|
uv build
|
|
41
39
|
|
|
42
40
|
- name: Upload dists
|
|
43
|
-
uses: actions/upload-artifact@
|
|
41
|
+
uses: actions/upload-artifact@v7
|
|
44
42
|
with:
|
|
45
43
|
name: release-dists
|
|
46
44
|
path: dist/
|
|
@@ -59,7 +57,7 @@ jobs:
|
|
|
59
57
|
|
|
60
58
|
steps:
|
|
61
59
|
- name: Retrieve release distributions
|
|
62
|
-
uses: actions/download-artifact@
|
|
60
|
+
uses: actions/download-artifact@v8
|
|
63
61
|
with:
|
|
64
62
|
name: release-dists
|
|
65
63
|
path: dist/
|
|
@@ -39,7 +39,14 @@ The engine follows the SCXML run-to-completion (RTC) model with two processing l
|
|
|
39
39
|
### Event queues
|
|
40
40
|
|
|
41
41
|
- `send()` → **external queue** (processed after current macrostep ends).
|
|
42
|
-
- `raise_()` → **internal queue** (processed
|
|
42
|
+
- `raise_()`, `send(internal=True)`, `Event(internal=True)` → **internal queue** (processed
|
|
43
|
+
within the current macrostep, before external events), but only when raised while the
|
|
44
|
+
machine runs a step in the same thread or task (`_running_engine` in `engines/base.py`, a
|
|
45
|
+
`ContextVar` so it is right for threads and coroutines alike). From outside a step there
|
|
46
|
+
is no macrostep to join: the trigger goes to the external queue, so its caller gets the
|
|
47
|
+
result, the exception or `TransitionNotAllowed`.
|
|
48
|
+
- `delay` and `internal` together raise `InvalidDefinition`: a step takes no time.
|
|
49
|
+
- Each external event is followed by its macrostep before the next external event is taken.
|
|
43
50
|
|
|
44
51
|
### Error handling (`catch_errors_as_events`)
|
|
45
52
|
|
|
@@ -296,9 +303,9 @@ enforced, so when you add or change native vocabulary:
|
|
|
296
303
|
|
|
297
304
|
## Git workflow
|
|
298
305
|
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
306
|
+
- Trunk based development: `main` is the only long-lived branch, PRs target `main`
|
|
307
|
+
- Releases are tags `vX.Y.Z` on `main`; the `latest` tag moves to every release
|
|
308
|
+
- Hotfixes: `release/X.Y.x` branch cut from the tag, fixes cherry-picked from `main`
|
|
302
309
|
- Signed commits preferred (`git commit -s`)
|
|
303
310
|
- Use [Conventional Commits](https://www.conventionalcommits.org/) messages
|
|
304
311
|
(e.g., `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`, `perf:`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: python-statemachine
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.2
|
|
4
4
|
Summary: Python Finite State Machines made easy.
|
|
5
5
|
Project-URL: homepage, https://github.com/fgmacedo/python-statemachine
|
|
6
6
|
Author-email: Fernando Macedo <fgmacedo@gmail.com>
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
22
|
Classifier: Topic :: Home Automation
|
|
22
23
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
24
|
Requires-Python: >=3.10
|
|
@@ -37,15 +38,15 @@ Description-Content-Type: text/markdown
|
|
|
37
38
|
[](https://pypi.python.org/pypi/python-statemachine)
|
|
38
39
|
[](https://pepy.tech/project/python-statemachine)
|
|
39
40
|
[](https://pypi.python.org/pypi/python-statemachine)
|
|
40
|
-
[](https://codecov.io/gh/fgmacedo/python-statemachine)
|
|
41
42
|
[](https://python-statemachine.readthedocs.io/en/latest/?badge=latest)
|
|
42
|
-
[](https://github.com/fgmacedo/python-statemachine/compare/latest...main)
|
|
43
44
|
|
|
44
45
|
Expressive [statecharts](https://statecharts.dev/) and [FSMs](https://en.wikipedia.org/wiki/Finite-state_machine) for modern Python.
|
|
45
46
|
|
|
46
47
|
<div align="center">
|
|
47
48
|
|
|
48
|
-

|
|
49
50
|
|
|
50
51
|
</div>
|
|
51
52
|
|
|
@@ -128,7 +129,7 @@ Generate a diagram or get a text representation with f-strings:
|
|
|
128
129
|
sm._graph().write_png("traffic_light.png")
|
|
129
130
|
```
|
|
130
131
|
|
|
131
|
-

|
|
132
133
|
|
|
133
134
|
Parameters are injected into callbacks automatically — the library inspects the
|
|
134
135
|
signature and provides only the arguments each callback needs:
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
[](https://pypi.python.org/pypi/python-statemachine)
|
|
4
4
|
[](https://pepy.tech/project/python-statemachine)
|
|
5
5
|
[](https://pypi.python.org/pypi/python-statemachine)
|
|
6
|
-
[](https://codecov.io/gh/fgmacedo/python-statemachine)
|
|
7
7
|
[](https://python-statemachine.readthedocs.io/en/latest/?badge=latest)
|
|
8
|
-
[](https://github.com/fgmacedo/python-statemachine/compare/latest...main)
|
|
9
9
|
|
|
10
10
|
Expressive [statecharts](https://statecharts.dev/) and [FSMs](https://en.wikipedia.org/wiki/Finite-state_machine) for modern Python.
|
|
11
11
|
|
|
12
12
|
<div align="center">
|
|
13
13
|
|
|
14
|
-

|
|
15
15
|
|
|
16
16
|
</div>
|
|
17
17
|
|
|
@@ -94,7 +94,7 @@ Generate a diagram or get a text representation with f-strings:
|
|
|
94
94
|
sm._graph().write_png("traffic_light.png")
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-

|
|
98
98
|
|
|
99
99
|
Parameters are injected into callbacks automatically — the library inspects the
|
|
100
100
|
signature and provides only the arguments each callback needs:
|
|
@@ -152,19 +152,32 @@ processing loop at a time. The sync engine does not support this pattern.
|
|
|
152
152
|
Under the hood, the async engine attaches an `asyncio.Future` to each
|
|
153
153
|
externally enqueued event. The coroutine that acquires the processing lock
|
|
154
154
|
resolves each event's future as it processes the queue. Callers that didn't
|
|
155
|
-
acquire the lock
|
|
155
|
+
acquire the lock `await` their future, or the release of the lock, to take
|
|
156
|
+
the loop over if the coroutine holding it was cancelled.
|
|
156
157
|
|
|
157
158
|
```{note}
|
|
158
|
-
Futures are
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
Futures are created for every event sent from outside the processing loop,
|
|
160
|
+
including one declared `internal=True`, which goes to the external queue
|
|
161
|
+
when there is no macrostep to join. Events triggered from within callbacks
|
|
162
|
+
(via `send()` or `raise_()`) follow the {ref}`run-to-completion <rtc-model>`
|
|
163
|
+
model: they are enqueued and processed by the running loop.
|
|
162
164
|
```
|
|
163
165
|
|
|
164
166
|
If an exception occurs during processing (with `catch_errors_as_events=False`),
|
|
165
|
-
the exception is routed to the caller whose event
|
|
167
|
+
the exception is routed to the caller whose event raised it. Other callers
|
|
166
168
|
whose events were still pending will also receive the exception, since the
|
|
167
|
-
processing loop clears the queue on failure.
|
|
169
|
+
processing loop clears the queue on failure. A caller is answered once the
|
|
170
|
+
macrostep of its event ends, so an exception raised by the internal events or
|
|
171
|
+
eventless transitions that follow its event reaches it too. When no coroutine
|
|
172
|
+
awaits that event, because a callback sent it or its caller was cancelled while
|
|
173
|
+
awaiting it, the exception goes to the coroutine running the processing loop.
|
|
174
|
+
|
|
175
|
+
If the coroutine running the processing loop is cancelled, only that coroutine
|
|
176
|
+
stops: a coroutine awaiting a queued event takes the loop over, and returns
|
|
177
|
+
once the queue is empty. With no coroutine waiting, the events left in the
|
|
178
|
+
queue run at the next `send()`. The caller of the event being processed when
|
|
179
|
+
the cancellation hit gets a `StateMachineError`, since its callbacks were
|
|
180
|
+
interrupted.
|
|
168
181
|
|
|
169
182
|
|
|
170
183
|
(syncengine)=
|
|
@@ -174,7 +174,7 @@ html_theme_options = {
|
|
|
174
174
|
"navigation_with_keys": True,
|
|
175
175
|
"top_of_page_buttons": ["view", "edit"],
|
|
176
176
|
"source_repository": "https://github.com/fgmacedo/python-statemachine/",
|
|
177
|
-
# "source_branch": "
|
|
177
|
+
# "source_branch": "main",
|
|
178
178
|
"source_directory": "docs/",
|
|
179
179
|
}
|
|
180
180
|
|
|
@@ -271,7 +271,7 @@ html_context = {
|
|
|
271
271
|
"display_github": True, # Integrate GitHub
|
|
272
272
|
"github_user": "fgmacedo", # Username
|
|
273
273
|
"github_repo": "python-statemachine", # Repo name
|
|
274
|
-
"github_version": "
|
|
274
|
+
"github_version": "main", # Version
|
|
275
275
|
"conf_py_path": "/docs/", # Path in the checkout to the docs root
|
|
276
276
|
}
|
|
277
277
|
|
|
@@ -104,9 +104,11 @@ Ready to contribute? Here's how to set up `python-statemachine` for local develo
|
|
|
104
104
|
|
|
105
105
|
pre-commit install
|
|
106
106
|
|
|
107
|
-
3. Create a branch for local development
|
|
107
|
+
3. Create a branch for local development, starting from an up-to-date `main`:
|
|
108
108
|
|
|
109
|
-
git
|
|
109
|
+
git switch main
|
|
110
|
+
git pull --ff-only origin main
|
|
111
|
+
git switch -c <name-of-your-bugfix-or-feature>
|
|
110
112
|
|
|
111
113
|
4. Make changes to the code.
|
|
112
114
|
|
|
@@ -144,8 +146,9 @@ Ready to contribute? Here's how to set up `python-statemachine` for local develo
|
|
|
144
146
|
git commit -s -m "Your detailed description of your changes."
|
|
145
147
|
git push origin name-of-your-bugfix-or-feature
|
|
146
148
|
|
|
147
|
-
1. Create a pull request on the original repository
|
|
148
|
-
merged. Be sure to follow the project's code of conduct
|
|
149
|
+
1. Create a pull request on the original repository, targeting the `main` branch, for your
|
|
150
|
+
changes to be reviewed and potentially merged. Be sure to follow the project's code of conduct
|
|
151
|
+
and contributing guidelines.
|
|
149
152
|
|
|
150
153
|
1. Use `exit` to leave the virtual environment.
|
|
151
154
|
|
|
@@ -162,44 +165,40 @@ Before you submit a pull request, check that it meets these guidelines:
|
|
|
162
165
|
|
|
163
166
|
## Releasing a New Version
|
|
164
167
|
|
|
165
|
-
This project
|
|
166
|
-
|
|
168
|
+
This project follows [trunk based development](https://trunkbaseddevelopment.com/): `main` is
|
|
169
|
+
the only long-lived branch and every release is a tag on it. Pushing a `vX.Y.Z` tag triggers
|
|
170
|
+
the GitHub Actions workflow that publishes to PyPI.
|
|
167
171
|
|
|
168
172
|
### Prerequisites
|
|
169
173
|
|
|
170
|
-
- You must be on the `
|
|
171
|
-
- `git-flow` must be installed and initialized:
|
|
174
|
+
- You must be on the `main` branch with a clean working tree, up to date with `origin/main`:
|
|
172
175
|
|
|
173
176
|
```shell
|
|
174
|
-
|
|
175
|
-
git
|
|
177
|
+
git switch main
|
|
178
|
+
git pull --ff-only origin main
|
|
176
179
|
```
|
|
177
180
|
|
|
178
|
-
- All changes intended for the release must already be merged into `
|
|
181
|
+
- All changes intended for the release must already be merged into `main`.
|
|
179
182
|
|
|
180
183
|
### Step-by-step release process
|
|
181
184
|
|
|
182
185
|
The following steps use version `X.Y.Z` as a placeholder. Replace it with the actual version
|
|
183
186
|
number (e.g., `2.6.0`).
|
|
184
187
|
|
|
185
|
-
#### 1.
|
|
186
|
-
|
|
187
|
-
```shell
|
|
188
|
-
git checkout develop
|
|
189
|
-
git pull origin develop
|
|
190
|
-
git flow release start X.Y.Z
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
This creates and switches to a `release/X.Y.Z` branch based on `develop`.
|
|
194
|
-
|
|
195
|
-
#### 2. Bump the version number
|
|
188
|
+
#### 1. Bump the version number
|
|
196
189
|
|
|
197
190
|
Update the version string in **both** files:
|
|
198
191
|
|
|
199
192
|
- `pyproject.toml` — the `version` field under `[project]`
|
|
200
193
|
- `statemachine/__init__.py` — the `__version__` variable
|
|
201
194
|
|
|
202
|
-
|
|
195
|
+
Then refresh the lock file, which records the project's own version:
|
|
196
|
+
|
|
197
|
+
```shell
|
|
198
|
+
uv lock
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
#### 2. Update translations
|
|
203
202
|
|
|
204
203
|
Extract new translatable strings, merge them into all existing `.po` files, translate the
|
|
205
204
|
new entries, and compile:
|
|
@@ -211,6 +210,10 @@ uv run pybabel update -i statemachine/locale/statemachine.pot -d statemachine/lo
|
|
|
211
210
|
uv run pybabel compile -d statemachine/locale/ -D statemachine
|
|
212
211
|
```
|
|
213
212
|
|
|
213
|
+
The `en` catalog keeps empty `msgstr` entries: English falls back to the source strings.
|
|
214
|
+
When a translation needs the placeholders in a different order, number them (`'{0}'`,
|
|
215
|
+
`'{2}'`, `'{1}'`) instead of reordering bare `{}`, which would swap the values.
|
|
216
|
+
|
|
214
217
|
```{note}
|
|
215
218
|
The `.pot` and `.mo` files are git-ignored. Only the `.po` source files are committed.
|
|
216
219
|
The compiled `.mo` files may cause test failures if your system locale matches a translated
|
|
@@ -218,9 +221,10 @@ language (error messages will appear translated instead of in English). Delete t
|
|
|
218
221
|
verifying translations work: `rm -f statemachine/locale/*/LC_MESSAGES/statemachine.mo`
|
|
219
222
|
```
|
|
220
223
|
|
|
221
|
-
####
|
|
224
|
+
#### 3. Write release notes
|
|
222
225
|
|
|
223
|
-
Create `docs/releases/X.Y.Z.md` documenting all changes since the previous release
|
|
226
|
+
Create `docs/releases/X.Y.Z.md` documenting all changes since the previous release, if
|
|
227
|
+
the pull requests did not already start it. Include
|
|
224
228
|
sections for new features, bugfixes, performance improvements, and miscellaneous changes.
|
|
225
229
|
Reference GitHub issues/PRs where applicable.
|
|
226
230
|
|
|
@@ -230,7 +234,10 @@ major version section).
|
|
|
230
234
|
Update any related documentation pages (e.g., if a bugfix adds a new behavior that users
|
|
231
235
|
should know about).
|
|
232
236
|
|
|
233
|
-
|
|
237
|
+
Replace the `*Not released yet*` line under the title with the release date (e.g.
|
|
238
|
+
`*October 13, 2026*`).
|
|
239
|
+
|
|
240
|
+
#### 4. Run linters and tests
|
|
234
241
|
|
|
235
242
|
```shell
|
|
236
243
|
uv run ruff check .
|
|
@@ -241,43 +248,36 @@ uv run pytest -n auto
|
|
|
241
248
|
|
|
242
249
|
All checks must pass before committing.
|
|
243
250
|
|
|
244
|
-
####
|
|
251
|
+
#### 5. Commit
|
|
245
252
|
|
|
246
253
|
Stage all changed files and commit. The pre-commit hooks will run ruff, mypy, and pytest
|
|
247
|
-
automatically.
|
|
254
|
+
automatically. If a hook rewrites a file (e.g. `fix end of files` on the `.po` files), stage
|
|
255
|
+
it and commit again.
|
|
248
256
|
|
|
249
257
|
```shell
|
|
250
258
|
git add <files>
|
|
251
|
-
git commit -m "chore: prepare release X.Y.Z"
|
|
259
|
+
git commit -s -m "chore: prepare release X.Y.Z"
|
|
252
260
|
```
|
|
253
261
|
|
|
254
|
-
####
|
|
262
|
+
#### 6. Tag the release
|
|
255
263
|
|
|
256
|
-
|
|
257
|
-
git flow release finish X.Y.Z -m "vX.Y.Z"
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
This will:
|
|
261
|
-
- Merge `release/X.Y.Z` into `main`
|
|
262
|
-
- Create an annotated tag `X.Y.Z` on `main`
|
|
263
|
-
- Merge `main` back into `develop`
|
|
264
|
-
- Delete the `release/X.Y.Z` branch
|
|
264
|
+
Create an annotated `vX.Y.Z` tag and move the `latest` tag to the same commit:
|
|
265
265
|
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
```shell
|
|
267
|
+
git tag -a vX.Y.Z -m "vX.Y.Z"
|
|
268
|
+
git tag -f latest
|
|
269
269
|
```
|
|
270
270
|
|
|
271
|
-
####
|
|
271
|
+
#### 7. Push
|
|
272
272
|
|
|
273
273
|
```shell
|
|
274
|
-
git
|
|
275
|
-
git push origin
|
|
274
|
+
git push origin main vX.Y.Z
|
|
275
|
+
git push -f origin latest
|
|
276
276
|
```
|
|
277
277
|
|
|
278
|
-
Force-pushing
|
|
278
|
+
Force-pushing is needed only to move the `latest` tag.
|
|
279
279
|
|
|
280
|
-
####
|
|
280
|
+
#### 8. Verify the release
|
|
281
281
|
|
|
282
282
|
The tag push triggers the `release` GitHub Actions workflow (`.github/workflows/release.yml`),
|
|
283
283
|
which will:
|
|
@@ -290,7 +290,7 @@ which will:
|
|
|
290
290
|
Monitor the workflow run at `https://github.com/fgmacedo/python-statemachine/actions` to
|
|
291
291
|
confirm the release was published successfully.
|
|
292
292
|
|
|
293
|
-
####
|
|
293
|
+
#### 9. Publish the GitHub release
|
|
294
294
|
|
|
295
295
|
Create the GitHub release from the freshly pushed tag using the release notes file as the
|
|
296
296
|
body. Two adjustments are needed when going from MyST/Sphinx markdown to GitHub-flavored
|
|
@@ -312,9 +312,43 @@ Then create the release. Use the converted notes as the body:
|
|
|
312
312
|
gh release create vX.Y.Z \
|
|
313
313
|
--title "vX.Y.Z" \
|
|
314
314
|
--notes-file /tmp/release-X.Y.Z-notes.md \
|
|
315
|
-
--target main \
|
|
316
315
|
--verify-tag
|
|
317
316
|
```
|
|
318
317
|
|
|
319
318
|
Confirm the rendered release at
|
|
320
319
|
`https://github.com/fgmacedo/python-statemachine/releases/tag/vX.Y.Z`.
|
|
320
|
+
|
|
321
|
+
### Hotfix releases
|
|
322
|
+
|
|
323
|
+
Use a hotfix release when `main` already has unreleased changes that must not ship yet, but a
|
|
324
|
+
fix needs to reach users of the last release. If `main` is releasable as is, just cut a
|
|
325
|
+
regular release from it.
|
|
326
|
+
|
|
327
|
+
1. Land the fix on `main` first, through a regular pull request with tests.
|
|
328
|
+
|
|
329
|
+
1. Create the release branch from the released tag (or reuse it if it already exists):
|
|
330
|
+
|
|
331
|
+
git switch -c release/X.Y.x vX.Y.Z
|
|
332
|
+
|
|
333
|
+
1. Cherry-pick the fix commits from `main`, keeping a reference to their origin:
|
|
334
|
+
|
|
335
|
+
git cherry-pick -x <sha>
|
|
336
|
+
|
|
337
|
+
1. On the release branch, bump the patch version and write the release notes, then commit
|
|
338
|
+
`chore: prepare release X.Y.Z` exactly as in the regular process.
|
|
339
|
+
|
|
340
|
+
1. Tag and push. Pushing the branch runs the `Python checks` workflow before you tag; move
|
|
341
|
+
`latest` only if this is the highest version released so far:
|
|
342
|
+
|
|
343
|
+
git push -u origin release/X.Y.x
|
|
344
|
+
git tag -a vX.Y.Z -m "vX.Y.Z"
|
|
345
|
+
git push origin vX.Y.Z
|
|
346
|
+
git tag -f latest && git push -f origin latest
|
|
347
|
+
|
|
348
|
+
1. Publish the GitHub release as in the regular process.
|
|
349
|
+
|
|
350
|
+
1. Cherry-pick the `chore: prepare release X.Y.Z` commit back into `main` so the version and
|
|
351
|
+
release notes stay in sync. A conflict only happens if `main` was already bumped; keep
|
|
352
|
+
`main`'s version and take the release notes.
|
|
353
|
+
|
|
354
|
+
The release branch can be deleted once the tag exists; the tag keeps the commits reachable.
|
|
@@ -214,6 +214,7 @@ Sphinx directive):
|
|
|
214
214
|
```python
|
|
215
215
|
from statemachine.contrib.diagram import formatter
|
|
216
216
|
|
|
217
|
+
|
|
217
218
|
@formatter.register_format("plantuml", "puml")
|
|
218
219
|
def _render_plantuml(machine_or_class):
|
|
219
220
|
# your PlantUML renderer here
|
|
@@ -459,7 +460,8 @@ The directive supports the same layout options as the standard `image` and
|
|
|
459
460
|
`:target:` *(URL or empty)*
|
|
460
461
|
: Makes the diagram clickable. When set without a value, the raw SVG is
|
|
461
462
|
saved as a file and linked so users can open it in a new tab for
|
|
462
|
-
full-resolution zooming
|
|
463
|
+
full-resolution zooming, useful for large or complex diagrams. The link is relative to
|
|
464
|
+
the page, so it also works when the documentation is served below a URL prefix.
|
|
463
465
|
|
|
464
466
|
`:class:` *(space-separated strings)*
|
|
465
467
|
: Extra CSS classes for the wrapper element.
|
|
@@ -485,6 +487,46 @@ JupyterLab cells — no extra code needed:
|
|
|
485
487
|

|
|
486
488
|
|
|
487
489
|
|
|
490
|
+
(diagram-graphviz-errors)=
|
|
491
|
+
|
|
492
|
+
## When Graphviz fails
|
|
493
|
+
|
|
494
|
+
Every path that runs `dot` (the `svg` format, `_repr_svg_()` in Jupyter, the command line
|
|
495
|
+
and the Sphinx directive) raises
|
|
496
|
+
{class}`~statemachine.contrib.diagram.GraphvizError` when the program is missing from
|
|
497
|
+
`PATH`, cannot run or exits with an error. The message carries the format that was requested and
|
|
498
|
+
what Graphviz wrote to stderr, such as
|
|
499
|
+
`Error: <stdin>: syntax error in line 25 near ','`. The Sphinx directive reports the same
|
|
500
|
+
text as a build warning.
|
|
501
|
+
|
|
502
|
+
`GraphvizError` is a {class}`~statemachine.exceptions.StateMachineError`. A missing program
|
|
503
|
+
raises {class}`~statemachine.contrib.diagram.GraphvizNotFoundError`, a subclass of both
|
|
504
|
+
`GraphvizError` and {class}`FileNotFoundError`. Catch `GraphvizError` to handle every case;
|
|
505
|
+
code that skips diagrams with `except FileNotFoundError` when Graphviz is not installed keeps
|
|
506
|
+
working:
|
|
507
|
+
|
|
508
|
+
```py
|
|
509
|
+
>>> from statemachine.contrib.diagram import GraphvizError
|
|
510
|
+
>>> from statemachine.contrib.diagram import GraphvizNotFoundError
|
|
511
|
+
|
|
512
|
+
>>> issubclass(GraphvizNotFoundError, GraphvizError)
|
|
513
|
+
True
|
|
514
|
+
|
|
515
|
+
>>> issubclass(GraphvizNotFoundError, FileNotFoundError)
|
|
516
|
+
True
|
|
517
|
+
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
Formats requested directly on the `pydot.Dot` object (`write_png()`, `create_svg()`, ...)
|
|
521
|
+
are run by pydot, which reports only the exit code.
|
|
522
|
+
|
|
523
|
+
```{eval-rst}
|
|
524
|
+
.. autoexception:: statemachine.contrib.diagram.GraphvizError
|
|
525
|
+
|
|
526
|
+
.. autoexception:: statemachine.contrib.diagram.GraphvizNotFoundError
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
|
|
488
530
|
## Online generation (QuickChart)
|
|
489
531
|
|
|
490
532
|
If you prefer not to install Graphviz locally, you can generate diagrams
|
|
@@ -525,6 +567,7 @@ class CustomDiagram(DotGraphMachine):
|
|
|
525
567
|
graph_rankdir = "TB"
|
|
526
568
|
state_active_fillcolor = "lightyellow"
|
|
527
569
|
|
|
570
|
+
|
|
528
571
|
sm = OrderControl()
|
|
529
572
|
sm.receive_payment(10)
|
|
530
573
|
|