python-statemachine 3.2.0__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 (607) hide show
  1. python_statemachine-3.2.2/.github/workflows/pages.yml +51 -0
  2. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.github/workflows/python-package.yml +9 -10
  3. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.github/workflows/release.yml +6 -8
  4. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.pre-commit-config.yaml +1 -1
  5. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/AGENTS.md +15 -4
  6. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/PKG-INFO +7 -6
  7. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/README.md +4 -4
  8. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/actions.md +7 -4
  9. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/async.md +20 -7
  10. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/behaviour.md +5 -1
  11. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/conf.py +2 -2
  12. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/contributing.md +83 -49
  13. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/diagram.md +44 -1
  14. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/error_handling.md +96 -3
  15. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/events.md +142 -6
  16. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/guards.md +66 -1
  17. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/how-to/coming_from_state_pattern.md +3 -6
  18. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/how-to/coming_from_transitions.md +43 -11
  19. python_statemachine-3.2.2/docs/images/readme_trafficlightmachine.png +0 -0
  20. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/installation.md +1 -1
  21. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/integrations.md +8 -7
  22. python_statemachine-3.2.2/docs/io/security.md +220 -0
  23. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/processing_model.md +42 -5
  24. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/1.0.1.md +19 -13
  25. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.0.0.md +0 -4
  26. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.2.0.md +7 -4
  27. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.0.md +3 -2
  28. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.4.0.md +2 -0
  29. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.5.0.md +4 -1
  30. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/3.1.0.md +4 -2
  31. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/3.2.0.md +109 -83
  32. python_statemachine-3.2.2/docs/releases/3.2.1.md +228 -0
  33. python_statemachine-3.2.2/docs/releases/3.2.2.md +777 -0
  34. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/index.md +2 -0
  35. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/upgrade_2x_to_3.md +21 -21
  36. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/statechart.md +32 -1
  37. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/states.md +6 -1
  38. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/validations.md +42 -0
  39. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/pyproject.toml +16 -15
  40. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/__init__.py +1 -1
  41. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/callbacks.py +11 -0
  42. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/__init__.py +15 -6
  43. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/extract.py +3 -3
  44. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/formatter.py +4 -2
  45. python_statemachine-3.2.2/statemachine/contrib/diagram/graphviz.py +66 -0
  46. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/sphinx_ext.py +28 -7
  47. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/dispatcher.py +8 -3
  48. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/engines/async_.py +224 -180
  49. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/engines/base.py +257 -245
  50. python_statemachine-3.2.2/statemachine/engines/sync.py +319 -0
  51. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/event.py +29 -10
  52. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/event_data.py +19 -3
  53. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/events.py +5 -2
  54. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/exceptions.py +1 -1
  55. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/factory.py +126 -29
  56. python_statemachine-3.2.2/statemachine/io/__init__.py +52 -0
  57. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/actions.py +124 -15
  58. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/evaluators.py +37 -9
  59. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/invoke.py +12 -0
  60. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/loader.py +17 -3
  61. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/schemas/statechart.schema.json +8 -1
  62. python_statemachine-3.2.2/statemachine/io/scxml/__init__.py +15 -0
  63. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/scxml/processor.py +1 -1
  64. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/scxml/reader.py +24 -9
  65. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/system_variables.py +34 -19
  66. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/locale/en/LC_MESSAGES/statemachine.po +58 -17
  67. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/locale/hi_IN/LC_MESSAGES/statemachine.po +66 -17
  68. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/locale/pt_BR/LC_MESSAGES/statemachine.po +66 -17
  69. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/locale/zh_CN/LC_MESSAGES/statemachine.po +60 -17
  70. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/orderedset.py +12 -3
  71. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/registry.py +6 -1
  72. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/spec_parser.py +151 -21
  73. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/state.py +47 -8
  74. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/statemachine.py +42 -19
  75. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/conftest.py +37 -0
  76. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_loader.py +30 -0
  77. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_native_invoke.py +3 -1
  78. python_statemachine-3.2.2/tests/io/test_security.py +839 -0
  79. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_validation.py +13 -0
  80. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scrape_images.py +2 -2
  81. python_statemachine-3.2.2/tests/scxml/test_parallel_regions.py +39 -0
  82. python_statemachine-3.2.2/tests/test_async_futures.py +1094 -0
  83. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_callbacks.py +96 -0
  84. python_statemachine-3.2.2/tests/test_cancel_event.py +358 -0
  85. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_conditions_algebra.py +30 -0
  86. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_contrib_diagram.py +195 -6
  87. python_statemachine-3.2.2/tests/test_contrib_diagram_graphviz.py +122 -0
  88. python_statemachine-3.2.2/tests/test_event_ordering.py +109 -0
  89. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_events.py +44 -0
  90. python_statemachine-3.2.2/tests/test_expanded_event_ids.py +217 -0
  91. python_statemachine-3.2.2/tests/test_internal_triggers.py +461 -0
  92. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_invoke.py +21 -0
  93. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_scxml_units.py +62 -8
  94. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_spec_parser.py +29 -0
  95. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_spec_parser_values.py +70 -1
  96. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_state.py +24 -0
  97. python_statemachine-3.2.2/tests/test_statechart_compound.py +1294 -0
  98. python_statemachine-3.2.2/tests/test_statechart_delayed.py +215 -0
  99. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statechart_parallel.py +47 -7
  100. python_statemachine-3.2.2/tests/test_translation_names.py +121 -0
  101. python_statemachine-3.2.2/uv.lock +2742 -0
  102. python_statemachine-3.2.0/docs/images/readme_trafficlightmachine.png +0 -0
  103. python_statemachine-3.2.0/docs/io/security.md +0 -82
  104. python_statemachine-3.2.0/statemachine/engines/sync.py +0 -203
  105. python_statemachine-3.2.0/statemachine/io/__init__.py +0 -45
  106. python_statemachine-3.2.0/statemachine/io/scxml/__init__.py +0 -12
  107. python_statemachine-3.2.0/tests/io/test_security.py +0 -230
  108. python_statemachine-3.2.0/tests/test_async_futures.py +0 -341
  109. python_statemachine-3.2.0/tests/test_statechart_compound.py +0 -254
  110. python_statemachine-3.2.0/tests/test_statechart_delayed.py +0 -100
  111. python_statemachine-3.2.0/uv.lock +0 -2343
  112. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.git-blame-ignore-revs +0 -0
  113. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.github/FUNDING.yml +0 -0
  114. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.github/ISSUE_TEMPLATE.md +0 -0
  115. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.gitignore +0 -0
  116. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/.readthedocs.yaml +0 -0
  117. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/CLAUDE.md +0 -0
  118. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/LICENSE +0 -0
  119. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/conftest.py +0 -0
  120. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/contributing.md +0 -0
  121. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/_static/custom_machine.css +0 -0
  122. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/api.md +0 -0
  123. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/authors.md +0 -0
  124. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/concepts.md +0 -0
  125. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/_oc_machine_processing.svg +0 -0
  126. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/internal_transition_sc.png +0 -0
  127. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/lab_approval_machine_accepted.png +0 -0
  128. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/oc_machine_processing.svg +0 -0
  129. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/python-statemachine.png +0 -0
  130. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/test_state_machine_internal.png +0 -0
  131. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/images/traffic_light_machine.png +0 -0
  132. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/index.md +0 -0
  133. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/invoke.md +0 -0
  134. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/io/formats.md +0 -0
  135. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/io/index.md +0 -0
  136. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/io/json_schema.md +0 -0
  137. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/listeners.md +0 -0
  138. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/models.md +0 -0
  139. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.1.0.md +0 -0
  140. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.2.0.md +0 -0
  141. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.3.0.md +0 -0
  142. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.4.2.md +0 -0
  143. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.5.0.md +0 -0
  144. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.5.1.md +0 -0
  145. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.6.0.md +0 -0
  146. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.6.1.md +0 -0
  147. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.6.2.md +0 -0
  148. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.7.0.md +0 -0
  149. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.7.1.md +0 -0
  150. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.8.0.md +0 -0
  151. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/0.9.0.md +0 -0
  152. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/1.0.0.md +0 -0
  153. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/1.0.2.md +0 -0
  154. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/1.0.3.md +0 -0
  155. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.1.0.md +0 -0
  156. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.1.1.md +0 -0
  157. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.1.2.md +0 -0
  158. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.1.md +0 -0
  159. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.2.md +0 -0
  160. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.3.md +0 -0
  161. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.4.md +0 -0
  162. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.5.md +0 -0
  163. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.3.6.md +0 -0
  164. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/2.6.0.md +0 -0
  165. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/3.0.0.md +0 -0
  166. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/3.1.1.md +0 -0
  167. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/releases/3.1.2.md +0 -0
  168. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/timeout.md +0 -0
  169. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/transitions.md +0 -0
  170. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/tutorial.md +0 -0
  171. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/docs/weighted_transitions.md +0 -0
  172. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/configuration.py +0 -0
  173. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/__init__.py +0 -0
  174. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/__main__.py +0 -0
  175. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/model.py +0 -0
  176. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/__init__.py +0 -0
  177. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/dot.py +0 -0
  178. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/mermaid.py +0 -0
  179. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/diagram/renderers/table.py +0 -0
  180. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/timeout.py +0 -0
  181. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/contrib/weighted.py +0 -0
  182. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/engines/__init__.py +0 -0
  183. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/graph.py +0 -0
  184. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/i18n.py +0 -0
  185. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/invoke.py +0 -0
  186. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/builder.py +0 -0
  187. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/class_factory.py +0 -0
  188. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/interpreter.py +0 -0
  189. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/json/__init__.py +0 -0
  190. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/json/reader.py +0 -0
  191. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/model.py +0 -0
  192. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/native.py +0 -0
  193. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/ports.py +0 -0
  194. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/validation.py +0 -0
  195. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/yaml/__init__.py +0 -0
  196. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/io/yaml/reader.py +0 -0
  197. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/mixins.py +0 -0
  198. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/model.py +0 -0
  199. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/py.typed +0 -0
  200. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/signature.py +0 -0
  201. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/states.py +0 -0
  202. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/transition.py +0 -0
  203. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/transition_list.py +0 -0
  204. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/transition_mixin.py +0 -0
  205. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/statemachine/utils.py +0 -0
  206. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/__init__.py +0 -0
  207. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/app.py +0 -0
  208. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/core/__init__,.py +0 -0
  209. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/core/settings.py +0 -0
  210. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/core/wsgi.py +0 -0
  211. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/manage.py +0 -0
  212. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/workflow/__init__.py +0 -0
  213. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/workflow/apps.py +0 -0
  214. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/workflow/models.py +0 -0
  215. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/workflow/statemachines.py +0 -0
  216. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/django_project/workflow/tests.py +0 -0
  217. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/README.rst +0 -0
  218. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/__init__.py +0 -0
  219. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/ai_shell_machine.py +0 -0
  220. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/air_conditioner_machine.py +0 -0
  221. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/all_actions_machine.py +0 -0
  222. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/async_guess_the_number_machine.py +0 -0
  223. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/async_without_loop_machine.py +0 -0
  224. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/enum_campaign_machine.py +0 -0
  225. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/guess_the_number_machine.py +0 -0
  226. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/lor_machine.py +0 -0
  227. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/order_control_machine.py +0 -0
  228. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/order_control_rich_model_machine.py +0 -0
  229. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/persistent_model_machine.py +0 -0
  230. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/recursive_event_machine.py +0 -0
  231. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/reusing_transitions_machine.py +0 -0
  232. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/sqlite_persistent_model_machine.py +0 -0
  233. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_cleanup_machine.py +0 -0
  234. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_compound_machine.py +0 -0
  235. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_delayed_machine.py +0 -0
  236. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_error_handling_machine.py +0 -0
  237. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_eventless_machine.py +0 -0
  238. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_history_machine.py +0 -0
  239. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_in_condition_machine.py +0 -0
  240. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/statechart_parallel_machine.py +0 -0
  241. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/traffic_light_machine.py +0 -0
  242. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/user_machine.py +0 -0
  243. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/examples/weighted_idle_machine.py +0 -0
  244. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/helpers.py +0 -0
  245. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/__init__.py +0 -0
  246. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.json +0 -0
  247. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.scxml +0 -0
  248. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/guarded_counter.yaml +0 -0
  249. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.json +0 -0
  250. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.scxml +0 -0
  251. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/invoke_child.yaml +0 -0
  252. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/native/order_pipeline.json +0 -0
  253. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/native/order_pipeline.yaml +0 -0
  254. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/native/telemetry.json +0 -0
  255. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/native/telemetry.yaml +0 -0
  256. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.json +0 -0
  257. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.scxml +0 -0
  258. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/system_event.yaml +0 -0
  259. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.json +0 -0
  260. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.scxml +0 -0
  261. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test147_if.yaml +0 -0
  262. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.json +0 -0
  263. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.scxml +0 -0
  264. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/format_parity/w3c_test155_foreach.yaml +0 -0
  265. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_format_parity.py +0 -0
  266. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_guards_parity.py +0 -0
  267. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_interpreter.py +0 -0
  268. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_model.py +0 -0
  269. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_native.py +0 -0
  270. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_native_behavior.py +0 -0
  271. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_ports.py +0 -0
  272. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/io/test_readers.py +0 -0
  273. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/__init__.py +0 -0
  274. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/__init__.py +0 -0
  275. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey.py +0 -0
  276. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey_two_compounds.py +0 -0
  277. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/middle_earth_journey_with_finals.py +0 -0
  278. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/moria_expedition.py +0 -0
  279. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/moria_expedition_with_escape.py +0 -0
  280. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/quest_for_erebor.py +0 -0
  281. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/compound/shire_to_rivendell.py +0 -0
  282. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/__init__.py +0 -0
  283. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/destroy_the_ring.py +0 -0
  284. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/destroy_the_ring_simple.py +0 -0
  285. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/nested_quest_donedata.py +0 -0
  286. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_done_convention.py +0 -0
  287. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_explicit_id.py +0 -0
  288. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_multi_word.py +0 -0
  289. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/donedata/quest_for_erebor_with_event.py +0 -0
  290. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/__init__.py +0 -0
  291. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_convention_event.py +0 -0
  292. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_convention_transition_list.py +0 -0
  293. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_action_sc.py +0 -0
  294. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_action_sm_with_flag.py +0 -0
  295. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_after_sc.py +0 -0
  296. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_error_handler_sc.py +0 -0
  297. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_guard_sc.py +0 -0
  298. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_guard_sm.py +0 -0
  299. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/error/error_in_on_enter_sc.py +0 -0
  300. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/__init__.py +0 -0
  301. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/auto_advance.py +0 -0
  302. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/beacon_chain.py +0 -0
  303. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/beacon_chain_lighting.py +0 -0
  304. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/coordinated_advance.py +0 -0
  305. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption.py +0 -0
  306. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption_with_bear_ring.py +0 -0
  307. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/eventless/ring_corruption_with_tick.py +0 -0
  308. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/history/__init__.py +0 -0
  309. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/history/deep_memory_of_moria.py +0 -0
  310. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality.py +0 -0
  311. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality_default_gollum.py +0 -0
  312. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/history/gollum_personality_with_default.py +0 -0
  313. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/history/shallow_moria.py +0 -0
  314. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/__init__.py +0 -0
  315. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/combined_guard.py +0 -0
  316. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/descendant_check.py +0 -0
  317. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/eventless_in.py +0 -0
  318. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/fellowship.py +0 -0
  319. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/fellowship_coordination.py +0 -0
  320. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/in_condition/gate_of_moria.py +0 -0
  321. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/parallel/__init__.py +0 -0
  322. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/parallel/session.py +0 -0
  323. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/parallel/session_with_done_state.py +0 -0
  324. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/parallel/two_towers.py +0 -0
  325. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/parallel/war_of_the_ring.py +0 -0
  326. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/parallel/war_with_exit.py +0 -0
  327. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_actions.py +0 -0
  328. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_compound.py +0 -0
  329. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_deep_history.py +0 -0
  330. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_guards.py +0 -0
  331. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_history.py +0 -0
  332. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_internal.py +0 -0
  333. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_parallel.py +0 -0
  334. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_parallel_compound.py +0 -0
  335. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_self_transition.py +0 -0
  336. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/showcase_simple.py +0 -0
  337. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/transition_from_any.py +0 -0
  338. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/tutorial_coffee_order.py +0 -0
  339. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/__init__.py +0 -0
  340. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/multi_validator.py +0 -0
  341. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/order_validation.py +0 -0
  342. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/order_validation_no_error_events.py +0 -0
  343. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/validator_fallthrough.py +0 -0
  344. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/validator_with_cond.py +0 -0
  345. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/validators/validator_with_error_transition.py +0 -0
  346. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/workflow/__init__.py +0 -0
  347. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine.py +0 -0
  348. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine_with_validator.py +0 -0
  349. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/workflow/campaign_machine_with_values.py +0 -0
  350. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/machines/workflow/reverse_traffic_light.py +0 -0
  351. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/models.py +0 -0
  352. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/__init__.py +0 -0
  353. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/_harness.py +0 -0
  354. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/conftest.py +0 -0
  355. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/test_microwave.py +0 -0
  356. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/test_scxml_cases.py +0 -0
  357. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/LICENSE +0 -0
  358. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test144.scxml +0 -0
  359. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test145.scxml +0 -0
  360. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test147.scxml +0 -0
  361. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test148.scxml +0 -0
  362. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test149.scxml +0 -0
  363. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test150.scxml +0 -0
  364. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test151.scxml +0 -0
  365. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test152.scxml +0 -0
  366. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test153.scxml +0 -0
  367. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test155.scxml +0 -0
  368. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test156.scxml +0 -0
  369. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test158.scxml +0 -0
  370. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test159.scxml +0 -0
  371. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test172.scxml +0 -0
  372. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test173.scxml +0 -0
  373. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test174.scxml +0 -0
  374. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test175.scxml +0 -0
  375. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test176.scxml +0 -0
  376. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test179.scxml +0 -0
  377. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test183.scxml +0 -0
  378. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test185.scxml +0 -0
  379. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test186.scxml +0 -0
  380. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test187.scxml +0 -0
  381. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test189.scxml +0 -0
  382. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test190.scxml +0 -0
  383. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test191.scxml +0 -0
  384. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test192.scxml +0 -0
  385. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test194.scxml +0 -0
  386. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test198.scxml +0 -0
  387. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test199.scxml +0 -0
  388. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test200.scxml +0 -0
  389. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test205.scxml +0 -0
  390. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test207.scxml +0 -0
  391. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test208.scxml +0 -0
  392. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test210.scxml +0 -0
  393. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test215.scxml +0 -0
  394. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test216.scxml +0 -0
  395. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test216sub1.scxml +0 -0
  396. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test220.scxml +0 -0
  397. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test223.scxml +0 -0
  398. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test224.scxml +0 -0
  399. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test225.scxml +0 -0
  400. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test226.scxml +0 -0
  401. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test226sub1.scxml +0 -0
  402. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test228.scxml +0 -0
  403. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test229.scxml +0 -0
  404. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test232.scxml +0 -0
  405. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test233.scxml +0 -0
  406. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test234.scxml +0 -0
  407. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test235.scxml +0 -0
  408. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test236.scxml +0 -0
  409. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test237.scxml +0 -0
  410. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test239.scxml +0 -0
  411. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test239sub1.scxml +0 -0
  412. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test240.scxml +0 -0
  413. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test241.scxml +0 -0
  414. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test242.scxml +0 -0
  415. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test242sub1.scxml +0 -0
  416. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test243.scxml +0 -0
  417. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test244.scxml +0 -0
  418. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test245.scxml +0 -0
  419. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test247.scxml +0 -0
  420. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test252.scxml +0 -0
  421. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test253.scxml +0 -0
  422. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test276.scxml +0 -0
  423. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test276sub1.scxml +0 -0
  424. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test277.scxml +0 -0
  425. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test279.scxml +0 -0
  426. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test280.scxml +0 -0
  427. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test286.scxml +0 -0
  428. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test287.scxml +0 -0
  429. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test294.scxml +0 -0
  430. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test298.scxml +0 -0
  431. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test302.scxml +0 -0
  432. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test303.scxml +0 -0
  433. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test304.scxml +0 -0
  434. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test309.scxml +0 -0
  435. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test310.scxml +0 -0
  436. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test311.scxml +0 -0
  437. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test312.scxml +0 -0
  438. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test318.scxml +0 -0
  439. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test319.scxml +0 -0
  440. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test321.scxml +0 -0
  441. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test322.scxml +0 -0
  442. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test323.scxml +0 -0
  443. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test324.scxml +0 -0
  444. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test325.scxml +0 -0
  445. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test326.scxml +0 -0
  446. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test329.scxml +0 -0
  447. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test330.scxml +0 -0
  448. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test331.scxml +0 -0
  449. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test332.scxml +0 -0
  450. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test333.scxml +0 -0
  451. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test335.scxml +0 -0
  452. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test336.scxml +0 -0
  453. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test337.scxml +0 -0
  454. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test338.scxml +0 -0
  455. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test339.scxml +0 -0
  456. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test342.scxml +0 -0
  457. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test343.scxml +0 -0
  458. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test344.scxml +0 -0
  459. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test346.scxml +0 -0
  460. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test347.scxml +0 -0
  461. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test348.scxml +0 -0
  462. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test349.scxml +0 -0
  463. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test350.scxml +0 -0
  464. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test351.scxml +0 -0
  465. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test352.scxml +0 -0
  466. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test354.scxml +0 -0
  467. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test355.scxml +0 -0
  468. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test364.scxml +0 -0
  469. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test372.scxml +0 -0
  470. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test375.scxml +0 -0
  471. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test376.scxml +0 -0
  472. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test377.scxml +0 -0
  473. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test378.scxml +0 -0
  474. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test387.scxml +0 -0
  475. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test388.scxml +0 -0
  476. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test396.scxml +0 -0
  477. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test399.scxml +0 -0
  478. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test401.scxml +0 -0
  479. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test402.scxml +0 -0
  480. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403a.scxml +0 -0
  481. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403b.scxml +0 -0
  482. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test403c.scxml +0 -0
  483. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test404.scxml +0 -0
  484. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test405.scxml +0 -0
  485. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test406.scxml +0 -0
  486. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test407.scxml +0 -0
  487. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test409.scxml +0 -0
  488. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test411.scxml +0 -0
  489. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test412.scxml +0 -0
  490. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test413.scxml +0 -0
  491. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test416.scxml +0 -0
  492. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test417.scxml +0 -0
  493. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test419.scxml +0 -0
  494. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test421.scxml +0 -0
  495. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test422.scxml +0 -0
  496. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test423.scxml +0 -0
  497. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test487.scxml +0 -0
  498. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test488.scxml +0 -0
  499. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test495.scxml +0 -0
  500. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test496.scxml +0 -0
  501. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test500.scxml +0 -0
  502. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test501.scxml +0 -0
  503. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test503.scxml +0 -0
  504. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test504.scxml +0 -0
  505. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test505.scxml +0 -0
  506. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test506.scxml +0 -0
  507. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test521.scxml +0 -0
  508. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test525.scxml +0 -0
  509. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test527.scxml +0 -0
  510. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test528.scxml +0 -0
  511. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test529.scxml +0 -0
  512. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test530.scxml +0 -0
  513. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test533.scxml +0 -0
  514. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test550.scxml +0 -0
  515. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test551.scxml +0 -0
  516. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test552.scxml +0 -0
  517. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test552.txt +0 -0
  518. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test553.scxml +0 -0
  519. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test554.scxml +0 -0
  520. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test570.scxml +0 -0
  521. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test576.scxml +0 -0
  522. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test579.scxml +0 -0
  523. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/mandatory/test580.scxml +0 -0
  524. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test193.scxml +0 -0
  525. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test201.scxml +0 -0
  526. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test278.scxml +0 -0
  527. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test444.scxml +0 -0
  528. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test445.scxml +0 -0
  529. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test446.scxml +0 -0
  530. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test446.txt +0 -0
  531. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test448.scxml +0 -0
  532. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test449.scxml +0 -0
  533. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test451.scxml +0 -0
  534. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test452.scxml +0 -0
  535. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test453.scxml +0 -0
  536. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test456.scxml +0 -0
  537. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test457.scxml +0 -0
  538. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test459.scxml +0 -0
  539. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test460.scxml +0 -0
  540. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test509.scxml +0 -0
  541. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test510.scxml +0 -0
  542. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test518.scxml +0 -0
  543. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test519.scxml +0 -0
  544. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test520.scxml +0 -0
  545. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test522.scxml +0 -0
  546. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test531.scxml +0 -0
  547. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test532.scxml +0 -0
  548. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test534.scxml +0 -0
  549. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test557.scxml +0 -0
  550. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test557.txt +0 -0
  551. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test558.scxml +0 -0
  552. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test558.txt +0 -0
  553. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test560.scxml +0 -0
  554. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test561.scxml +0 -0
  555. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test562.scxml +0 -0
  556. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test567.scxml +0 -0
  557. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test569.scxml +0 -0
  558. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test577.scxml +0 -0
  559. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/scxml/w3c/optional/test578.scxml +0 -0
  560. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_actions.py +0 -0
  561. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_api_contract.py +0 -0
  562. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_async.py +0 -0
  563. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_callbacks_isolation.py +0 -0
  564. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_class_listeners.py +0 -0
  565. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_configuration.py +0 -0
  566. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_contrib_timeout.py +0 -0
  567. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_copy.py +0 -0
  568. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_dispatcher.py +0 -0
  569. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_error_execution.py +0 -0
  570. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_examples.py +0 -0
  571. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_fellowship_quest.py +0 -0
  572. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_io.py +0 -0
  573. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_listener.py +0 -0
  574. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_mermaid_renderer.py +0 -0
  575. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_mixins.py +0 -0
  576. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_mock_compatibility.py +0 -0
  577. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_multiple_destinations.py +0 -0
  578. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_optional_pydot.py +0 -0
  579. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_profiling.py +0 -0
  580. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_registry.py +0 -0
  581. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_rtc.py +0 -0
  582. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_scxml_datamodel.py +0 -0
  583. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_signature.py +0 -0
  584. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_signature_positional_only.py +0 -0
  585. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_state_callbacks.py +0 -0
  586. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statechart_donedata.py +0 -0
  587. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statechart_error.py +0 -0
  588. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statechart_eventless.py +0 -0
  589. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statechart_history.py +0 -0
  590. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statechart_in_condition.py +0 -0
  591. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statemachine.py +0 -0
  592. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statemachine_bounded_transitions.py +0 -0
  593. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statemachine_compat.py +0 -0
  594. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_statemachine_inheritance.py +0 -0
  595. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_threading.py +0 -0
  596. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_transition_list.py +0 -0
  597. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_transition_table.py +0 -0
  598. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_transitions.py +0 -0
  599. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_validators.py +0 -0
  600. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/test_weighted_transitions.py +0 -0
  601. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/__init__.py +0 -0
  602. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/issue308.md +0 -0
  603. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/issue384_multiple_observers.md +0 -0
  604. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/issue449.md +0 -0
  605. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/test_issue434.py +0 -0
  606. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/test_issue480.py +0 -0
  607. {python_statemachine-3.2.0 → python_statemachine-3.2.2}/tests/testcases/test_issue509.py +0 -0
