django-viewflow 2.2.3__tar.gz → 2.2.4__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.3/django_viewflow.egg-info → django_viewflow-2.2.4}/PKG-INFO +3 -1
  2. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/README.md +20 -0
  3. {django-viewflow-2.2.3 → django_viewflow-2.2.4/django_viewflow.egg-info}/PKG-INFO +3 -1
  4. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/django_viewflow.egg-info/SOURCES.txt +1 -0
  5. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/setup.py +1 -1
  6. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/forms/renderers.py +2 -1
  7. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/graph.svg +7 -7
  8. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/process_cancel.html +3 -3
  9. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/process_data.html +22 -2
  10. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_data.html +22 -0
  11. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_detail.html +10 -0
  12. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templatetags/workflow.py +2 -0
  13. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/activation.py +6 -1
  14. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/chart.py +22 -5
  15. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/actions.py +14 -3
  16. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/create.py +4 -0
  17. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/dashboard.py +4 -2
  18. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/update.py +4 -0
  19. django_viewflow-2.2.4/viewflow/workflow/migrations/0014_alter_process_parent_task.py +25 -0
  20. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/models.py +1 -1
  21. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/job.py +7 -3
  22. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/start.py +2 -0
  23. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/LICENSE +0 -0
  24. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/LICENSE_EXCEPTION +0 -0
  25. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/MANIFEST.in +0 -0
  26. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/django_viewflow.egg-info/dependency_links.txt +0 -0
  27. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/django_viewflow.egg-info/not-zip-safe +0 -0
  28. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/django_viewflow.egg-info/requires.txt +0 -0
  29. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/django_viewflow.egg-info/top_level.txt +0 -0
  30. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/setup.cfg +0 -0
  31. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/tests/test_middleware.py +0 -0
  32. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/tests/test_templates.py +0 -0
  33. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/tests/test_templatetags__viewflow.py +0 -0
  34. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/tests/test_this_object.py +0 -0
  35. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/tests/test_urls__base.py +0 -0
  36. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/tests/test_utils__package.py +0 -0
  37. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/__init__.py +0 -0
  38. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/apps.py +0 -0
  39. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/conf.py +0 -0
  40. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/__init__.py +0 -0
  41. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/admin/__init__.py +0 -0
  42. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/admin/apps.py +0 -0
  43. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/auth.py +0 -0
  44. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/plotly/__init__.py +0 -0
  45. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/plotly/material.py +0 -0
  46. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/plotly/views.py +0 -0
  47. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/contrib/plotly/viewset.py +0 -0
  48. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fields.py +0 -0
  49. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/forms/__init__.py +0 -0
  50. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/__init__.py +0 -0
  51. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/admin.py +0 -0
  52. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/base.py +0 -0
  53. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/chart.py +0 -0
  54. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/typing.py +0 -0
  55. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/views.py +0 -0
  56. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/fsm/viewset.py +0 -0
  57. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/jsonstore.py +0 -0
  58. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
  59. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
  60. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
  61. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
  62. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
  63. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
  64. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
  65. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
  66. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
  67. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
  68. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
  69. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
  70. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
  71. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
  72. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
  73. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
  74. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
  75. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
  76. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
  77. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
  78. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  79. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  80. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/management/__init__.py +0 -0
  81. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/management/commands/__init__.py +0 -0
  82. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/management/commands/flowexport.py +0 -0
  83. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/middleware.py +0 -0
  84. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
  85. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/css/trix.css +0 -0
  86. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
  87. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
  88. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
  89. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
  90. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
  91. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
  92. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
  93. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
  94. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
  95. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
  96. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
  97. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
  98. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
  99. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
  100. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
  101. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  102. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  103. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
  104. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
  105. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  106. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  107. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
  108. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
  109. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
  110. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  111. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
  112. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
  113. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  114. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  115. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
  116. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
  117. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  118. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  119. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
  120. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
  121. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  122. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  123. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
  124. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
  125. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
  126. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
  127. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
  128. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
  129. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
  130. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
  131. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/img/favicon.png +0 -0
  132. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/img/user.png +0 -0
  133. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
  134. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
  135. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
  136. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
  137. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
  138. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
  139. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
  140. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
  141. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
  142. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
  143. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
  144. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
  145. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
  146. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
  147. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
  148. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
  149. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
  150. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
  151. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
  152. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
  153. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
  154. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
  155. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
  156. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
  157. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
  158. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
  159. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
  160. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
  161. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
  162. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
  163. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
  164. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
  165. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
  166. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
  167. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
  168. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
  169. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
  170. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
  171. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
  172. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
  173. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
  174. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
  175. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
  176. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
  177. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
  178. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
  179. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
  180. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/smartcrop.js +0 -0
  181. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/trix.js +0 -0
  182. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
  183. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/viewflow.min.js +0 -0
  184. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/viewflow.min.js.map +0 -0
  185. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
  186. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
  187. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/400.html +0 -0
  188. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/403.html +0 -0
  189. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/404.html +0 -0
  190. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/500.html +0 -0
  191. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/admin/fsm_change_form.html +0 -0
  192. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
  193. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/admin/fsm_change_list.html +0 -0
  194. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/admin/fsm_transition_form.html +0 -0
  195. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
  196. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/logged_out.html +0 -0
  197. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/login.html +0 -0
  198. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/password_change_done.html +0 -0
  199. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/password_change_form.html +0 -0
  200. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/password_reset_complete.html +0 -0
  201. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/password_reset_confirm.html +0 -0
  202. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/password_reset_done.html +0 -0
  203. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/password_reset_form.html +0 -0
  204. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/profile.html +0 -0
  205. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/registration/provider_list.html +0 -0
  206. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/base.html +0 -0
  207. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
  208. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/base_page.html +0 -0
  209. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
  210. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
  211. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
  212. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
  213. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
  214. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
  215. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
  216. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
  217. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
  218. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
  219. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
  220. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
  221. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
  222. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
  223. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
  224. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
  225. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/views/delete_action.html +0 -0
  226. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/views/detail.html +0 -0
  227. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/views/form.html +0 -0
  228. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/views/list.html +0 -0
  229. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/views/transition.html +0 -0
  230. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/assign.html +0 -0
  231. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
  232. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
  233. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
  234. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
  235. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
  236. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
  237. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
  238. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
  239. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/start.html +0 -0
  240. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task.html +0 -0
  241. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
  242. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
  243. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
  244. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
  245. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
  246. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
  247. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
  248. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
  249. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
  250. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
  251. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
  252. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templatetags/__init__.py +0 -0
  253. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templatetags/fsm.py +0 -0
  254. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/templatetags/viewflow.py +0 -0
  255. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/this_object.py +0 -0
  256. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/urls/__init__.py +0 -0
  257. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/urls/base.py +0 -0
  258. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/urls/model.py +0 -0
  259. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/urls/sites.py +0 -0
  260. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/utils.py +0 -0
  261. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/__init__.py +0 -0
  262. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/actions.py +0 -0
  263. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/base.py +0 -0
  264. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/create.py +0 -0
  265. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/delete.py +0 -0
  266. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/detail.py +0 -0
  267. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/filters.py +0 -0
  268. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/list.py +0 -0
  269. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/search.py +0 -0
  270. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/views/update.py +0 -0
  271. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/__init__.py +0 -0
  272. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/admin.py +0 -0
  273. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/apps.py +0 -0
  274. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/base.py +0 -0
  275. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/context.py +0 -0
  276. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/exceptions.py +0 -0
  277. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/fields.py +0 -0
  278. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/__init__.py +0 -0
  279. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/mixins.py +0 -0
  280. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/nodes.py +0 -0
  281. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/utils.py +0 -0
  282. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/__init__.py +0 -0
  283. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/chart.py +0 -0
  284. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/detail.py +0 -0
  285. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/filters.py +0 -0
  286. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/list.py +0 -0
  287. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/views/mixins.py +0 -0
  288. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/flow/viewset.py +0 -0
  289. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/lock.py +0 -0
  290. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/managers.py +0 -0
  291. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0001_initial.py +0 -0
  292. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
  293. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
  294. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
  295. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
  296. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0005_merge.py +0 -0
  297. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
  298. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0006_i18n.py +0 -0
  299. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0006_merge.py +0 -0
  300. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
  301. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
  302. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
  303. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0008_merge.py +0 -0
  304. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0009_merge.py +0 -0
  305. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
  306. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
  307. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
  308. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py +0 -0
  309. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/migrations/__init__.py +0 -0
  310. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/__init__.py +0 -0
  311. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/end.py +0 -0
  312. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/func.py +0 -0
  313. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/handle.py +0 -0
  314. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/if_gate.py +0 -0
  315. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/join.py +0 -0
  316. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/mixins.py +0 -0
  317. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/obsolete.py +0 -0
  318. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/split.py +0 -0
  319. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/switch.py +0 -0
  320. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/nodes/view.py +0 -0
  321. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/signals.py +0 -0
  322. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/status.py +0 -0
  323. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/viewflow/workflow/token.py +0 -0
  324. {django-viewflow-2.2.3 → django_viewflow-2.2.4}/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.3
