django-viewflow 2.2.7__tar.gz → 2.2.8__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 (324) hide show
  1. {django_viewflow-2.2.7/django_viewflow.egg-info → django-viewflow-2.2.8}/PKG-INFO +42 -3
  2. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/README.md +41 -0
  3. {django_viewflow-2.2.7 → django-viewflow-2.2.8/django_viewflow.egg-info}/PKG-INFO +42 -3
  4. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/setup.py +1 -1
  5. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/base.py +6 -4
  6. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/typing.py +1 -1
  7. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/jsonstore.py +8 -1
  8. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/base.py +3 -4
  9. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/sites.py +2 -2
  10. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/utils.py +1 -0
  11. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/base.py +3 -2
  12. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/fields.py +7 -1
  13. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/mixins.py +8 -6
  14. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/nodes.py +20 -0
  15. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/models.py +6 -0
  16. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/LICENSE +0 -0
  17. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/LICENSE_EXCEPTION +0 -0
  18. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/MANIFEST.in +0 -0
  19. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/SOURCES.txt +0 -0
  20. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/dependency_links.txt +0 -0
  21. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/not-zip-safe +0 -0
  22. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/requires.txt +0 -0
  23. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/top_level.txt +0 -0
  24. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/setup.cfg +0 -0
  25. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_middleware.py +0 -0
  26. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_templates.py +0 -0
  27. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_templatetags__viewflow.py +0 -0
  28. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_this_object.py +0 -0
  29. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_urls__base.py +0 -0
  30. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_utils__package.py +0 -0
  31. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/__init__.py +0 -0
  32. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/apps.py +0 -0
  33. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/conf.py +0 -0
  34. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/__init__.py +0 -0
  35. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/admin/__init__.py +0 -0
  36. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/admin/apps.py +0 -0
  37. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/auth.py +0 -0
  38. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/__init__.py +0 -0
  39. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/material.py +0 -0
  40. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/views.py +0 -0
  41. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/viewset.py +0 -0
  42. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fields.py +0 -0
  43. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/forms/__init__.py +0 -0
  44. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/forms/renderers.py +0 -0
  45. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/__init__.py +0 -0
  46. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/admin.py +0 -0
  47. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/chart.py +0 -0
  48. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/views.py +0 -0
  49. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/viewset.py +0 -0
  50. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
  51. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
  52. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
  53. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
  54. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
  55. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
  56. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
  57. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
  58. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
  59. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
  60. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
  61. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
  62. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
  63. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
  64. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
  65. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
  66. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
  67. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
  68. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
  69. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
  70. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  71. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  72. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/management/__init__.py +0 -0
  73. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/management/commands/__init__.py +0 -0
  74. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/management/commands/flowexport.py +0 -0
  75. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/middleware.py +0 -0
  76. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
  77. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/trix.css +0 -0
  78. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
  79. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
  80. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
  81. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
  82. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
  83. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
  84. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
  85. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
  86. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
  87. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
  88. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
  89. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
  90. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
  91. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
  92. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
  93. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  94. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  95. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
  96. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
  97. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  98. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  99. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
  100. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
  101. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
  102. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  103. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
  104. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
  105. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  106. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  107. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
  108. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
  109. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  110. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  111. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
  112. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
  113. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  114. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  115. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
  116. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
  117. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
  118. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
  119. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
  120. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
  121. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
  122. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
  123. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/img/favicon.png +0 -0
  124. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/img/user.png +0 -0
  125. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
  126. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
  127. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
  128. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
  129. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
  130. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
  131. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
  132. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
  133. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
  134. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
  135. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
  136. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
  137. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
  138. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
  139. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
  140. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
  141. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
  142. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
  143. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
  144. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
  145. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
  146. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
  147. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
  148. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
  149. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
  150. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
  151. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
  152. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
  153. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
  154. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
  155. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
  156. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
  157. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
  158. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
  159. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
  160. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
  161. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
  162. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
  163. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
  164. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
  165. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
  166. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
  167. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
  168. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
  169. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
  170. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
  171. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
  172. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/smartcrop.js +0 -0
  173. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/trix.js +0 -0
  174. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
  175. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/viewflow.min.js +0 -0
  176. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/viewflow.min.js.map +0 -0
  177. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
  178. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
  179. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/400.html +0 -0
  180. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/403.html +0 -0
  181. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/404.html +0 -0
  182. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/500.html +0 -0
  183. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_change_form.html +0 -0
  184. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
  185. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_change_list.html +0 -0
  186. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_transition_form.html +0 -0
  187. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
  188. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/logged_out.html +0 -0
  189. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/login.html +0 -0
  190. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_change_done.html +0 -0
  191. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_change_form.html +0 -0
  192. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_complete.html +0 -0
  193. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_confirm.html +0 -0
  194. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_done.html +0 -0
  195. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_form.html +0 -0
  196. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/profile.html +0 -0
  197. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/provider_list.html +0 -0
  198. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/base.html +0 -0
  199. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
  200. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/base_page.html +0 -0
  201. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
  202. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
  203. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
  204. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
  205. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
  206. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
  207. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
  208. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
  209. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
  210. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
  211. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
  212. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
  213. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
  214. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
  215. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
  216. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
  217. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/delete_action.html +0 -0
  218. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/detail.html +0 -0
  219. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/form.html +0 -0
  220. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/list.html +0 -0
  221. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/transition.html +0 -0
  222. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/assign.html +0 -0
  223. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
  224. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
  225. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
  226. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
  227. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
  228. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
  229. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
  230. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
  231. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
  232. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
  233. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
  234. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/start.html +0 -0
  235. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task.html +0 -0
  236. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
  237. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
  238. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
  239. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
  240. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_detail.html +0 -0
  241. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
  242. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
  243. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
  244. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
  245. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
  246. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
  247. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
  248. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
  249. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/__init__.py +0 -0
  250. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/fsm.py +0 -0
  251. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/viewflow.py +0 -0
  252. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/workflow.py +0 -0
  253. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/this_object.py +0 -0
  254. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/__init__.py +0 -0
  255. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/model.py +0 -0
  256. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/__init__.py +0 -0
  257. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/actions.py +0 -0
  258. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/create.py +0 -0
  259. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/delete.py +0 -0
  260. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/detail.py +0 -0
  261. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/filters.py +0 -0
  262. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/list.py +0 -0
  263. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/search.py +0 -0
  264. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/update.py +0 -0
  265. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/__init__.py +0 -0
  266. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/activation.py +0 -0
  267. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/admin.py +0 -0
  268. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/apps.py +0 -0
  269. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/base.py +0 -0
  270. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/chart.py +0 -0
  271. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/context.py +0 -0
  272. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/exceptions.py +0 -0
  273. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/__init__.py +0 -0
  274. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/utils.py +0 -0
  275. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/__init__.py +0 -0
  276. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/actions.py +0 -0
  277. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/chart.py +0 -0
  278. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/create.py +0 -0
  279. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/dashboard.py +0 -0
  280. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/detail.py +0 -0
  281. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/filters.py +0 -0
  282. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/list.py +0 -0
  283. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/mixins.py +0 -0
  284. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/update.py +0 -0
  285. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/viewset.py +0 -0
  286. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/lock.py +0 -0
  287. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/managers.py +0 -0
  288. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0001_initial.py +0 -0
  289. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
  290. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
  291. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
  292. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
  293. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0005_merge.py +0 -0
  294. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
  295. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0006_i18n.py +0 -0
  296. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0006_merge.py +0 -0
  297. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
  298. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
  299. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
  300. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0008_merge.py +0 -0
  301. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0009_merge.py +0 -0
  302. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
  303. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
  304. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
  305. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py +0 -0
  306. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0014_alter_process_parent_task.py +0 -0
  307. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/__init__.py +0 -0
  308. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/__init__.py +0 -0
  309. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/end.py +0 -0
  310. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/func.py +0 -0
  311. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/handle.py +0 -0
  312. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/if_gate.py +0 -0
  313. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/job.py +0 -0
  314. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/join.py +0 -0
  315. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/mixins.py +0 -0
  316. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/obsolete.py +0 -0
  317. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/split.py +0 -0
  318. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/start.py +0 -0
  319. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/switch.py +0 -0
  320. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/view.py +0 -0
  321. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/signals.py +0 -0
  322. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/status.py +0 -0
  323. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/token.py +0 -0
  324. {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.2.7
3
+ Version: 2.2.8
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -26,8 +26,6 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or l
26
26
  Requires-Python: >=3.8
27
27
  Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
- Requires-Dist: Django>=4.2
30
- Requires-Dist: django-filter>=2.3.0
31
29
 
32
30
  # Viewflow
33
31
 
@@ -218,6 +216,47 @@ modifications of Viewflow. You can find the commercial license terms in
218
216
 
219
217
  ## Changelog
220
218
 
219
+ ### 2.2.8 2024-10-04
220
+
221
+ - Prevent exceptions from being raised by Process/Task models when a flow class
222
+ is deleted but still referenced in the database.
223
+ - Fix serialization issue with jsonstore.DecimalField.
224
+ - Add missing 'index' view for celery.Task node.
225
+ - Enable recovery of flow.Subprocess and flow.NSubprocess nodes from error state.
226
+ - Correct invalid typing for FSM conditions.
227
+ - Allow setting permission=None in the FSM @transition decorator to explicitly bypass permission checks.
228
+ - Add support for MultiValueField and django-money fields form rendering
229
+
230
+
231
+ ### 2.2.7 2024-08-16
232
+
233
+ - Added compatibility fix for Python 3.8.
234
+ - Extend documentation with data management explanation - https://docs.viewflow.io/workflow/data_flow.html
235
+ - Expanded documentation to cover permission management - https://docs.viewflow.io/workflow/permissions.html
236
+ - Introduced an experimental JSONEditorWidget.
237
+ - Fixed issue with saving the state of revived tasks.
238
+ - Enabled the option to cancel If tasks.
239
+ - Updated default FSM state change in FlowViewsMixin to now use transaction.atomic.
240
+ - Added support for using DependentModelSelect in formsets.
241
+ - Enabled AjaxModelSelect to function as a dependency for DependentModelSelect
242
+ - Corrected typo in the deletion success message.
243
+ - Test under django 5.1
244
+
245
+ ### 2.2.6 2024-08-04
246
+
247
+ - Resolved the flow.If condition's this reference during class construction.
248
+ - Improved error handling when a Celery task finishes.
249
+ - Fixed an issue where errors occurring in a task after a successful celery.Job
250
+ task incorrectly prevented the job task from being marked as completed, with
251
+ the errored task correctly put into an error state.
252
+ - Redirect to the next process task now will take into account tasks in the ERROR state
253
+ - Add ability to revive flow.Function and flow.SplitFirst
254
+ - Fixed an error that occurred when a deleted process.artifact was referenced in
255
+ the process field data listing within templates.
256
+ - Allow to cancel Subprocess tasks
257
+ - Allow to cancel Function tasks
258
+ - Allow custom task models inherited from AbstactTask have no .seed and .data fields
259
+
221
260
  ### 2.2.5 2024-07-17
222
261
 
223
262
  - The 'pattern' widget attribute is now passed to the underlying form input.
@@ -187,6 +187,47 @@ modifications of Viewflow. You can find the commercial license terms in
187
187
 
188
188
  ## Changelog
189
189
 
190
+ ### 2.2.8 2024-10-04
191
+
192
+ - Prevent exceptions from being raised by Process/Task models when a flow class
193
+ is deleted but still referenced in the database.
194
+ - Fix serialization issue with jsonstore.DecimalField.
195
+ - Add missing 'index' view for celery.Task node.
196
+ - Enable recovery of flow.Subprocess and flow.NSubprocess nodes from error state.
197
+ - Correct invalid typing for FSM conditions.
198
+ - Allow setting permission=None in the FSM @transition decorator to explicitly bypass permission checks.
199
+ - Add support for MultiValueField and django-money fields form rendering
200
+
201
+
202
+ ### 2.2.7 2024-08-16
203
+
204
+ - Added compatibility fix for Python 3.8.
205
+ - Extend documentation with data management explanation - https://docs.viewflow.io/workflow/data_flow.html
206
+ - Expanded documentation to cover permission management - https://docs.viewflow.io/workflow/permissions.html
207
+ - Introduced an experimental JSONEditorWidget.
208
+ - Fixed issue with saving the state of revived tasks.
209
+ - Enabled the option to cancel If tasks.
210
+ - Updated default FSM state change in FlowViewsMixin to now use transaction.atomic.
211
+ - Added support for using DependentModelSelect in formsets.
212
+ - Enabled AjaxModelSelect to function as a dependency for DependentModelSelect
213
+ - Corrected typo in the deletion success message.
214
+ - Test under django 5.1
215
+
216
+ ### 2.2.6 2024-08-04
217
+
218
+ - Resolved the flow.If condition's this reference during class construction.
219
+ - Improved error handling when a Celery task finishes.
220
+ - Fixed an issue where errors occurring in a task after a successful celery.Job
221
+ task incorrectly prevented the job task from being marked as completed, with
222
+ the errored task correctly put into an error state.
223
+ - Redirect to the next process task now will take into account tasks in the ERROR state
224
+ - Add ability to revive flow.Function and flow.SplitFirst
225
+ - Fixed an error that occurred when a deleted process.artifact was referenced in
226
+ the process field data listing within templates.
227
+ - Allow to cancel Subprocess tasks
228
+ - Allow to cancel Function tasks
229
+ - Allow custom task models inherited from AbstactTask have no .seed and .data fields
230
+
190
231
  ### 2.2.5 2024-07-17
191
232
 
192
233
  - The 'pattern' widget attribute is now passed to the underlying form input.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.2.7
3
+ Version: 2.2.8
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -26,8 +26,6 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or l
26
26
  Requires-Python: >=3.8
27
27
  Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
- Requires-Dist: Django>=4.2
30
- Requires-Dist: django-filter>=2.3.0
31
29
 
32
30
  # Viewflow
33
31
 
@@ -218,6 +216,47 @@ modifications of Viewflow. You can find the commercial license terms in
218
216
 
219
217
  ## Changelog
220
218
 
219
+ ### 2.2.8 2024-10-04
220
+
221
+ - Prevent exceptions from being raised by Process/Task models when a flow class
222
+ is deleted but still referenced in the database.
223
+ - Fix serialization issue with jsonstore.DecimalField.
224
+ - Add missing 'index' view for celery.Task node.
225
+ - Enable recovery of flow.Subprocess and flow.NSubprocess nodes from error state.
226
+ - Correct invalid typing for FSM conditions.
227
+ - Allow setting permission=None in the FSM @transition decorator to explicitly bypass permission checks.
228
+ - Add support for MultiValueField and django-money fields form rendering
229
+
230
+
231
+ ### 2.2.7 2024-08-16
232
+
233
+ - Added compatibility fix for Python 3.8.
234
+ - Extend documentation with data management explanation - https://docs.viewflow.io/workflow/data_flow.html
235
+ - Expanded documentation to cover permission management - https://docs.viewflow.io/workflow/permissions.html
236
+ - Introduced an experimental JSONEditorWidget.
237
+ - Fixed issue with saving the state of revived tasks.
238
+ - Enabled the option to cancel If tasks.
239
+ - Updated default FSM state change in FlowViewsMixin to now use transaction.atomic.
240
+ - Added support for using DependentModelSelect in formsets.
241
+ - Enabled AjaxModelSelect to function as a dependency for DependentModelSelect
242
+ - Corrected typo in the deletion success message.
243
+ - Test under django 5.1
244
+
245
+ ### 2.2.6 2024-08-04
246
+
247
+ - Resolved the flow.If condition's this reference during class construction.
248
+ - Improved error handling when a Celery task finishes.
249
+ - Fixed an issue where errors occurring in a task after a successful celery.Job
250
+ task incorrectly prevented the job task from being marked as completed, with
251
+ the errored task correctly put into an error state.
252
+ - Redirect to the next process task now will take into account tasks in the ERROR state
253
+ - Add ability to revive flow.Function and flow.SplitFirst
254
+ - Fixed an error that occurred when a deleted process.artifact was referenced in
255
+ the process field data listing within templates.
256
+ - Allow to cancel Subprocess tasks
257
+ - Allow to cancel Function tasks
258
+ - Allow custom task models inherited from AbstactTask have no .seed and .data fields
259
+
221
260
  ### 2.2.5 2024-07-17
222
261
 
223
262
  - The 'pattern' widget attribute is now passed to the underlying form input.
@@ -4,7 +4,7 @@ README = open("README.md", "r", encoding="utf-8").read()
4
4
 
5
5
  setuptools.setup(
6
6
  name="django-viewflow",
7
- version="2.2.7",
7
+ version="2.2.8",
8
8
  author_email="kmmbvnr@gmail.com",
9
9
  author="Mikhail Podgurskiy",
10
10
  description="Reusable library to build business applications fast",
@@ -12,7 +12,7 @@ from __future__ import annotations
12
12
  import inspect
13
13
  from typing import Any, Dict, Mapping, Iterable, List, Type, Optional
14
14
  from viewflow.this_object import ThisObject
15
- from viewflow.utils import MARKER
15
+ from viewflow.utils import DEFAULT, MARKER
16
16
  from .typing import (
17
17
  UserModel,
18
18
  Condition,
@@ -39,7 +39,7 @@ class Transition:
39
39
  target: Optional[StateValue],
40
40
  label: Optional[str] = None,
41
41
  conditions: Optional[List[Condition]] = None,
42
- permission: Optional[Permission] = None,
42
+ permission: Optional[Permission] = DEFAULT,
43
43
  custom: Optional[Dict] = None,
44
44
  ): # noqa D102
45
45
  self.func = func
@@ -86,8 +86,10 @@ class Transition:
86
86
 
87
87
  def has_perm(self, instance: object, user: UserModel) -> bool:
88
88
  """Checks if the given user has permission to perform this transition."""
89
+ if self.permission is DEFAULT:
90
+ return False # Protected by default
89
91
  if self.permission is None:
90
- return False # No permission required
92
+ return True # Explicitly allowed to any
91
93
  elif callable(self.permission):
92
94
  return self.permission(instance, user)
93
95
  elif isinstance(self.permission, ThisObject):
@@ -410,7 +412,7 @@ class State:
410
412
  target: Optional[StateValue] = None,
411
413
  label: Optional[str] = None,
412
414
  conditions: Optional[List[Condition]] = None,
413
- permission: Optional[Permission] = None,
415
+ permission: Optional[Permission] = DEFAULT,
414
416
  custom: Optional[Dict] = None,
415
417
  ) -> Any:
416
418
  """Decorator to mark a method as a state transition."""
@@ -13,7 +13,7 @@ if TYPE_CHECKING:
13
13
 
14
14
  UserModel = Any
15
15
  StateValue = Any
16
- Condition = Union[ThisObject, Callable[[object, object], bool]]
16
+ Condition = Union[ThisObject, Callable[[object], bool]]
17
17
  Permission = Union[ThisObject, Callable[[object, Any], bool]]
18
18
  StateTransitions = Mapping["TransitionMethod", List["Transition"]]
19
19
  TransitionFunction = Callable[..., Any]
@@ -8,6 +8,7 @@
8
8
  import copy
9
9
  import json
10
10
  from datetime import date, datetime
11
+ from decimal import Decimal
11
12
  from functools import partialmethod
12
13
 
13
14
  from django.core.exceptions import FieldError
@@ -190,7 +191,13 @@ class DateTimeField(JSONFieldMixin, fields.DateTimeField):
190
191
 
191
192
 
192
193
  class DecimalField(JSONFieldMixin, fields.DecimalField):
193
- pass
194
+ def to_json(self, value):
195
+ if value is not None:
196
+ return str(value)
197
+
198
+ def from_json(self, value):
199
+ if value is not None:
200
+ return Decimal(value)
194
201
 
195
202
 
196
203
  class EmailField(JSONFieldMixin, fields.EmailField):
@@ -8,10 +8,9 @@ import copy
8
8
  import types
9
9
  import warnings
10
10
  from collections import namedtuple, OrderedDict
11
- from typing import Optional, Dict, Any, List, Union
12
-
11
+ from typing import Optional, Dict, Any, List
13
12
  from django.views.generic import RedirectView
14
- from django.urls import URLPattern, URLResolver, include, path, reverse
13
+ from django.urls import ResolverMatch, URLPattern, URLResolver, include, path, reverse
15
14
  from django.urls.resolvers import RoutePattern
16
15
 
17
16
  from viewflow.utils import (
@@ -40,7 +39,7 @@ class _URLResolver(URLResolver):
40
39
  self.extra = kwargs.pop("extra", {})
41
40
  super(_URLResolver, self).__init__(*args, **kwargs)
42
41
 
43
- def resolve(self, *args, **kwargs) -> str:
42
+ def resolve(self, *args, **kwargs) -> ResolverMatch:
44
43
  result = super(_URLResolver, self).resolve(*args, **kwargs)
45
44
  if not isinstance(result.url_name, _UrlName):
46
45
  result.url_name = _UrlName(result.url_name)
@@ -17,7 +17,7 @@ class AppMenuMixin:
17
17
  """A route that can be listed in an Application menu."""
18
18
 
19
19
  title = None
20
- icon = Icon("view_carousel")
20
+ icon: Icon | str = Icon("view_carousel")
21
21
 
22
22
  def __init__(self, **kwargs):
23
23
  super().__init__(**kwargs)
@@ -47,7 +47,7 @@ class AppMenuMixin:
47
47
 
48
48
  class Application(IndexViewMixin, Viewset):
49
49
  title = ""
50
- icon = Icon("view_module")
50
+ icon: Icon | str = Icon("view_module")
51
51
  menu_template_name = "viewflow/includes/app_menu.html"
52
52
  base_template_name = "viewflow/base_page.html"
53
53
  permission = None
@@ -230,6 +230,7 @@ def get_object_data(obj: models.Model) -> Iterator[Tuple[models.Field, str, Any]
230
230
 
231
231
  if (
232
232
  hasattr(obj, "artifact_object_id")
233
+ and hasattr(obj, "artifact")
233
234
  and obj.artifact_object_id
234
235
  and obj.artifact is not None
235
236
  ):
@@ -5,6 +5,7 @@
5
5
  # LICENSE_EXCEPTION and the Commercial licence defined in file 'COMM_LICENSE',
6
6
  # which is part of this source code package.
7
7
 
8
+ from typing import Any, List, Union
8
9
  from django import forms
9
10
  from viewflow.utils import viewprop
10
11
  from viewflow.forms import Span
@@ -29,7 +30,7 @@ class FormLayoutMixin(object):
29
30
  Mixin for FormView to infer View.fields definition from form Layout.
30
31
  """
31
32
 
32
- form_class = None
33
+ form_class: Any = None
33
34
 
34
35
  @viewprop
35
36
  def layout(self):
@@ -37,7 +38,7 @@ class FormLayoutMixin(object):
37
38
  return self.form_class.layout
38
39
 
39
40
  @viewprop
40
- def fields(self):
41
+ def fields(self) -> Any:
41
42
  if self.form_class is None:
42
43
  if self.layout is not None:
43
44
  return _collect_elements(self.layout)
@@ -94,6 +94,8 @@ class FlowReferenceField(models.CharField):
94
94
  return import_flow_by_ref(value)
95
95
  except LookupError:
96
96
  return None
97
+ except ImportError:
98
+ return None
97
99
 
98
100
  def get_prep_value(self, value): # noqa D1o2
99
101
  if value and not isinstance(value, str):
@@ -118,7 +120,11 @@ class TaskReferenceField(models.CharField):
118
120
  def from_db_value(self, value, expression, connection):
119
121
  if value is None:
120
122
  return value
121
- return import_task_by_ref(value)
123
+
124
+ try:
125
+ return import_task_by_ref(value)
126
+ except ImportError:
127
+ return None
122
128
 
123
129
  def get_prep_value(self, value): # noqa D102
124
130
  if value and not isinstance(value, str):
@@ -1,3 +1,5 @@
1
+ from typing import Type, Optional
2
+ from django.views import View
1
3
  from django.urls import path
2
4
  from viewflow import viewprop
3
5
  from viewflow.urls import ViewsetMeta
@@ -7,7 +9,7 @@ from . import utils
7
9
  class NodeDetailMixin(metaclass=ViewsetMeta):
8
10
  """Task detail view."""
9
11
 
10
- index_view_class = None
12
+ index_view_class: Optional[Type[View]] = None
11
13
 
12
14
  @viewprop
13
15
  def index_view(self):
@@ -24,7 +26,7 @@ class NodeDetailMixin(metaclass=ViewsetMeta):
24
26
  name="index",
25
27
  )
26
28
 
27
- detail_view_class = None
29
+ detail_view_class: Optional[Type[View]] = None
28
30
 
29
31
  @viewprop
30
32
  def detail_view(self):
@@ -49,7 +51,7 @@ class NodeDetailMixin(metaclass=ViewsetMeta):
49
51
  class NodeExecuteMixin(metaclass=ViewsetMeta):
50
52
  """Re-execute a gate manually."""
51
53
 
52
- execute_view_class = None
54
+ execute_view_class: Optional[Type[View]] = None
53
55
 
54
56
  @viewprop
55
57
  def execute_view(self):
@@ -70,7 +72,7 @@ class NodeExecuteMixin(metaclass=ViewsetMeta):
70
72
  class NodeUndoMixin(metaclass=ViewsetMeta):
71
73
  """Allow to undo a completed task."""
72
74
 
73
- undo_view_class = None
75
+ undo_view_class: Optional[Type[View]] = None
74
76
 
75
77
  @viewprop
76
78
  def undo_view(self):
@@ -94,7 +96,7 @@ class NodeUndoMixin(metaclass=ViewsetMeta):
94
96
  class NodeCancelMixin(metaclass=ViewsetMeta):
95
97
  """Cancel a task action."""
96
98
 
97
- cancel_view_class = None
99
+ cancel_view_class: Optional[Type[View]] = None
98
100
 
99
101
  @viewprop
100
102
  def cancel_view(self):
@@ -120,7 +122,7 @@ class NodeCancelMixin(metaclass=ViewsetMeta):
120
122
  class NodeReviveMixin(metaclass=ViewsetMeta):
121
123
  """Review a canceled task"""
122
124
 
123
- revive_view_class = None
125
+ revive_view_class: Optional[Type[View]] = None
124
126
 
125
127
  @viewprop
126
128
  def revive_view(self):
@@ -420,6 +420,7 @@ try:
420
420
  mixins.NodeDetailMixin,
421
421
  mixins.NodeCancelMixin,
422
422
  mixins.NodeUndoMixin,
423
+ mixins.NodeReviveMixin,
423
424
  nodes.Subprocess,
424
425
  ):
425
426
  """
@@ -452,11 +453,13 @@ try:
452
453
  detail_view_class = views.DetailTaskView
453
454
  cancel_view_class = views.CancelTaskView
454
455
  undo_view_class = views.UndoTaskView
456
+ revive_view_class = views.ReviveTaskView
455
457
 
456
458
  class NSubprocess(
457
459
  mixins.NodeDetailMixin,
458
460
  mixins.NodeCancelMixin,
459
461
  mixins.NodeUndoMixin,
462
+ mixins.NodeReviveMixin,
460
463
  nodes.NSubprocess,
461
464
  ):
462
465
  """
@@ -491,6 +494,7 @@ try:
491
494
  detail_view_class = views.DetailTaskView
492
495
  cancel_view_class = views.CancelTaskView
493
496
  undo_view_class = views.UndoTaskView
497
+ revive_view_class = views.ReviveTaskView
494
498
 
495
499
  except AttributeError:
496
500
  """Pro-only functionality"""
@@ -504,6 +508,22 @@ class Switch(
504
508
  mixins.NodeReviveMixin,
505
509
  nodes.Switch,
506
510
  ):
511
+ """
512
+ Gateway that selects one of the outgoing node.
513
+
514
+ Activates first node with matched condition.
515
+
516
+ Example::
517
+
518
+ select_responsible_person = (
519
+ flow.Switch()
520
+ .Case(this.dean_approval, lambda act: a.process.need_dean)
521
+ .Case(this.head_approval, lambda act: a.process.need_head)
522
+ .Default(this.supervisor_approval)
523
+ )
524
+
525
+ """
526
+
507
527
  index_view_class = views.IndexTaskView
508
528
  detail_view_class = views.DetailTaskView
509
529
  cancel_view_class = views.CancelTaskView
@@ -43,6 +43,9 @@ class AbstractProcess(models.Model):
43
43
  @property
44
44
  def brief(self):
45
45
  """Quick textual process state representation for end user."""
46
+ if self.flow_class is None:
47
+ return None
48
+
46
49
  template_content = ""
47
50
 
48
51
  if self.finished:
@@ -175,6 +178,9 @@ class AbstractTask(models.Model):
175
178
 
176
179
  @property
177
180
  def title(self):
181
+ if self.flow_task is None:
182
+ return None
183
+
178
184
  if self.flow_task.task_title:
179
185
  return self.flow_task.task_title
180
186
  return _(str(self.flow_task))
File without changes