@@ -0,0 +1,51 @@
1
+ name: pages
2
+
3
+ # Publishes the static assets served at https://fgmacedo.github.io/python-statemachine/
4
+ # Currently: the native statechart JSON Schema, at the canonical URL used as its `$id`
5
+ # (statemachine/io/schemas/statechart.schema.json -> /schemas/statechart/v1.json).
6
+
7
+ on:
8
+ push:
9
+ branches: [main]
10
+ paths:
11
+ - statemachine/io/schemas/statechart.schema.json
12
+ - .github/workflows/pages.yml
13
+ release:
14
+ types: [published]
15
+ workflow_dispatch:
16
+
17
+ permissions:
18
+ contents: read
19
+ pages: write
20
+ id-token: write
21
+
22
+ # Allow one concurrent deployment; don't cancel an in-progress publish.
23
+ concurrency:
24
+ group: pages
25
+ cancel-in-progress: false
26
+
27
+ jobs:
28
+ deploy:
29
+ runs-on: ubuntu-latest
30
+ environment:
31
+ name: github-pages
32
+ url: ${{ steps.deployment.outputs.page_url }}
33
+ steps:
34
+ - uses: actions/checkout@v7
35
+ - name: Assemble site
36
+ run: |
37
+ mkdir -p _site/schemas/statechart
38
+ cp statemachine/io/schemas/statechart.schema.json _site/schemas/statechart/v1.json
39
+ cat > _site/index.html <<'HTML'
40
+ <!doctype html>
41
+ <meta charset="utf-8">
42
+ <title>python-statemachine</title>
43
+ <meta http-equiv="refresh" content="0; url=https://python-statemachine.readthedocs.io/">
44
+ <p>See the <a href="schemas/statechart/v1.json">statechart JSON Schema</a> or the
45
+ <a href="https://python-statemachine.readthedocs.io/">documentation</a>.</p>
46
+ HTML
47
+ - uses: actions/upload-pages-artifact@v5
48
+ with:
49
+ path: _site
50
+ - id: deployment
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,12 +303,16 @@ 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:`)
312
+ - **NEVER bypass pre-commit hooks** (`--no-verify`, `-n`, or disabling hooks). The hooks
313
+ inspect every commit to keep regressions out; only the maintainer may decide to skip them.
314
+ If a hook modifies files (e.g. `generate-images` regenerating a diagram PNG), stage the
315
+ generated changes and commit again until the hooks pass — do not skip them.
305
316
 
306
317
  ## Security
307
318
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: python-statemachine
3
- Version: 3.2.0
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:
@@ -145,10 +145,13 @@ levels of the hierarchy.
145
145
 
146
146
  ```{note}
