django-viewflow 2.0.2__tar.gz → 2.1.0__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.0.2 → django-viewflow-2.1.0}/PKG-INFO +1 -1
  2. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/README.md +3 -19
  3. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/django_viewflow.egg-info/PKG-INFO +1 -1
  4. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/setup.py +1 -1
  5. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/base.py +4 -0
  6. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/profile.html +4 -2
  7. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task.html +1 -1
  8. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_detail.html +3 -3
  9. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/filters.py +4 -1
  10. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/activation.py +5 -2
  11. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/base.py +2 -2
  12. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/nodes.py +5 -0
  13. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/split.py +51 -14
  14. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/LICENSE +0 -0
  15. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/LICENSE.django +0 -0
  16. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/LICENSE_EXCEPTION +0 -0
  17. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/MANIFEST.in +0 -0
  18. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/django_viewflow.egg-info/SOURCES.txt +0 -0
  19. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/django_viewflow.egg-info/dependency_links.txt +0 -0
  20. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/django_viewflow.egg-info/not-zip-safe +0 -0
  21. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/django_viewflow.egg-info/requires.txt +0 -0
  22. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/django_viewflow.egg-info/top_level.txt +0 -0
  23. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/setup.cfg +0 -0
  24. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/tests/test_middleware.py +0 -0
  25. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/tests/test_templates.py +0 -0
  26. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/tests/test_templatetags__viewflow.py +0 -0
  27. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/tests/test_this_object.py +0 -0
  28. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/tests/test_urls__base.py +0 -0
  29. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/tests/test_utils__package.py +0 -0
  30. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/__init__.py +0 -0
  31. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/apps.py +0 -0
  32. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/conf.py +0 -0
  33. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/__init__.py +0 -0
  34. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/admin/__init__.py +0 -0
  35. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/admin/apps.py +0 -0
  36. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/auth.py +0 -0
  37. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/plotly/__init__.py +0 -0
  38. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/plotly/material.py +0 -0
  39. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/plotly/views.py +0 -0
  40. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/contrib/plotly/viewset.py +0 -0
  41. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fields.py +0 -0
  42. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/forms/__init__.py +0 -0
  43. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/forms/renderers.py +0 -0
  44. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/__init__.py +0 -0
  45. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/admin.py +0 -0
  46. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/chart.py +0 -0
  47. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/typing.py +0 -0
  48. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/views.py +0 -0
  49. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/fsm/viewset.py +0 -0
  50. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/jsonstore.py +0 -0
  51. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
  52. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
  53. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
  54. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
  55. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
  56. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
  57. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
  58. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
  59. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
  60. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
  61. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
  62. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
  63. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
  64. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
  65. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
  66. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
  67. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
  68. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
  69. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
  70. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
  71. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  72. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  73. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/management/__init__.py +0 -0
  74. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/management/commands/__init__.py +0 -0
  75. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/management/commands/flowexport.py +0 -0
  76. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/middleware.py +0 -0
  77. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
  78. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/css/trix.css +0 -0
  79. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
  80. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
  81. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
  82. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
  83. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
  84. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
  85. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
  86. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
  87. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
  88. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
  89. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
  90. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
  91. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
  92. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
  93. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
  94. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  95. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  96. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
  97. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
  98. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  99. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  100. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
  101. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
  102. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
  103. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  104. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
  105. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
  106. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  107. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  108. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
  109. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
  110. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  111. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  112. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
  113. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
  114. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  115. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  116. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
  117. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
  118. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
  119. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
  120. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
  121. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
  122. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
  123. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
  124. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/img/favicon.png +0 -0
  125. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/img/user.png +0 -0
  126. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
  127. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
  128. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
  129. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
  130. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
  131. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
  132. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
  133. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
  134. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
  135. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
  136. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
  137. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
  138. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
  139. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
  140. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
  141. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
  142. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
  143. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
  144. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
  145. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
  146. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
  147. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
  148. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
  149. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
  150. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
  151. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
  152. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
  153. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
  154. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
  155. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
  156. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
  157. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
  158. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
  159. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
  160. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
  161. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
  162. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
  163. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
  164. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
  165. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
  166. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
  167. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
  168. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
  169. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
  170. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
  171. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
  172. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
  173. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/smartcrop.js +0 -0
  174. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/trix.js +0 -0
  175. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
  176. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/viewflow.min.js +0 -0
  177. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/viewflow.min.js.map +0 -0
  178. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
  179. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
  180. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/400.html +0 -0
  181. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/403.html +0 -0
  182. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/404.html +0 -0
  183. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/500.html +0 -0
  184. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/admin/fsm_change_form.html +0 -0
  185. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
  186. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/admin/fsm_change_list.html +0 -0
  187. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/admin/fsm_transition_form.html +0 -0
  188. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
  189. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/logged_out.html +0 -0
  190. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/login.html +0 -0
  191. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/password_change_done.html +0 -0
  192. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/password_change_form.html +0 -0
  193. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/password_reset_complete.html +0 -0
  194. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/password_reset_confirm.html +0 -0
  195. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/password_reset_done.html +0 -0
  196. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/password_reset_form.html +0 -0
  197. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/registration/provider_list.html +0 -0
  198. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/base.html +0 -0
  199. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
  200. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/base_page.html +0 -0
  201. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
  202. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
  203. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
  204. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
  205. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
  206. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
  207. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
  208. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
  209. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
  210. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
  211. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
  212. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
  213. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
  214. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
  215. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
  216. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
  217. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/views/delete_action.html +0 -0
  218. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/views/detail.html +0 -0
  219. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/views/form.html +0 -0
  220. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/views/list.html +0 -0
  221. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/views/transition.html +0 -0
  222. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/assign.html +0 -0
  223. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
  224. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
  225. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
  226. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
  227. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
  228. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
  229. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
  230. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
  231. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
  232. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
  233. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
  234. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/start.html +0 -0
  235. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
  236. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
  237. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
  238. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
  239. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
  240. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
  241. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
  242. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
  243. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
  244. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
  245. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
  246. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
  247. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templatetags/__init__.py +0 -0
  248. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templatetags/fsm.py +0 -0
  249. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templatetags/viewflow.py +0 -0
  250. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/templatetags/workflow.py +0 -0
  251. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/this_object.py +0 -0
  252. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/urls/__init__.py +0 -0
  253. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/urls/base.py +0 -0
  254. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/urls/model.py +0 -0
  255. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/urls/sites.py +0 -0
  256. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/utils.py +0 -0
  257. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/__init__.py +0 -0
  258. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/actions.py +0 -0
  259. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/base.py +0 -0
  260. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/create.py +0 -0
  261. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/delete.py +0 -0
  262. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/detail.py +0 -0
  263. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/list.py +0 -0
  264. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/search.py +0 -0
  265. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/views/update.py +0 -0
  266. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/__init__.py +0 -0
  267. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/admin.py +0 -0
  268. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/apps.py +0 -0
  269. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/chart.py +0 -0
  270. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/context.py +0 -0
  271. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/exceptions.py +0 -0
  272. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/fields.py +0 -0
  273. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/__init__.py +0 -0
  274. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/mixins.py +0 -0
  275. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/utils.py +0 -0
  276. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/__init__.py +0 -0
  277. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/actions.py +0 -0
  278. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/chart.py +0 -0
  279. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/create.py +0 -0
  280. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/dashboard.py +0 -0
  281. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/detail.py +0 -0
  282. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/filters.py +0 -0
  283. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/list.py +0 -0
  284. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/mixins.py +0 -0
  285. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/views/update.py +0 -0
  286. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/flow/viewset.py +0 -0
  287. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/lock.py +0 -0
  288. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/managers.py +0 -0
  289. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0001_initial.py +0 -0
  290. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
  291. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
  292. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
  293. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
  294. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0005_merge.py +0 -0
  295. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
  296. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0006_i18n.py +0 -0
  297. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0006_merge.py +0 -0
  298. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
  299. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
  300. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
  301. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0008_merge.py +0 -0
  302. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0009_merge.py +0 -0
  303. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
  304. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
  305. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
  306. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/migrations/__init__.py +0 -0
  307. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/models.py +0 -0
  308. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/__init__.py +0 -0
  309. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/end.py +0 -0
  310. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/func.py +0 -0
  311. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/handle.py +0 -0
  312. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/if_gate.py +0 -0
  313. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/job.py +0 -0
  314. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/join.py +0 -0
  315. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/mixins.py +0 -0
  316. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/obsolete.py +0 -0
  317. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/start.py +0 -0
  318. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/subprocess.py +0 -0
  319. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/switch.py +0 -0
  320. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/nodes/view.py +0 -0
  321. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/signals.py +0 -0
  322. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/status.py +0 -0
  323. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/token.py +0 -0
  324. {django-viewflow-2.0.2 → django-viewflow-2.1.0}/viewflow/workflow/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.0.2