3
+ Version: 2.2.4
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -25,3 +25,5 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
25
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
26
26
  Requires-Python: >=3.8
27
27
  License-File: LICENSE
28
+ Requires-Dist: Django>=4.2
29
+ Requires-Dist: django-filter>=2.3.0
@@ -185,6 +185,26 @@ modifications of Viewflow. You can find the commercial license terms in
185
185
 
186
186
  ## Changelog
187
187
 
188
+ ### 2.2.4 2024-07-12
189
+
190
+ - Clone data, seed, and artifacts from canceled tasks to revived tasks.
191
+ - Enhance error handling for celery.Job.
192
+ - Improve the process cancellation template.
193
+ - Redirect to the task detail page after canceling or undoing actions, instead
194
+ of redirecting to the process detail page.
195
+ - Added links to parent subprocess and parent task on the subprocess process and
196
+ task details pages.
197
+ - Updated the Process.parent_task field to use related_name='subprocess',
198
+ allowing access to subprocesses via task.subprocess
199
+ - Enhanced CreateProcessView and UpdateProcessView to set process_seed and
200
+ artifact_generic_foreign_key fields based on form.cleaned_data, as Django
201
+ model forms do not handle this automatically.
202
+ - Added tasks with an ERROR status to the process dashboard for better visibility and tracking.
203
+ - Added tooltip hover titles to nodes without text labels in the SVG workflow graph.
204
+ - Marked StartHandler nodes as BPMN Start Message events on the SVG graph.
205
+ - Fixed rendering of hidden field errors in forms.
206
+
207
+
188
208
  ### 2.2.3 2024-07-09