147
147
  The generic `on_exit_state()` and `on_enter_state()` callbacks also fire
148
- once per state in the set, but the `state` parameter is bound to the
149
- transition's `source` or `target` — not the individual state being
150
- exited/entered. Use `event_data` if you need the full context, or prefer
151
- state-specific callbacks for clarity.
148
+ once per state in the set, and the `state` parameter is bound to the
149
+ individual state being exited or entered, so you can tell each level of a
150
+ compound apart. On entry, `target` matches `state`; on exit, `source`
151
+ matches `state`. The opposite endpoint stays fixed at the transition's
152
+ `source` (on entry) or `target` (on exit). Prefer state-specific callbacks
153
+ (`on_exit_<state>`, `on_enter_<state>`) when you want to target one level
154
+ directly.
152
155
  ```
153
156
 
154
157
  ```{seealso}
@@ -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)=
@@ -28,7 +28,7 @@ SCXML-compliant behavior provides more predictable semantics.
28
28
  ```{warning}
29
29
  This page describes runtime *semantics*. If you **load SCXML documents** via
30
30
  `SCXMLProcessor`, note that SCXML is executable content: by default the
31
- datamodel is evaluated with a restricted AST whitelist and `<script>` is
31
+ datamodel is evaluated with a restricted AST allowlist and `<script>` is
32
32
  rejected, so untrusted documents cannot execute arbitrary code. Pass
33
33
  `trusted=True` only for SCXML you control. See the 3.2.0 release notes and
34
34
  GHSA-v4jc-pm6r-3vj8.
@@ -158,6 +158,10 @@ When `True` (SCXML default), runtime exceptions in action callbacks
158
158
  internal `error.execution` events. When `False` (legacy default), exceptions
159
159
  propagate normally to the caller.
160
160
 
161
+ This flag only governs exceptions raised **inside** an action callback. An event
162
+ that doesn't match any enabled transition is a different case, controlled by
163
+ {ref}`allow_event_without_transition <behaviour>` instead.
164
+
161
165
  ```{note}
162
166
  {ref}`Validators <validators>` are **not** affected by this flag — they
163
167
  always propagate exceptions to the caller, regardless of the
@@ -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.