3
+ Version: 2.1.0
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -183,26 +183,10 @@ modifications of Viewflow. You can find the commercial license terms in
183
183
 
184
184
  ## Changelog
185
185
 
186
- ### 2.0.2 2024-04-19
186
+ ### 2.1.0 2024-06-16
187
187
 
188
- - Fix logout link
189
- - Change admin user autocomplete field to readonly
190
-
191
-
192
- ### 2.0.1 2024-04-17
193
-
194
- - Fix for AjaxModelSelect in m2m relations
195
-
196
-
197
- ### 2.0.0 2024-04-09
198
-
199
- - Added support for Django 5.0+
200
- - Updated to Material Components Web 1.4.0
201
- - Improved help text styles
202
- - Fixed default app_name configuration for Viewsets
203
- - List View initial filter values support
204
- - Enhanced localization support
205
- - Corrected object permission checks for delete actions
188
+ - Allow to assign additional custom data to viewflow.fsm transitions
189
+ - Added `data_source` parameter to `Split.Next()` method, allowing dynamic creation of multiple node instances based on a list of data items.
206
190
 
207
191
 
208
192
  [build]: https://img.shields.io/github/actions/workflow/status/viewflow/viewflow/django.yml?branch=main
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.0.2
3
+ Version: 2.1.0
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -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.0.2",
7
+ version="2.1.0",
8
8
  author_email="kmmbvnr@gmail.com",