189
209
 
190
210
  - Fixed issue with Split/Join operations when an immediate split to join
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.2.3
3
+ Version: 2.2.4
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -25,3 +25,5 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
25
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
26
26
  Requires-Python: >=3.8
27
27
  License-File: LICENSE
28
+ Requires-Dist: Django>=4.2
29
+ Requires-Dist: django-filter>=2.3.0
@@ -306,6 +306,7 @@ viewflow/workflow/migrations/0010_viewflow20.py
306
306
  viewflow/workflow/migrations/0011_alter_task_created_and_more.py
307
307
  viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py
308
308
  viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py
309
+ viewflow/workflow/migrations/0014_alter_process_parent_task.py
309
310
  viewflow/workflow/migrations/__init__.py
310
311
  viewflow/workflow/nodes/__init__.py
311
312
  viewflow/workflow/nodes/end.py
@@ -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.3",
7
+ version="2.2.4",
8
8
  author_email="kmmbvnr@gmail.com",
9
9
  author="Mikhail Podgurskiy",
10
10
  description="Reusable library to build business applications fast",
@@ -510,9 +510,10 @@ class FormLayout:
510
510
  def append_non_field_errors(self, form: forms.Form, root: ElementTree.Element):
511
511
  errors = form.non_field_errors()
512
512
  errors.extend(
513
- form.error_class(bound_field.errors)
513
+ error
514
514
  for bound_field in form.hidden_fields()
515
515
  if bound_field.errors
516
+ for error in bound_field.errors
516
517
  )
517
518
 
518
519
  if errors:
@@ -81,7 +81,7 @@
81
81
 
82
82
  circle.event,
83
83
  path.event {
84
- fill: none;
84
+ fill: transparent;
85
85
  stroke: #000;
86
86
  }
87
87
 
@@ -90,12 +90,12 @@
90
90
  }
91
91
 
92
92
  path.event-marker {
93
- fill: none;
93
+ fill: transparent;
94
94
  stroke: #000;
95
95
  }
