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.
Files changed (603) hide show
  1. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/pages.yml +4 -4
  2. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/python-package.yml +9 -10
  3. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/workflows/release.yml +6 -8
  4. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.pre-commit-config.yaml +1 -1
  5. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/AGENTS.md +11 -4
  6. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/PKG-INFO +7 -6
  7. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/README.md +4 -4
  8. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/async.md +20 -7
  9. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/conf.py +2 -2
  10. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/contributing.md +83 -49
  11. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/diagram.md +44 -1
  12. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/error_handling.md +96 -3
  13. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/events.md +65 -6
  14. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/guards.md +1 -1
  15. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/how-to/coming_from_state_pattern.md +3 -6
  16. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/how-to/coming_from_transitions.md +18 -11
  17. python_statemachine-3.2.2/docs/images/readme_trafficlightmachine.png +0 -0
  18. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/installation.md +1 -1
  19. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/integrations.md +8 -7
  20. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/security.md +15 -12
  21. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/processing_model.md +42 -5
  22. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.1.md +19 -13
  23. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.0.0.md +0 -4
  24. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.2.0.md +7 -4
  25. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.0.md +3 -2
  26. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.4.0.md +2 -0
  27. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.5.0.md +4 -1
  28. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.1.0.md +4 -2
  29. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.2.0.md +2 -2
  30. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.2.1.md +2 -2
  31. python_statemachine-3.2.2/docs/releases/3.2.2.md +777 -0
  32. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/index.md +1 -0
  33. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/upgrade_2x_to_3.md +21 -21
  34. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/statechart.md +32 -1
  35. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/states.md +5 -0
  36. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/validations.md +42 -0
  37. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/pyproject.toml +16 -15
  38. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/__init__.py +1 -1
  39. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/callbacks.py +11 -0
  40. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/__init__.py +15 -6
  41. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/formatter.py +4 -2
  42. python_statemachine-3.2.2/statemachine/contrib/diagram/graphviz.py +66 -0
  43. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/sphinx_ext.py +28 -7
  44. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/dispatcher.py +3 -2
  45. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/engines/async_.py +209 -177
  46. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/engines/base.py +245 -244
  47. python_statemachine-3.2.2/statemachine/engines/sync.py +319 -0
  48. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/event.py +29 -10
  49. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/event_data.py +19 -3
  50. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/events.py +5 -2
  51. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/factory.py +126 -29
  52. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/actions.py +4 -2
  53. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/schemas/statechart.schema.json +8 -1
  54. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/en/LC_MESSAGES/statemachine.po +58 -17
  55. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/hi_IN/LC_MESSAGES/statemachine.po +66 -17
  56. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/pt_BR/LC_MESSAGES/statemachine.po +66 -17
  57. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/locale/zh_CN/LC_MESSAGES/statemachine.po +60 -17
  58. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/registry.py +6 -1
  59. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/spec_parser.py +95 -19
  60. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/state.py +45 -6
  61. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/statemachine.py +42 -19
  62. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/conftest.py +37 -0
  63. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_security.py +27 -12
  64. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_validation.py +13 -0
  65. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scrape_images.py +2 -2
  66. python_statemachine-3.2.2/tests/scxml/test_parallel_regions.py +39 -0
  67. python_statemachine-3.2.2/tests/test_async_futures.py +1094 -0
  68. python_statemachine-3.2.2/tests/test_cancel_event.py +358 -0
  69. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_contrib_diagram.py +195 -6
  70. python_statemachine-3.2.2/tests/test_contrib_diagram_graphviz.py +122 -0
  71. python_statemachine-3.2.2/tests/test_event_ordering.py +109 -0
  72. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_events.py +44 -0
  73. python_statemachine-3.2.2/tests/test_expanded_event_ids.py +217 -0
  74. python_statemachine-3.2.2/tests/test_internal_triggers.py +461 -0
  75. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_invoke.py +21 -0
  76. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_spec_parser_values.py +46 -4
  77. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_state.py +9 -0
  78. python_statemachine-3.2.2/tests/test_statechart_compound.py +1294 -0
  79. python_statemachine-3.2.2/tests/test_statechart_delayed.py +215 -0
  80. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_parallel.py +47 -7
  81. python_statemachine-3.2.2/uv.lock +2742 -0
  82. python_statemachine-3.2.1/docs/images/readme_trafficlightmachine.png +0 -0
  83. python_statemachine-3.2.1/statemachine/engines/sync.py +0 -203
  84. python_statemachine-3.2.1/tests/test_async_futures.py +0 -341
  85. python_statemachine-3.2.1/tests/test_statechart_compound.py +0 -304
  86. python_statemachine-3.2.1/tests/test_statechart_delayed.py +0 -100
  87. python_statemachine-3.2.1/uv.lock +0 -2343
  88. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.git-blame-ignore-revs +0 -0
  89. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/FUNDING.yml +0 -0
  90. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.github/ISSUE_TEMPLATE.md +0 -0
  91. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.gitignore +0 -0
  92. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/.readthedocs.yaml +0 -0
  93. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/CLAUDE.md +0 -0
  94. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/LICENSE +0 -0
  95. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/conftest.py +0 -0
  96. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/contributing.md +0 -0
  97. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/_static/custom_machine.css +0 -0
  98. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/actions.md +0 -0
  99. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/api.md +0 -0
  100. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/authors.md +0 -0
  101. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/behaviour.md +0 -0
  102. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/concepts.md +0 -0
  103. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/_oc_machine_processing.svg +0 -0
  104. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/internal_transition_sc.png +0 -0
  105. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/lab_approval_machine_accepted.png +0 -0
  106. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/oc_machine_processing.svg +0 -0
  107. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/python-statemachine.png +0 -0
  108. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/test_state_machine_internal.png +0 -0
  109. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/images/traffic_light_machine.png +0 -0
  110. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/index.md +0 -0
  111. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/invoke.md +0 -0
  112. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/formats.md +0 -0
  113. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/index.md +0 -0
  114. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/io/json_schema.md +0 -0
  115. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/listeners.md +0 -0
  116. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/models.md +0 -0
  117. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.1.0.md +0 -0
  118. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.2.0.md +0 -0
  119. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.3.0.md +0 -0
  120. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.4.2.md +0 -0
  121. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.5.0.md +0 -0
  122. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.5.1.md +0 -0
  123. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.6.0.md +0 -0
  124. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.6.1.md +0 -0
  125. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.6.2.md +0 -0
  126. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.7.0.md +0 -0
  127. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.7.1.md +0 -0
  128. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.8.0.md +0 -0
  129. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/0.9.0.md +0 -0
  130. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.0.md +0 -0
  131. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.2.md +0 -0
  132. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/1.0.3.md +0 -0
  133. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.1.0.md +0 -0
  134. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.1.1.md +0 -0
  135. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.1.2.md +0 -0
  136. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.1.md +0 -0
  137. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.2.md +0 -0
  138. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.3.md +0 -0
  139. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.4.md +0 -0
  140. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.5.md +0 -0
  141. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.3.6.md +0 -0
  142. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/2.6.0.md +0 -0
  143. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.0.0.md +0 -0
  144. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.1.1.md +0 -0
  145. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/releases/3.1.2.md +0 -0
  146. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/timeout.md +0 -0
  147. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/transitions.md +0 -0
  148. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/tutorial.md +0 -0
  149. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/docs/weighted_transitions.md +0 -0
  150. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/configuration.py +0 -0
  151. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/__init__.py +0 -0
  152. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/__main__.py +0 -0
  153. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/extract.py +0 -0
  154. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/model.py +0 -0
  155. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/__init__.py +0 -0
  156. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/dot.py +0 -0
  157. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/mermaid.py +0 -0
  158. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/table.py +0 -0
  159. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/timeout.py +0 -0
  160. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/contrib/weighted.py +0 -0
  161. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/engines/__init__.py +0 -0
  162. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/exceptions.py +0 -0
  163. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/graph.py +0 -0
  164. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/i18n.py +0 -0
  165. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/invoke.py +0 -0
  166. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/__init__.py +0 -0
  167. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/builder.py +0 -0
  168. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/class_factory.py +0 -0
  169. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/evaluators.py +0 -0
  170. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/interpreter.py +0 -0
  171. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/invoke.py +0 -0
  172. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/json/__init__.py +0 -0
  173. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/json/reader.py +0 -0
  174. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/loader.py +0 -0
  175. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/model.py +0 -0
  176. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/native.py +0 -0
  177. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/ports.py +0 -0
  178. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/scxml/__init__.py +0 -0
  179. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/scxml/processor.py +0 -0
  180. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/scxml/reader.py +0 -0
  181. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/system_variables.py +0 -0
  182. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/validation.py +0 -0
  183. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/yaml/__init__.py +0 -0
  184. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/io/yaml/reader.py +0 -0
  185. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/mixins.py +0 -0
  186. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/model.py +0 -0
  187. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/orderedset.py +0 -0
  188. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/py.typed +0 -0
  189. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/signature.py +0 -0
  190. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/states.py +0 -0
  191. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/transition.py +0 -0
  192. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/transition_list.py +0 -0
  193. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/transition_mixin.py +0 -0
  194. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/statemachine/utils.py +0 -0
  195. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/__init__.py +0 -0
  196. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/app.py +0 -0
  197. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/core/__init__,.py +0 -0
  198. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/core/settings.py +0 -0
  199. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/core/wsgi.py +0 -0
  200. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/manage.py +0 -0
  201. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/__init__.py +0 -0
  202. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/apps.py +0 -0
  203. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/models.py +0 -0
  204. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/statemachines.py +0 -0
  205. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/django_project/workflow/tests.py +0 -0
  206. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/README.rst +0 -0
  207. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/__init__.py +0 -0
  208. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/ai_shell_machine.py +0 -0
  209. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/air_conditioner_machine.py +0 -0
  210. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/all_actions_machine.py +0 -0
  211. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/async_guess_the_number_machine.py +0 -0
  212. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/async_without_loop_machine.py +0 -0
  213. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/enum_campaign_machine.py +0 -0
  214. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/guess_the_number_machine.py +0 -0
  215. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/lor_machine.py +0 -0
  216. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/order_control_machine.py +0 -0
  217. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/order_control_rich_model_machine.py +0 -0
  218. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/persistent_model_machine.py +0 -0
  219. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/recursive_event_machine.py +0 -0
  220. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/reusing_transitions_machine.py +0 -0
  221. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/sqlite_persistent_model_machine.py +0 -0
  222. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_cleanup_machine.py +0 -0
  223. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_compound_machine.py +0 -0
  224. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_delayed_machine.py +0 -0
  225. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_error_handling_machine.py +0 -0
  226. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_eventless_machine.py +0 -0
  227. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_history_machine.py +0 -0
  228. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_in_condition_machine.py +0 -0
  229. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/statechart_parallel_machine.py +0 -0
  230. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/traffic_light_machine.py +0 -0
  231. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/user_machine.py +0 -0
  232. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/examples/weighted_idle_machine.py +0 -0
  233. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/helpers.py +0 -0
  234. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/__init__.py +0 -0
  235. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.json +0 -0
  236. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.scxml +0 -0
  237. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.yaml +0 -0
  238. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.json +0 -0
  239. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.scxml +0 -0
  240. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.yaml +0 -0
  241. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/order_pipeline.json +0 -0
  242. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/order_pipeline.yaml +0 -0
  243. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/telemetry.json +0 -0
  244. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/native/telemetry.yaml +0 -0
  245. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.json +0 -0
  246. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.scxml +0 -0
  247. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.yaml +0 -0
  248. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.json +0 -0
  249. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.scxml +0 -0
  250. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.yaml +0 -0
  251. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.json +0 -0
  252. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.scxml +0 -0
  253. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.yaml +0 -0
  254. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_format_parity.py +0 -0
  255. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_guards_parity.py +0 -0
  256. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_interpreter.py +0 -0
  257. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_loader.py +0 -0
  258. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_model.py +0 -0
  259. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_native.py +0 -0
  260. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_native_behavior.py +0 -0
  261. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_native_invoke.py +0 -0
  262. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_ports.py +0 -0
  263. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/io/test_readers.py +0 -0
  264. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/__init__.py +0 -0
  265. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/__init__.py +0 -0
  266. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey.py +0 -0
  267. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey_two_compounds.py +0 -0
  268. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey_with_finals.py +0 -0
  269. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/moria_expedition.py +0 -0
  270. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/moria_expedition_with_escape.py +0 -0
  271. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/quest_for_erebor.py +0 -0
  272. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/compound/shire_to_rivendell.py +0 -0
  273. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/__init__.py +0 -0
  274. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/destroy_the_ring.py +0 -0
  275. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/destroy_the_ring_simple.py +0 -0
  276. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/nested_quest_donedata.py +0 -0
  277. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_done_convention.py +0 -0
  278. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_explicit_id.py +0 -0
  279. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_multi_word.py +0 -0
  280. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_with_event.py +0 -0
  281. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/__init__.py +0 -0
  282. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_convention_event.py +0 -0
  283. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_convention_transition_list.py +0 -0
  284. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_action_sc.py +0 -0
  285. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_action_sm_with_flag.py +0 -0
  286. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_after_sc.py +0 -0
  287. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_error_handler_sc.py +0 -0
  288. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_guard_sc.py +0 -0
  289. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_guard_sm.py +0 -0
  290. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/error/error_in_on_enter_sc.py +0 -0
  291. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/__init__.py +0 -0
  292. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/auto_advance.py +0 -0
  293. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/beacon_chain.py +0 -0
  294. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/beacon_chain_lighting.py +0 -0
  295. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/coordinated_advance.py +0 -0
  296. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption.py +0 -0
  297. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption_with_bear_ring.py +0 -0
  298. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption_with_tick.py +0 -0
  299. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/__init__.py +0 -0
  300. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/deep_memory_of_moria.py +0 -0
  301. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality.py +0 -0
  302. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality_default_gollum.py +0 -0
  303. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality_with_default.py +0 -0
  304. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/history/shallow_moria.py +0 -0
  305. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/__init__.py +0 -0
  306. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/combined_guard.py +0 -0
  307. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/descendant_check.py +0 -0
  308. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/eventless_in.py +0 -0
  309. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/fellowship.py +0 -0
  310. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/fellowship_coordination.py +0 -0
  311. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/in_condition/gate_of_moria.py +0 -0
  312. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/__init__.py +0 -0
  313. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/session.py +0 -0
  314. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/session_with_done_state.py +0 -0
  315. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/two_towers.py +0 -0
  316. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/war_of_the_ring.py +0 -0
  317. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/parallel/war_with_exit.py +0 -0
  318. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_actions.py +0 -0
  319. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_compound.py +0 -0
  320. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_deep_history.py +0 -0
  321. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_guards.py +0 -0
  322. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_history.py +0 -0
  323. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_internal.py +0 -0
  324. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_parallel.py +0 -0
  325. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_parallel_compound.py +0 -0
  326. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_self_transition.py +0 -0
  327. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/showcase_simple.py +0 -0
  328. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/transition_from_any.py +0 -0
  329. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/tutorial_coffee_order.py +0 -0
  330. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/__init__.py +0 -0
  331. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/multi_validator.py +0 -0
  332. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/order_validation.py +0 -0
  333. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/order_validation_no_error_events.py +0 -0
  334. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/validator_fallthrough.py +0 -0
  335. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/validator_with_cond.py +0 -0
  336. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/validators/validator_with_error_transition.py +0 -0
  337. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/__init__.py +0 -0
  338. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine.py +0 -0
  339. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine_with_validator.py +0 -0
  340. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine_with_values.py +0 -0
  341. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/machines/workflow/reverse_traffic_light.py +0 -0
  342. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/models.py +0 -0
  343. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/__init__.py +0 -0
  344. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/_harness.py +0 -0
  345. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/conftest.py +0 -0
  346. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/test_microwave.py +0 -0
  347. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/test_scxml_cases.py +0 -0
  348. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/LICENSE +0 -0
  349. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test144.scxml +0 -0
  350. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test145.scxml +0 -0
  351. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test147.scxml +0 -0
  352. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test148.scxml +0 -0
  353. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test149.scxml +0 -0
  354. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test150.scxml +0 -0
  355. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test151.scxml +0 -0
  356. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test152.scxml +0 -0
  357. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test153.scxml +0 -0
  358. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test155.scxml +0 -0
  359. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test156.scxml +0 -0
  360. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test158.scxml +0 -0
  361. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test159.scxml +0 -0
  362. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test172.scxml +0 -0
  363. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test173.scxml +0 -0
  364. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test174.scxml +0 -0
  365. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test175.scxml +0 -0
  366. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test176.scxml +0 -0
  367. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test179.scxml +0 -0
  368. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test183.scxml +0 -0
  369. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test185.scxml +0 -0
  370. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test186.scxml +0 -0
  371. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test187.scxml +0 -0
  372. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test189.scxml +0 -0
  373. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test190.scxml +0 -0
  374. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test191.scxml +0 -0
  375. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test192.scxml +0 -0
  376. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test194.scxml +0 -0
  377. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test198.scxml +0 -0
  378. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test199.scxml +0 -0
  379. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test200.scxml +0 -0
  380. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test205.scxml +0 -0
  381. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test207.scxml +0 -0
  382. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test208.scxml +0 -0
  383. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test210.scxml +0 -0
  384. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test215.scxml +0 -0
  385. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test216.scxml +0 -0
  386. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test216sub1.scxml +0 -0
  387. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test220.scxml +0 -0
  388. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test223.scxml +0 -0
  389. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test224.scxml +0 -0
  390. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test225.scxml +0 -0
  391. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test226.scxml +0 -0
  392. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test226sub1.scxml +0 -0
  393. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test228.scxml +0 -0
  394. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test229.scxml +0 -0
  395. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test232.scxml +0 -0
  396. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test233.scxml +0 -0
  397. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test234.scxml +0 -0
  398. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test235.scxml +0 -0
  399. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test236.scxml +0 -0
  400. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test237.scxml +0 -0
  401. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test239.scxml +0 -0
  402. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test239sub1.scxml +0 -0
  403. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test240.scxml +0 -0
  404. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test241.scxml +0 -0
  405. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test242.scxml +0 -0
  406. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test242sub1.scxml +0 -0
  407. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test243.scxml +0 -0
  408. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test244.scxml +0 -0
  409. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test245.scxml +0 -0
  410. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test247.scxml +0 -0
  411. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test252.scxml +0 -0
  412. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test253.scxml +0 -0
  413. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test276.scxml +0 -0
  414. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test276sub1.scxml +0 -0
  415. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test277.scxml +0 -0
  416. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test279.scxml +0 -0
  417. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test280.scxml +0 -0
  418. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test286.scxml +0 -0
  419. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test287.scxml +0 -0
  420. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test294.scxml +0 -0
  421. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test298.scxml +0 -0
  422. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test302.scxml +0 -0
  423. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test303.scxml +0 -0
  424. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test304.scxml +0 -0
  425. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test309.scxml +0 -0
  426. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test310.scxml +0 -0
  427. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test311.scxml +0 -0
  428. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test312.scxml +0 -0
  429. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test318.scxml +0 -0
  430. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test319.scxml +0 -0
  431. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test321.scxml +0 -0
  432. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test322.scxml +0 -0
  433. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test323.scxml +0 -0
  434. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test324.scxml +0 -0
  435. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test325.scxml +0 -0
  436. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test326.scxml +0 -0
  437. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test329.scxml +0 -0
  438. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test330.scxml +0 -0
  439. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test331.scxml +0 -0
  440. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test332.scxml +0 -0
  441. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test333.scxml +0 -0
  442. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test335.scxml +0 -0
  443. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test336.scxml +0 -0
  444. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test337.scxml +0 -0
  445. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test338.scxml +0 -0
  446. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test339.scxml +0 -0
  447. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test342.scxml +0 -0
  448. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test343.scxml +0 -0
  449. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test344.scxml +0 -0
  450. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test346.scxml +0 -0
  451. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test347.scxml +0 -0
  452. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test348.scxml +0 -0
  453. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test349.scxml +0 -0
  454. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test350.scxml +0 -0
  455. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test351.scxml +0 -0
  456. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test352.scxml +0 -0
  457. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test354.scxml +0 -0
  458. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test355.scxml +0 -0
  459. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test364.scxml +0 -0
  460. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test372.scxml +0 -0
  461. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test375.scxml +0 -0
  462. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test376.scxml +0 -0
  463. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test377.scxml +0 -0
  464. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test378.scxml +0 -0
  465. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test387.scxml +0 -0
  466. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test388.scxml +0 -0
  467. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test396.scxml +0 -0
  468. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test399.scxml +0 -0
  469. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test401.scxml +0 -0
  470. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test402.scxml +0 -0
  471. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403a.scxml +0 -0
  472. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403b.scxml +0 -0
  473. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403c.scxml +0 -0
  474. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test404.scxml +0 -0
  475. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test405.scxml +0 -0
  476. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test406.scxml +0 -0
  477. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test407.scxml +0 -0
  478. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test409.scxml +0 -0
  479. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test411.scxml +0 -0
  480. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test412.scxml +0 -0
  481. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test413.scxml +0 -0
  482. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test416.scxml +0 -0
  483. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test417.scxml +0 -0
  484. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test419.scxml +0 -0
  485. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test421.scxml +0 -0
  486. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test422.scxml +0 -0
  487. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test423.scxml +0 -0
  488. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test487.scxml +0 -0
  489. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test488.scxml +0 -0
  490. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test495.scxml +0 -0
  491. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test496.scxml +0 -0
  492. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test500.scxml +0 -0
  493. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test501.scxml +0 -0
  494. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test503.scxml +0 -0
  495. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test504.scxml +0 -0
  496. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test505.scxml +0 -0
  497. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test506.scxml +0 -0
  498. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test521.scxml +0 -0
  499. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test525.scxml +0 -0
  500. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test527.scxml +0 -0
  501. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test528.scxml +0 -0
  502. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test529.scxml +0 -0
  503. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test530.scxml +0 -0
  504. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test533.scxml +0 -0
  505. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test550.scxml +0 -0
  506. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test551.scxml +0 -0
  507. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test552.scxml +0 -0
  508. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test552.txt +0 -0
  509. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test553.scxml +0 -0
  510. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test554.scxml +0 -0
  511. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test570.scxml +0 -0
  512. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test576.scxml +0 -0
  513. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test579.scxml +0 -0
  514. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test580.scxml +0 -0
  515. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test193.scxml +0 -0
  516. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test201.scxml +0 -0
  517. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test278.scxml +0 -0
  518. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test444.scxml +0 -0
  519. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test445.scxml +0 -0
  520. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test446.scxml +0 -0
  521. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test446.txt +0 -0
  522. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test448.scxml +0 -0
  523. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test449.scxml +0 -0
  524. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test451.scxml +0 -0
  525. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test452.scxml +0 -0
  526. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test453.scxml +0 -0
  527. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test456.scxml +0 -0
  528. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test457.scxml +0 -0
  529. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test459.scxml +0 -0
  530. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test460.scxml +0 -0
  531. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test509.scxml +0 -0
  532. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test510.scxml +0 -0
  533. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test518.scxml +0 -0
  534. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test519.scxml +0 -0
  535. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test520.scxml +0 -0
  536. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test522.scxml +0 -0
  537. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test531.scxml +0 -0
  538. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test532.scxml +0 -0
  539. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test534.scxml +0 -0
  540. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test557.scxml +0 -0
  541. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test557.txt +0 -0
  542. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test558.scxml +0 -0
  543. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test558.txt +0 -0
  544. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test560.scxml +0 -0
  545. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test561.scxml +0 -0
  546. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test562.scxml +0 -0
  547. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test567.scxml +0 -0
  548. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test569.scxml +0 -0
  549. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test577.scxml +0 -0
  550. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test578.scxml +0 -0
  551. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_actions.py +0 -0
  552. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_api_contract.py +0 -0
  553. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_async.py +0 -0
  554. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_callbacks.py +0 -0
  555. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_callbacks_isolation.py +0 -0
  556. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_class_listeners.py +0 -0
  557. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_conditions_algebra.py +0 -0
  558. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_configuration.py +0 -0
  559. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_contrib_timeout.py +0 -0
  560. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_copy.py +0 -0
  561. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_dispatcher.py +0 -0
  562. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_error_execution.py +0 -0
  563. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_examples.py +0 -0
  564. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_fellowship_quest.py +0 -0
  565. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_io.py +0 -0
  566. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_listener.py +0 -0
  567. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_mermaid_renderer.py +0 -0
  568. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_mixins.py +0 -0
  569. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_mock_compatibility.py +0 -0
  570. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_multiple_destinations.py +0 -0
  571. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_optional_pydot.py +0 -0
  572. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_profiling.py +0 -0
  573. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_registry.py +0 -0
  574. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_rtc.py +0 -0
  575. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_scxml_datamodel.py +0 -0
  576. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_scxml_units.py +0 -0
  577. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_signature.py +0 -0
  578. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_signature_positional_only.py +0 -0
  579. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_spec_parser.py +0 -0
  580. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_state_callbacks.py +0 -0
  581. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_donedata.py +0 -0
  582. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_error.py +0 -0
  583. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_eventless.py +0 -0
  584. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_history.py +0 -0
  585. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statechart_in_condition.py +0 -0
  586. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine.py +0 -0
  587. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine_bounded_transitions.py +0 -0
  588. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine_compat.py +0 -0
  589. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_statemachine_inheritance.py +0 -0
  590. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_threading.py +0 -0
  591. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_transition_list.py +0 -0
  592. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_transition_table.py +0 -0
  593. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_transitions.py +0 -0
  594. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_translation_names.py +0 -0
  595. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_validators.py +0 -0
  596. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/test_weighted_transitions.py +0 -0
  597. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/__init__.py +0 -0
  598. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/issue308.md +0 -0
  599. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/issue384_multiple_observers.md +0 -0
  600. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/issue449.md +0 -0
  601. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/test_issue434.py +0 -0
  602. {python_statemachine-3.2.1 → python_statemachine-3.2.2}/tests/testcases/test_issue480.py +0 -0
  603. {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: [develop]
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@v5
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@v3
47
+ - uses: actions/upload-pages-artifact@v5
48
48
  with:
49
49
  path: _site
50
50
  - id: deployment
51
- uses: actions/deploy-pages@v4
51
+ uses: actions/deploy-pages@v5
@@ -5,9 +5,9 @@ name: Python checks
5
5
 
6
6
  on:
7
7
  push:
8
- branches: [ "develop" ]
8
+ branches: [ "main", "release/**" ]
9
9
  pull_request:
10
- branches: [ "develop" ]
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@v5
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@v6
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@v8.1.0
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.14
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@v6
59
- if: matrix.python-version == 3.14
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@v5
15
-
16
- - run: git fetch origin develop
14
+ - uses: actions/checkout@v7
17
15
 
18
16
  - name: Setup Python
19
- uses: actions/setup-python@v6
17
+ uses: actions/setup-python@v7
20
18
  with:
21
- python-version: '3.14'
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@v8.1.0
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@v4
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@v4
60
+ uses: actions/download-artifact@v8
63
61
  with:
64
62
  name: release-dists
65
63
  path: dist/
@@ -9,7 +9,7 @@ repos:
9
9
  exclude: docs/auto_examples
10
10
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
11
  # Ruff version.
12
- rev: v0.15.17
12
+ rev: v0.16.10
13
13
  hooks:
14
14
  # Run the linter.
15
15
  - id: ruff
@@ -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 within the current macrostep, before external events).
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
- - Main branch: `develop`
300
- - PRs target `develop`
301
- - Releases are tagged as `v*.*.*`
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.4
1
+ Metadata-Version: 2.5
2
2
  Name: python-statemachine