9
9
  author="Mikhail Podgurskiy",
10
10
  description="Reusable library to build business applications fast",
@@ -40,6 +40,7 @@ class Transition:
40
40
  label: Optional[str] = None,
41
41
  conditions: Optional[List[Condition]] = None,
42
42
  permission: Optional[Permission] = None,
43
+ custom: Optional[Dict] = None,
43
44
  ): # noqa D102
44
45
  self.func = func
45
46
  self.source = source
@@ -47,6 +48,7 @@ class Transition:
47
48
  self._label = label
48
49
  self.permission = permission
49
50
  self.conditions = conditions if conditions else []
51
+ self.custom = custom if custom is not None else {}
50
52
 
51
53
  def __repr__(self) -> str:
52
54
  return f"<Transition({self.label} {self.source} -> {self.target}) object at {id(self)}>"
@@ -409,6 +411,7 @@ class State:
409
411
  label: Optional[str] = None,
410
412
  conditions: Optional[List[Condition]] = None,
411
413
  permission: Optional[Permission] = None,
414
+ custom: Optional[Dict] = None,
412
415
  ) -> Any:
413
416
  """Decorator to mark a method as a state transition."""
414
417
 
@@ -430,6 +433,7 @@ class State:
430
433
  label=label,
431
434
  conditions=conditions,
432
435
  permission=permission,
436
+ custom=custom,
433
437
  )
434
438
  descriptor.add_transition(transition)
435
439
 
@@ -34,8 +34,10 @@
34
34
  <div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-10">
35
35
  <div class="mdc-card vf-page-profile__detail">
36
36
  <section class="vf-page-profile__detail-header">
37
- <h1 class="mdc-typography--headline6">John Doe</h1>
38
- <h2 class="mdc-typography--subtitle2">admin@admin.com</h2>
37
+ {% block form-header-title %}
38
+ <h1 class="mdc-typography--headline6">{{view.request.user.get_username.title }}</h1>
39
+ {% endblock %}
40
+ {% block form-header-subtitle %}{% endblock %}
39
41
  </section>
40
42
  <section>
41
43
  <table class="vf-list__table">
@@ -11,7 +11,7 @@
11
11
  <section class="vf-card__header">
12
12
  {% block form-header-title %}
13
13
  <h1 class="vf-card__title">
14
- {{ request.activation.task.flow_task }}
14
+ {{ request.activation.task.flow_task.task_title }}
15
15
  </h1>
16
16
  {% endblock %}
17
17
  {% block form-header-subtitle %}
@@ -4,7 +4,7 @@
4
4
  {% block breadcrumbs_items %}
5
5
  <a href="{% reverse viewset 'index' %}">{{ process.flow_class.process_title }}</a>
6
6
  <a href="{% reverse viewset 'process_detail' process.pk %}">#{{ process.pk }}</a>
7
- <a>{{ task.flow_task }} #{{ task.pk}}</a>
7
+ <a>{{ task.flow_task.task_title }} #{{ task.pk}}</a>
8
8
  {% endblock %}