96
96
 
97
97
  path.gateway {
98
- fill: none;
98
+ fill: transparent;
99
99
  stroke: #000;
100
100
  stroke-width: 1.1;
101
101
  }
@@ -108,7 +108,7 @@
108
108
  }
109
109
 
110
110
  rect.task {
111
- fill: none;
111
+ fill: transparent;
112
112
  stroke: #000;
113
113
  stroke-width: 1.1;
114
114
  }
@@ -120,7 +120,7 @@
120
120
  }
121
121
 
122
122
  path.task-marker {
123
- fill: none;
123
+ fill: transparent;
124
124
  stroke: #000;
125
125
  stroke-width: 1.1;
126
126
  }
@@ -128,14 +128,14 @@
128
128
  </style>
129
129
  {% for cell in cells %}
130
130
  <g id="{{ cell.node.name }}" transform="translate({{ cell.shape.x }}, {{ cell.shape.y }})"{% if cell.status %} class="{{ cell.status|lower }}"{% endif %}>
131
- {% if cell.status %}<title>{{ cell.status }}</title>{% endif %}
131
+ {% if cell.title %}<title>{{ cell.title }}</title>{% endif %}
132
132
  {{ cell.shape.svg|safe }}
133
133
  {% for text, class, font_size, x, y in cell.shape.text %}
134
134
  <text class="{{ class }}" font-size="{{ font_size }}px" x="{{ x }}" y="{{ y }}">{% if forloop.first %}{{ text|title }}{% else %}{{ text }}{% endif %}</text>
135
135
  {% endfor %}
136
136
  </g>
137
137
  {% endfor %}{% for edge in edges %}
138
- <path fill="none" stroke="#000000" stroke-width="2" id="{{ edge.src.name}}__{{ edge.dst.name }}" marker-end="url(#end-marker)"
138
+ <path fill="transparent" stroke="#000000" stroke-width="2" id="{{ edge.src.name}}__{{ edge.dst.name }}" marker-end="url(#end-marker)"
139
139
  d="{% for x,y in edge.segments %}{% if forloop.first %}M{% else %} L{% endif %}{{ x }}, {{ y }}{% endfor %}"/>
140
140
 
141
141
  {% endfor %}
@@ -3,8 +3,8 @@
3
3
 
4
4
  {% block content %}
5
5
  <div class="mdc-layout-grid vf-page__grid">
6
- <div class="mdc-layout-grid__inner">
7
- <div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-9-desktop mdc-layout-grid__cell--span-8-tablet mdc-layout-grid__cell--span-4-phone">
6
+ <div class="mdc-layout-grid__inner vf-page__grid-inner">
7
+ <div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-8-desktop mdc-layout-grid__cell--span-8-tablet mdc-layout-grid__cell--span-4-phone">
8
8
  <div class="mdc-card vf-card">
9
9
  <section class="vf-card__header">
10
10
  <h1 class="vf-card__title">
@@ -90,7 +90,7 @@
90
90
  </div>
91
91
  </div>
92
92
  {% block panel-cell %}
93
- <div class="mdc-layout-grid__cell {% block panel-cell-span %}mdc-layout-grid__cell--span-3-desktop mdc-layout-grid__cell--span-8-tablet mdc-layout-grid__cell--span-4-phone{% endblock %}">
93
+ <div class="mdc-layout-grid__cell {% block panel-cell-span %}mdc-layout-grid__cell--span-4-desktop mdc-layout-grid__cell--span-8-tablet mdc-layout-grid__cell--span-4-phone{% endblock %}">
94
94
  {% include_process_data process %}
95
95
  </div>
96
96
  {% endblock panel-cell %}
@@ -1,4 +1,4 @@
1
- {% load viewflow %}
1
+ {% load viewflow i18n %}
2
2
  <div class="mdc-card vf-card">
3
3
  <section class="vf-card__header">
4
4
  <h1 class="vf-card__title">{{ process }}</h1>
@@ -20,13 +20,33 @@
20
20
  </td>
21
21
  </tr>
22
22
  {% for field, field_name, value in process_data %}