3
- Version: 3.2.1
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
  [![pypi](https://img.shields.io/pypi/v/python-statemachine.svg)](https://pypi.python.org/pypi/python-statemachine)
38
39
  [![downloads total](https://static.pepy.tech/badge/python-statemachine)](https://pepy.tech/project/python-statemachine)
39
40
  [![downloads](https://img.shields.io/pypi/dm/python-statemachine.svg)](https://pypi.python.org/pypi/python-statemachine)
40
- [![Coverage report](https://codecov.io/gh/fgmacedo/python-statemachine/branch/develop/graph/badge.svg)](https://codecov.io/gh/fgmacedo/python-statemachine)
41
+ [![Coverage report](https://codecov.io/gh/fgmacedo/python-statemachine/branch/main/graph/badge.svg)](https://codecov.io/gh/fgmacedo/python-statemachine)
41
42
  [![Documentation Status](https://readthedocs.org/projects/python-statemachine/badge/?version=latest)](https://python-statemachine.readthedocs.io/en/latest/?badge=latest)
42
- [![GitHub commits since last release (main)](https://img.shields.io/github/commits-since/fgmacedo/python-statemachine/main/develop)](https://github.com/fgmacedo/python-statemachine/compare/main...develop)
43
+ [![GitHub commits since last release](https://img.shields.io/github/commits-since/fgmacedo/python-statemachine/latest?sort=semver)](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
- ![](https://github.com/fgmacedo/python-statemachine/blob/develop/docs/images/python-statemachine.png?raw=true)
49
+ ![](https://github.com/fgmacedo/python-statemachine/blob/main/docs/images/python-statemachine.png?raw=true)
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
- ![](https://raw.githubusercontent.com/fgmacedo/python-statemachine/develop/docs/images/readme_trafficlightmachine.png)
132
+ ![](https://raw.githubusercontent.com/fgmacedo/python-statemachine/main/docs/images/readme_trafficlightmachine.png)
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
  [![pypi](https://img.shields.io/pypi/v/python-statemachine.svg)](https://pypi.python.org/pypi/python-statemachine)
4
4
  [![downloads total](https://static.pepy.tech/badge/python-statemachine)](https://pepy.tech/project/python-statemachine)
5
5
  [![downloads](https://img.shields.io/pypi/dm/python-statemachine.svg)](https://pypi.python.org/pypi/python-statemachine)
6
- [![Coverage report](https://codecov.io/gh/fgmacedo/python-statemachine/branch/develop/graph/badge.svg)](https://codecov.io/gh/fgmacedo/python-statemachine)
6
+ [![Coverage report](https://codecov.io/gh/fgmacedo/python-statemachine/branch/main/graph/badge.svg)](https://codecov.io/gh/fgmacedo/python-statemachine)
7
7
  [![Documentation Status](https://readthedocs.org/projects/python-statemachine/badge/?version=latest)](https://python-statemachine.readthedocs.io/en/latest/?badge=latest)
8
- [![GitHub commits since last release (main)](https://img.shields.io/github/commits-since/fgmacedo/python-statemachine/main/develop)](https://github.com/fgmacedo/python-statemachine/compare/main...develop)
8
+ [![GitHub commits since last release](https://img.shields.io/github/commits-since/fgmacedo/python-statemachine/latest?sort=semver)](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
- ![](https://github.com/fgmacedo/python-statemachine/blob/develop/docs/images/python-statemachine.png?raw=true)
14
+ ![](https://github.com/fgmacedo/python-statemachine/blob/main/docs/images/python-statemachine.png?raw=true)
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
- ![](https://raw.githubusercontent.com/fgmacedo/python-statemachine/develop/docs/images/readme_trafficlightmachine.png)
97
+ ![](https://raw.githubusercontent.com/fgmacedo/python-statemachine/main/docs/images/readme_trafficlightmachine.png)
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 simply `await` their future.
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 only created for **external** events sent from outside the
159
- processing loop. Events triggered from within callbacks (via `send()` or
160
- `raise_()`) follow the {ref}`run-to-completion <rtc-model>` model — they
161
- are enqueued and processed within the current macrostep.
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 caused it. Other callers
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": "develop",
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": "develop", # 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 checkout -b <name-of-your-bugfix-or-feature>
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 for your changes to be reviewed and potentially
148
- merged. Be sure to follow the project's code of conduct and contributing guidelines.
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 uses [git-flow](https://github.com/nvie/gitflow) for release management and
166
- publishes to PyPI automatically via GitHub Actions when a version tag is pushed.
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 `develop` branch with a clean working tree.
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
- brew install git-flow # macOS
175
- git flow init # use main for production, develop for next release
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 `develop`.
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. Start the release branch
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
- #### 3. Update translations
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
- #### 4. Write release notes
224
+ #### 3. Write release notes
222
225
 
223
- Create `docs/releases/X.Y.Z.md` documenting all changes since the previous release. Include
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
- #### 5. Run linters and tests
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
- #### 6. Commit
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
- #### 7. Finish the release
262
+ #### 6. Tag the release
255
263
 
256
- ```shell
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
- ```{note}
267
- If tagging fails (e.g., GPG or editor issues), create the tag manually and re-run:
268
- `git tag -a X.Y.Z -m "vX.Y.Z"` then `git flow release finish X.Y.Z -m "vX.Y.Z"`.
266
+ ```shell
267
+ git tag -a vX.Y.Z -m "vX.Y.Z"
268
+ git tag -f latest
269
269
  ```
270
270
 
271
- #### 8. Update the `latest` tag and push
271
+ #### 7. Push
272
272
 
273
273
  ```shell
274
- git tag latest -f
275
- git push origin main develop --tags -f
274
+ git push origin main vX.Y.Z
275
+ git push -f origin latest
276
276
  ```
277
277
 
278
- Force-pushing tags is needed to move the `latest` tag.
278
+ Force-pushing is needed only to move the `latest` tag.
279
279
 
280
- #### 9. Verify the release
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
- #### 10. Publish the GitHub release
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 — useful for large or complex diagrams.
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
  ![Approval machine on JupyterLab](images/lab_approval_machine_accepted.png)
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