9
9
 
10
10
  {% block task_content %}
@@ -21,7 +21,7 @@
21
21
  <h4 class="mdc-typography mdc-typography--headline5" style="margin-bottom:10px">{% trans "Previous tasks" %}</h4>
22
22
  <div>
23
23
  {% for prev_task in task.previous.all %}
24
- <a class="mdc-typography mdc-typography--subtitle1" href="{% reverse prev_task.flow_task 'index' process.pk prev_task.pk %}">{{ prev_task.flow_task.task_description|default:prev_task.flow_task }}</a>{% if not forloop.last %}, {% endif %}
24
+ <a class="mdc-typography mdc-typography--subtitle1" href="{% reverse prev_task.flow_task 'index' process.pk prev_task.pk %}">{{ prev_task.flow_task.task_description|default:prev_task.flow_task.task_title }}</a>{% if not forloop.last %}, {% endif %}
25
25
  {% empty %}
26
26
  <span class="mdc-typography mdc-typography--subtitle1" style="color:grey">{% trans "No previous tasks" %}</span>
27
27
  {% endfor %}
@@ -31,7 +31,7 @@
31
31
  <h4 class="mdc-typography mdc-typography--headline5" style="margin-bottom:10px">{% trans "Next tasks" %}</h4>
32
32
  <div>
33
33
  {% for next_task in task.leading.all %}
34
- <a class="mdc-typography mdc-typography--subtitle1" href="{% reverse next_task.flow_task 'index' process.pk next_task.pk %}">{{ prev_task.next_task.task_description|default:next_task.flow_task }}</a>{% if not forloop.last %}, {% endif %}
34
+ <a class="mdc-typography mdc-typography--subtitle1" href="{% reverse next_task.flow_task 'index' process.pk next_task.pk %}">{{ next_task.task_description|default:next_task.flow_task.task_title }}</a>{% if not forloop.last %}, {% endif %}
35
35
  {% empty %}
36
36
  <span class="mdc-typography mdc-typography--subtitle1" style="color:grey">{% trans "No next tasks" %}</span>
37
37
  {% endfor %}
@@ -38,7 +38,10 @@ class FilterableViewMixin(object):
38
38
  data = data.copy()
39
39
  for key, value in self.filterset_initial.items():
40
40
  if key not in data:
41
- data[key] = value
41
+ if isinstance(value, (list, tuple, set)):
42
+ data.setlist(key, value)
43
+ else:
44
+ data[key] = value
42
45
 