23
- {% if field.name != 'data' and field.name != 'flow_class' and field.name != 'artifact_object_id' and field.name != 'artifact_content_type'%}
23
+ {% if field.name != 'parent_task' and field.name != 'data' and field.name != 'flow_class' and field.name != 'artifact_object_id' and field.name != 'artifact_content_type' and field.name != 'seed_object_id' and field.name != 'seed_content_type'%}
24
24
  <tr>
25
25
  <th class="vf-list__table-header vf-list__table-header-text">{{ field_name }}</th>
26
26
  <td>{{ value }}</td>
27
27
  </tr>
28
28
  {% endif %}
29
29
  {% endfor %}
30
+ {% if process.parent_task %}
31
+ <tr>
32
+ <th class="vf-list__table-header vf-list__table-header-text">{% translate 'Parent Task' %}</th>
33
+ <td>
34
+ <a href="{% reverse process.parent_task.flow_task 'index' process.parent_task.process_id process.parent_task.pk %}">{{ process.parent_task.flow_task }}</a>
35
+ </td>
36
+ </tr>
37
+ {% endif %}
38
+ {% if process.seed %}
39
+ <tr>
40
+ <th class="vf-list__table-header vf-list__table-header-text">{% translate 'Seed' %}</th>
41
+ <td>{{ process.seed }}</td>
42
+ </tr>
43
+ {% endif %}
44
+ {% if process.artifact %}
45
+ <tr>
46
+ <th class="vf-list__table-header vf-list__table-header-text">{% translate 'Artifact' %}</th>
47
+ <td>{{ process.artifact }}</td>
48
+ </tr>
49
+ {% endif %}
30
50
  </tbody>
31
51
  </table>
32
52
  </section>
@@ -20,6 +20,28 @@
20
20
  </div>
21
21
  {% endif %}
22
22
 
23
+ {% if seed_data %}
24
+ <div class="mdc-card vf-card">
25
+ <section class="vf-card__header">
26
+ <h1 class="vf-card__title">{{ task.seed }}</h1>
27
+ </section>
28
+ <section class="vf-card__body">
29
+ <table class="vf-list__table">
30
+ <tbody>
31
+ {% for field, field_name, value in seed_data %}
32
+ {% if field.name != 'process' and field.name != 'task' %}
33
+ <tr>
34
+ <th class="vf-list__table-header vf-list__table-header-text">{{ field_name }}</th>
35
+ <td>{{ value }}</td>
36
+ </tr>
37
+ {% endif %}
38
+ {% endfor %}
39
+ </tbody>
40
+ </table>
41
+ </section>
42
+ </div>
43
+ {% endif %}
44
+
23
45
 
24
46
  {% if data %}
25
47
  {{ data }}
@@ -37,6 +37,16 @@
37
37
  {% endfor %}
38
38
  </div>
39
39
  </div>
40
+ {% with subprocesses=task.subprocesses.all %}{% if subprocesses %}
41
+ <div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-12">
42
+ <h4 class="mdc-typography mdc-typography--headline5" style="margin-bottom:10px">{% trans "Subprocess" %}</h4>
43
+ <div>
44
+ {% for subprocess in subprocesses %}
45
+ <a class="mdc-typography mdc-typography--subtitle1" href="{% reverse subprocess.flow_class 'process_detail' subprocess.pk %}">{{ subprocess }}</a>{% if not forloop.last %}, {% endif %}
46
+ {% endfor %}
47
+ </div>
48
+ </div>
49
+ {% endif %}{% endwith %}
40
50
  {% endblock %}
41
51
 
42
52
  {% block task_actions %}
@@ -51,6 +51,8 @@ def include_task_data(context, task):
51
51
  try:
52
52
  if task.artifact_object_id:
53
53
  context["artifact_data"] = get_object_data(task.artifact)
54
+ if task.seed_object_id:
55
+ context["seed_data"] = get_object_data(task.seed)
54
56
  context["data"] = task.data
55
57
  context["task"] = task