43
46
  return {
44
47
  **kwargs,
@@ -100,11 +100,14 @@ class Activation(object):
100
100
  return guard()
101
101
 
102
102
  @classmethod
103
- def create(cls, flow_task, prev_activation, token):
103
+ def create(cls, flow_task, prev_activation, token, data=None):
104
104
  """Instantiate and persist new flow task."""
105
105
  flow_class = flow_task.flow_class
106
106
  task = flow_class.task_class(
107
- process=prev_activation.process, flow_task=flow_task, token=token
107
+ process=prev_activation.process,
108
+ flow_task=flow_task,
109
+ token=token,
110
+ data=data if data is not None else {},
108
111
  )
109
112
  task.save()
110
113
  task.previous.add(prev_activation.task)
@@ -130,7 +130,7 @@ class Node(Viewset):
130
130
  Subclasses can perform additional initialization here.
131
131
  """
132
132
 
133
- def _create(self, prev_activation, token):
133
+ def _create(self, prev_activation, token, data=None):
134
134
  """
135
135
  Create a new task instance.
136
136
 
@@ -141,7 +141,7 @@ class Node(Viewset):
141
141
  :returns: The new activation instance.
142
142
  :rtype: Activation
143
143
  """
144
- return self.activation_class.create(self, prev_activation, token)
144
+ return self.activation_class.create(self, prev_activation, token, data=data)
145
145
 
146
146
  def Annotation(
147
147
  self, title=None, description=None, summary_template=None, result_template=None
@@ -315,6 +315,11 @@ class Split(
315
315
  mixins.NodeReviveMixin,
316
316
  nodes.Split,
317
317
  ):
318
+ """
319
+ Parallel split gateway.
320
+
321
+ """
322
+
318
323
  index_view_class = views.IndexTaskView
319
324
  detail_view_class = views.DetailTaskView
320
325
  undo_view_class = views.UndoTaskView
@@ -22,12 +22,14 @@ class SplitActivation(Activation):
22
22
  @Activation.status.super()
23
23
  def activate(self):
24
24
  """Calculate nodes list to activate."""
25
- for node, cond in self.flow_task._branches:
26
- if cond:
27
- if cond(self):
28
- self.next_tasks.append(node)
25
+ for node, cond, data_source in self.flow_task._branches:
26
+ if cond and not cond(self):
27
+ continue
28
+ if data_source:
29
+ for data in data_source(self):
30
+ self.next_tasks.append((node, data))
29
31
  else:
30
- self.next_tasks.append(node)
32
+ self.next_tasks.append((node, None))
31
33
 
32
34
  if not self.next_tasks:
33
35
  raise FlowRuntimeError(
@@ -44,17 +46,47 @@ class SplitActivation(Activation):
44
46
  token_source = Token.split_token_source(self.task.token, self.task.pk)
45
47
 
46
48
  next_tasks = [
47
- task for task in self.next_tasks if not isinstance(task, Join)
48
- ] + [task for task in self.next_tasks if isinstance(task, Join)]
49
+ (task, data) for task, data in self.next_tasks if not isinstance(task, Join)
50
+ ] + [(task, None) for task in self.next_tasks if isinstance(task, Join)]
49
51
 
50
- for n, next_task in enumerate(next_tasks, 1):
51
- yield next_task._create(prev_activation=self, token=next(token_source))
52
+ for n, (next_task, data) in enumerate(next_tasks, 1):
53
+ yield next_task._create(
54
+ prev_activation=self, token=next(token_source), data=data
55
+ )
52
56
 
53
57
 
54
58
  class Split(
55
59
  Node,
56
60
  ):
57
- """Parallel split gateway."""
61
+ """
62
+ Represents a parallel split gateway in a workflow, allowing branching into multiple parallel paths.
63
+
64
+ Methods:
65
+ - `Next(node, case=None, data_source=None)`: Defines the subsequent node in the workflow.
66
+ - `node`: The next node to execute.
67
+ - `case` (optional): A callable that takes an activation and returns `True` if the node should be activated.
68
+ - `data_source` (optional): A callable that takes an activation and returns a list of data items, creating an instance of the node for each item, with `task.data` set to the item.
69
+ - `Always(node)`: A shortcut to define a subsequent node that is always executed.
70
+
71
+ Example:
72
+ ```python
73
+ flow.Split()
74
+ .Next(
75
+ this.approve,
76
+ case=act.process.approved,
77
+ data_source=lambda activation: [{"sample": "test task 1"}, {"sample": "test task 2"}],
78
+ )
79
+ .Always(this.required)
80
+ ```
81
+
82
+ In this example:
83
+ - The `approve` node is executed multiple times based on the `data_source` list.
84
+ - The `required` node is always executed unconditionally in parallel.
85
+
86
+ Notes:
87
+ - If `case` is not provided, the node is always activated.
88
+ - If `data_source` is not provided, the node is created only once.
89
+ """
58
90
 
59
91
  activation_class = SplitActivation
60
92
 
@@ -76,7 +108,7 @@ class Split(
76
108
  self._activate_next = []
77
109
 
78
110
  def _outgoing(self):
79
- for next_node, cond in self._activate_next:
111
+ for next_node, cond, _ in self._activate_next:
80
112
  edge_class = "cond_true" if cond else "default"
81
113
  yield Edge(src=self, dst=next_node, edge_class=edge_class)
82
114
 
@@ -84,20 +116,25 @@ class Split(
84
116
  super()._resolve(instance)
85
117
 
86
118
  self._activate_next = [
87
- (this.resolve(instance, node), cond) for node, cond in self._activate_next
119
+ (
120
+ this.resolve(instance, node),
121
+ this.resolve(instance, cond),
122
+ this.resolve(instance, data_source),
123
+ )
124
+ for node, cond, data_source in self._activate_next
88
125
  ]
89
126
 
90
127
  @property
91
128
  def _branches(self):
92
129
  return self._activate_next
93
130
 
94
- def Next(self, node, case=None):
131
+ def Next(self, node, case=None, data_source=None):
95
132
  """Node to activate if condition is true.
96
133
 
97
134
  :param cond: Callable[activation] -> bool
98
135
 
99
136
  """
100
- self._activate_next.append((node, case))
137
+ self._activate_next.append((node, case, data_source))
101
138
  return self
102
139
 
103
140
  def Always(self, node):
File without changes