56
58
  return template.render(
@@ -267,7 +267,12 @@ class Activation:
267
267
  """
268
268
  flow_class = self.flow_class
269
269
  task = flow_class.task_class(
270
- process=self.process, flow_task=self.flow_task, token=self.task.token
270
+ process=self.process,
271
+ flow_task=self.flow_task,
272
+ token=self.task.token,
273
+ seed=self.task.seed,
274
+ artifact=self.task.artifact,
275
+ data=self.task.data,
271
276
  )
272
277
  task.save()
273
278
 
@@ -47,7 +47,18 @@ class Shape(object):
47
47
 
48
48
 
49
49
  class Cell(object):
50
- __slots__ = ["col", "row", "x", "y", "width", "height", "node", "shape", "status"]
50
+ __slots__ = [
51
+ "col",
52
+ "row",
53
+ "x",
54
+ "y",
55
+ "width",
56
+ "height",
57
+ "node",
58
+ "shape",
59
+ "title",
60
+ "status",
61
+ ]
51
62
 
52
63
  def __init__(
53
64
  self,
@@ -59,6 +70,7 @@ class Cell(object):
59
70
  width=-1,
60
71
  height=-1,
61
72
  shape=None,
73
+ title=None,
62
74
  status=None,
63
75
  ):
64
76
  self.node = node
@@ -69,6 +81,7 @@ class Cell(object):
69
81
  self.width = width
70
82
  self.height = height
71
83
  self.shape = shape if shape is not None else Shape()
84
+ self.title = title
72
85
  self.status = status
73
86
 
74
87
  def incoming(self):
@@ -536,11 +549,13 @@ def calc_text(grid):
536
549
  shape = getattr(cell.node, "shape", DEFAULT_SHAPE)
537
550
  text_align = shape.get("text-align")
538
551
  font_size = shape.get("font-size", 12)
552
+
553
+ if cell.node.task_title:
554
+ title = force_str(cell.node.task_title)
555
+ else:
556
+ title = " ".join(cell.node.name.capitalize().split("_"))
557
+
539
558
  if text_align == "middle":
540
- if cell.node.task_title:
541
- title = force_str(cell.node.task_title)
542
- else:
543
- title = " ".join(cell.node.name.capitalize().split("_"))
544
559
  segments = wrap(title, 20)
545
560
  block_height = max(len(segments) - 1, 0) * font_size * 1.2
546
561
 
@@ -557,6 +572,8 @@ def calc_text(grid):
557
572
  y_start + (n * font_size * 1.2),
558
573
  )
559
574
  )
575
+ else:
576
+ cell.title = title
560
577
 
561
578
 
562
579
  def calc_cell_status(flow_class, grid, process_pk):
@@ -58,7 +58,6 @@ class UnassignTaskView(
58
58
 
59
59
  class CancelTaskView(
60
60
  mixins.SuccessMessageMixin,
61
- mixins.TaskSuccessUrlMixin,
62
61
  mixins.TaskViewTemplateNames,
63
62
  generic.FormView,
64
63
  ):
@@ -77,10 +76,16 @@ class CancelTaskView(
77
76
  self.request.activation.cancel()
78
77
  return super().form_valid(*args, **kwargs)
79
78
 
79
+ def get_success_url(self):
80
+ """Continue on task or redirect back to task list."""
81
+ activation = self.request.activation
82
+ return activation.flow_task.reverse(
83
+ "detail", args=[activation.process.pk, activation.task.pk]
84
+ )
85
+
80
86
 
81
87
  class UndoTaskView(
82
88
  mixins.SuccessMessageMixin,
83
- mixins.TaskSuccessUrlMixin,
84
89
  mixins.TaskViewTemplateNames,
85
90
  generic.FormView,
86
91
  ):
@@ -99,10 +104,16 @@ class UndoTaskView(
99
104
  self.request.activation.undo()
100
105
  return super().form_valid(*args, **kwargs)
101
106
 
107
+ def get_success_url(self):
108
+ """Continue on task or redirect back to task list."""
109
+ activation = self.request.activation
110
+ return activation.flow_task.reverse(
111
+ "detail", args=[activation.process.pk, activation.task.pk]
112
+ )
113
+
102
114
 
103
115
  class ReviveTaskView(
104
116
  mixins.SuccessMessageMixin,
105
- mixins.TaskSuccessUrlMixin,
106
117
  mixins.TaskViewTemplateNames,
107
118
  generic.FormView,
108
119
  ):
@@ -25,6 +25,10 @@ class CreateProcessView(
25
25
  def form_valid(self, form):
26
26
  """If the form is valid, save the associated model and finish the task."""
27
27
  self.object = form.save()
28
+ if "seed" in form.cleaned_data:
29
+ self.object.seed = form.cleaned_data["seed"]
30
+ if "artifact" in form.cleaned_data:
31
+ self.object.artifact = form.cleaned_data["artifact"]
28
32
  self.request.activation.execute()
29
33
  return HttpResponseRedirect(self.get_success_url())
30
34
 
@@ -1,5 +1,6 @@
1
1
  from django.core.exceptions import PermissionDenied
2
2
  from django.contrib.auth.decorators import login_required
3
+ from django.db.models import Q
3
4
  from django.utils.decorators import method_decorator
4
5
  from django.utils.safestring import mark_safe
5
6
  from django.utils.translation import gettext_lazy as _
@@ -7,7 +8,7 @@ from django.views import generic
7
8
 
8
9
  from viewflow.views import ListModelView
9
10
  from viewflow.utils import viewprop, has_object_perm
10
- from viewflow.workflow import chart
11
+ from viewflow.workflow import chart, STATUS
11
12
  from viewflow.workflow.fields import get_task_ref
12
13
  from . import mixins, filters
13
14
 
@@ -56,7 +57,8 @@ class DashboardView(
56
57
  "tasks": self.flow_class.task_class._default_manager.filter_available(
57
58
  [self.flow_class], self.request.user
58
59
  ).filter(
59
- finished__isnull=True, flow_task=node
60
+ Q(finished__isnull=True) | Q(status=STATUS.ERROR),
61
+ flow_task=node,
60
62
  )[
61
63
  : self.MAX_ROWS
62
64
  ],
@@ -24,6 +24,10 @@ class UpdateProcessView(
24
24
  def form_valid(self, form):
25
25
  """If the form is valid, save the associated model and finish the task."""
26
26
  self.object = form.save()
27
+ if "seed" in form.cleaned_data:
28
+ self.object.seed = form.cleaned_data["seed"]
29
+ if "artifact" in form.cleaned_data:
30
+ self.object.artifact = form.cleaned_data["artifact"]
27
31
  self.request.activation.execute()
28
32
  return HttpResponseRedirect(self.get_success_url())
29
33
 
@@ -0,0 +1,25 @@
1
+ # Generated by Django 5.0.1 on 2024-07-11 05:14
2
+
3
+ import django.db.models.deletion
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("viewflow", "0013_process_seed_content_type_process_seed_object_id_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="process",
16
+ name="parent_task",
17
+ field=models.ForeignKey(
18
+ blank=True,
19
+ null=True,
20
+ on_delete=django.db.models.deletion.CASCADE,
21
+ related_name="subprocesses",
22
+ to="viewflow.task",
23
+ ),
24
+ ),
25
+ ]
@@ -236,7 +236,7 @@ class Process(AbstractProcess):
236
236
  blank=True,
237
237
  null=True,
238
238
  on_delete=models.CASCADE,
239
- related_name="+",
239
+ related_name="subprocesses",
240
240
  to="Task",
241
241
  )
242
242
 
@@ -55,9 +55,13 @@ class AbstractJobActivation(mixins.NextNodeActivationMixin, Activation):
55
55
  tb = exception.__traceback__
56
56
  while tb.tb_next:
57
57
  tb = tb.tb_next
58
- serialized_locals = json.dumps(
59
- tb.tb_frame.f_locals, default=lambda obj: str(obj)
60
- )
58
+
59
+ try:
60
+ serialized_locals = json.dumps(
61
+ tb.tb_frame.f_locals, default=lambda obj: str(obj)
62
+ )
63
+ except Exception as ex:
64
+ serialized_locals = json.dumps({"_serialization_exception": str(ex)})
61
65
 
62
66
  self.task.data["_exception"] = {
63
67
  "title": str(exception),
@@ -170,6 +170,8 @@ class StartHandle(mixins.NextNodeMixin, Node):
170
170
  "height": 50,
171
171
  "svg": """
172
172
  <circle class="event" cx="25" cy="25" r="25"/>
173
+ <rect xmlns="http://www.w3.org/2000/svg" x="7.5" y="15" width="35" height="20" fill="transparent" stroke="rgb(0, 0, 0)"/>
174
+ <path xmlns="http://www.w3.org/2000/svg" d="M 7.5 15 L 25 25 L 42.5 15" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10"/>
173
175
  """,
174
176
  }
175
177
 
File without changes