django-viewflow 2.3.0__tar.gz → 2.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. {django_viewflow-2.3.0/django_viewflow.egg-info → django_viewflow-2.3.2}/PKG-INFO +48 -25
  2. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/README.md +47 -24
  3. {django_viewflow-2.3.0 → django_viewflow-2.3.2/django_viewflow.egg-info}/PKG-INFO +48 -25
  4. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/django_viewflow.egg-info/SOURCES.txt +3 -0
  5. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/setup.py +1 -1
  6. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/__init__.py +5 -11
  7. django_viewflow-2.3.2/viewflow/apps.py +39 -0
  8. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/conf.py +10 -3
  9. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/admin/__init__.py +1 -1
  10. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/auth.py +21 -4
  11. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/plotly/views.py +26 -0
  12. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fields.py +42 -8
  13. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/forms/renderers.py +11 -4
  14. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fsm/admin.py +3 -2
  15. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fsm/base.py +16 -7
  16. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fsm/chart.py +2 -1
  17. django_viewflow-2.3.2/viewflow/fsm/views.py +64 -0
  18. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fsm/viewset.py +33 -2
  19. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/jsonstore.py +18 -2
  20. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/management/__init__.py +1 -2
  21. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/management/commands/flowexport.py +1 -1
  22. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/middleware.py +2 -0
  23. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/viewflow.min.js +9 -9
  24. django_viewflow-2.3.2/viewflow/static/viewflow/js/viewflow.min.js.map +1 -0
  25. django_viewflow-2.3.2/viewflow/templates/viewflow/contrib/import_export/import_action.html +41 -0
  26. django_viewflow-2.3.2/viewflow/templates/viewflow/fsm/detail.html +22 -0
  27. django_viewflow-2.3.2/viewflow/templates/viewflow/views/detail.html +24 -0
  28. django_viewflow-2.3.2/viewflow/templates/viewflow/views/fsm_chart.html +21 -0
  29. django_viewflow-2.3.2/viewflow/templatetags/fsm.py +20 -0
  30. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/utils.py +1 -1
  31. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/actions.py +18 -1
  32. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/detail.py +7 -0
  33. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/list.py +4 -5
  34. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/search.py +1 -1
  35. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/activation.py +10 -2
  36. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/admin.py +20 -7
  37. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/apps.py +3 -0
  38. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/base.py +5 -2
  39. django_viewflow-2.3.2/viewflow/workflow/checks.py +57 -0
  40. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/mixins.py +1 -1
  41. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/utils.py +10 -1
  42. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/actions.py +28 -5
  43. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/chart.py +6 -0
  44. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/dashboard.py +8 -5
  45. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/detail.py +3 -1
  46. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/list.py +2 -2
  47. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/lock.py +59 -3
  48. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/end.py +1 -1
  49. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/func.py +1 -1
  50. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/if_gate.py +1 -1
  51. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/job.py +14 -1
  52. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/join.py +58 -24
  53. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/split.py +1 -1
  54. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/start.py +11 -9
  55. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/switch.py +1 -1
  56. django_viewflow-2.3.0/viewflow/apps.py +0 -15
  57. django_viewflow-2.3.0/viewflow/fsm/views.py +0 -52
  58. django_viewflow-2.3.0/viewflow/static/viewflow/js/viewflow.min.js.map +0 -1
  59. django_viewflow-2.3.0/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
  60. django_viewflow-2.3.0/viewflow/templates/viewflow/views/detail.html +0 -12
  61. django_viewflow-2.3.0/viewflow/templatetags/fsm.py +0 -15
  62. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/LICENSE +0 -0
  63. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/LICENSE_EXCEPTION +0 -0
  64. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/MANIFEST.in +0 -0
  65. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/django_viewflow.egg-info/dependency_links.txt +0 -0
  66. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/django_viewflow.egg-info/not-zip-safe +0 -0
  67. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/django_viewflow.egg-info/requires.txt +0 -0
  68. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/django_viewflow.egg-info/top_level.txt +0 -0
  69. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/setup.cfg +0 -0
  70. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/tests/test_middleware.py +0 -0
  71. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/tests/test_templates.py +0 -0
  72. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/tests/test_templatetags__viewflow.py +0 -0
  73. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/tests/test_this_object.py +0 -0
  74. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/tests/test_urls__base.py +0 -0
  75. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/tests/test_utils__package.py +0 -0
  76. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/__init__.py +0 -0
  77. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/admin/apps.py +0 -0
  78. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/plotly/__init__.py +0 -0
  79. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/plotly/material.py +0 -0
  80. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/contrib/plotly/viewset.py +0 -0
  81. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/forms/__init__.py +0 -0
  82. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fsm/__init__.py +0 -0
  83. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/fsm/typing.py +0 -0
  84. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
  85. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
  86. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
  87. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
  88. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
  89. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
  90. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
  91. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
  92. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
  93. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
  94. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
  95. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
  96. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
  97. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
  98. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
  99. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
  100. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
  101. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
  102. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
  103. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
  104. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  105. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  106. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/management/commands/__init__.py +0 -0
  107. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -0
  108. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/node_modules/trix/dist/trix.css +0 -0
  109. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/node_modules/vis-network/dist/dist/vis-network.min.css +0 -0
  110. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
  111. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/trix.css +0 -0
  112. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
  113. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
  114. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
  115. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
  116. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
  117. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
  118. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
  119. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
  120. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
  121. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
  122. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
  123. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
  124. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
  125. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-outlined.woff +0 -0
  126. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-outlined.woff2 +0 -0
  127. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-round.woff +0 -0
  128. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-round.woff2 +0 -0
  129. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-sharp.woff +0 -0
  130. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-sharp.woff2 +0 -0
  131. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-two-tone.woff +0 -0
  132. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons-two-tone.woff2 +0 -0
  133. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons.css +0 -0
  134. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons.woff +0 -0
  135. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/material-icons/node_modules/material-icons/iconfont/material-icons.woff2 +0 -0
  136. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
  137. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
  138. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  139. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  140. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
  141. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
  142. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  143. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  144. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
  145. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
  146. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
  147. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  148. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
  149. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
  150. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  151. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  152. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
  153. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
  154. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  155. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  156. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
  157. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
  158. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  159. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  160. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/css/roboto/roboto-fontface.css +0 -0
  161. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Black.woff +0 -0
  162. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Black.woff2 +0 -0
  163. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  164. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  165. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff +0 -0
  166. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff2 +0 -0
  167. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  168. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  169. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff +0 -0
  170. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff2 +0 -0
  171. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-LightItalic.woff +0 -0
  172. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  173. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff +0 -0
  174. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff2 +0 -0
  175. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  176. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  177. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff +0 -0
  178. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff2 +0 -0
  179. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  180. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  181. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff +0 -0
  182. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-Thin.woff2 +0 -0
  183. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  184. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/node_modules/roboto-fontface/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  185. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
  186. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
  187. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
  188. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
  189. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
  190. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
  191. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/SimpleIcons.eot +0 -0
  192. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/SimpleIcons.otf +0 -0
  193. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/SimpleIcons.ttf +0 -0
  194. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/SimpleIcons.woff +0 -0
  195. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/SimpleIcons.woff2 +0 -0
  196. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/simple-icons.css +0 -0
  197. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/node_modules/simple-icons-font/font/simple-icons.min.css +0 -0
  198. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
  199. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
  200. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/img/favicon.png +0 -0
  201. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/img/user.png +0 -0
  202. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
  203. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
  204. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
  205. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
  206. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
  207. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
  208. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
  209. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
  210. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
  211. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
  212. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
  213. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
  214. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
  215. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
  216. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
  217. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
  218. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
  219. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
  220. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
  221. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
  222. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
  223. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
  224. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
  225. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
  226. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
  227. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
  228. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
  229. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
  230. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
  231. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
  232. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
  233. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
  234. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
  235. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
  236. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
  237. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
  238. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
  239. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
  240. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
  241. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
  242. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
  243. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
  244. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
  245. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
  246. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
  247. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js +0 -0
  248. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/node_modules/perfect-scrollbar/dist/perfect-scrollbar.min.js +0 -0
  249. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/node_modules/perfect-scrollbar/dist/perfect-scrollbar.min.js.map +0 -0
  250. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/node_modules/smartcrop/smartcrop.js +0 -0
  251. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/node_modules/vis-network/dist/vis-network.min.js +0 -0
  252. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/node_modules/vis-network/dist/vis-network.min.js.map +0 -0
  253. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
  254. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
  255. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/smartcrop.js +0 -0
  256. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/trix.js +0 -0
  257. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
  258. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
  259. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
  260. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/400.html +0 -0
  261. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/403.html +0 -0
  262. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/404.html +0 -0
  263. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/500.html +0 -0
  264. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/admin/fsm_change_form.html +0 -0
  265. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
  266. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/admin/fsm_change_list.html +0 -0
  267. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/admin/fsm_transition_form.html +0 -0
  268. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
  269. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/logged_out.html +0 -0
  270. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/login.html +0 -0
  271. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/password_change_done.html +0 -0
  272. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/password_change_form.html +0 -0
  273. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/password_reset_complete.html +0 -0
  274. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/password_reset_confirm.html +0 -0
  275. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/password_reset_done.html +0 -0
  276. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/password_reset_form.html +0 -0
  277. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/profile.html +0 -0
  278. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/registration/provider_list.html +0 -0
  279. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/base.html +0 -0
  280. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
  281. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/base_page.html +0 -0
  282. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
  283. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
  284. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
  285. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
  286. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
  287. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
  288. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
  289. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
  290. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
  291. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
  292. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
  293. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
  294. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
  295. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
  296. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
  297. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/views/delete_action.html +0 -0
  298. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/views/form.html +0 -0
  299. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/views/list.html +0 -0
  300. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/views/transition.html +0 -0
  301. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/assign.html +0 -0
  302. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
  303. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
  304. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
  305. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
  306. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
  307. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
  308. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
  309. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
  310. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
  311. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
  312. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
  313. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/start.html +0 -0
  314. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task.html +0 -0
  315. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
  316. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
  317. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
  318. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
  319. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_detail.html +0 -0
  320. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
  321. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
  322. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
  323. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
  324. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
  325. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
  326. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
  327. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
  328. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templatetags/__init__.py +0 -0
  329. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templatetags/viewflow.py +0 -0
  330. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/templatetags/workflow.py +0 -0
  331. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/this_object.py +0 -0
  332. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/urls/__init__.py +0 -0
  333. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/urls/base.py +0 -0
  334. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/urls/model.py +0 -0
  335. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/urls/sites.py +0 -0
  336. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/__init__.py +0 -0
  337. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/base.py +0 -0
  338. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/create.py +0 -0
  339. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/delete.py +0 -0
  340. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/filters.py +0 -0
  341. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/views/update.py +0 -0
  342. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/__init__.py +0 -0
  343. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/chart.py +0 -0
  344. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/context.py +0 -0
  345. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/exceptions.py +0 -0
  346. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/fields.py +0 -0
  347. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/__init__.py +0 -0
  348. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/nodes.py +0 -0
  349. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/__init__.py +0 -0
  350. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/create.py +0 -0
  351. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/filters.py +0 -0
  352. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/mixins.py +0 -0
  353. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/views/update.py +0 -0
  354. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/flow/viewset.py +0 -0
  355. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/managers.py +0 -0
  356. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0001_initial.py +0 -0
  357. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
  358. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
  359. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
  360. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
  361. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0005_merge.py +0 -0
  362. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
  363. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0006_i18n.py +0 -0
  364. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0006_merge.py +0 -0
  365. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
  366. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
  367. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
  368. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0008_merge.py +0 -0
  369. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0009_merge.py +0 -0
  370. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
  371. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
  372. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
  373. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py +0 -0
  374. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/0014_alter_process_parent_task.py +0 -0
  375. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/migrations/__init__.py +0 -0
  376. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/models.py +0 -0
  377. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/__init__.py +0 -0
  378. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/handle.py +0 -0
  379. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/mixins.py +0 -0
  380. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/obsolete.py +0 -0
  381. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/nodes/view.py +0 -0
  382. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/signals.py +0 -0
  383. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/status.py +0 -0
  384. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/token.py +0 -0
  385. {django_viewflow-2.3.0 → django_viewflow-2.3.2}/viewflow/workflow/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-viewflow
3
- Version: 2.3.0
3
+ Version: 2.3.2
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -75,7 +75,7 @@ Viewflow comes in two versions:
75
75
 
76
76
  ## Installation
77
77
 
78
- Viewflow works with Python 3.8+ and Django 4.0+
78
+ Viewflow works with Python 3.10+ and Django 4.2+
79
79
 
80
80
  Viewflow:
81
81
 
@@ -225,6 +225,52 @@ modifications of Viewflow. You can find the commercial license terms in
225
225
 
226
226
  ## Changelog
227
227
 
228
+ For older releases, see [CHANGELOG.rst](./CHANGELOG.rst).
229
+
230
+ ## 2.3.2 2026-07-06
231
+
232
+ Security and data-integrity release. Highlights:
233
+
234
+ - Fix cross-flow privilege escalation and information disclosure: a user with
235
+ only flow A's permission could cancel, or read the full task list of, flow B's
236
+ process by posting/opening flow B's id on flow A's URL. `CancelProcessView` and
237
+ `DetailProcessView` now scope their querysets to the view's own flow
238
+ - Fix the bulk-delete endpoint (`action/delete/`) deleting rows without checking
239
+ login or the `delete` permission; add the missing authentication checks to the
240
+ standalone `FlowChartView` and the `contrib.plotly` Dash endpoints
241
+ - Fix a transaction-ordering bug that committed partial writes next to a task's
242
+ `ERROR` status in async mode; `Function`, `End`, `If`, `Split`, `Switch`,
243
+ `Subprocess`, and `Join` activation now roll back cleanly on failure
244
+ - Fix a celery `Job` node treating `self.retry()`/`Reject` as a task failure and
245
+ crashing on redelivery of a `STARTED` retry
246
+ - Fix task actions releasing their lock before the transaction commits, which let
247
+ a concurrent request double-execute an action under `CacheLock`
248
+ - Fix `jsonstore` fields with a falsy `default` (`False`, `0`) returning `None`,
249
+ discarding a falsy assigned value, and mis-sorting on `order_by()`
250
+ - Fix unbounded memory leaks in form rendering (widget-renderer cache keyed on the
251
+ widget instance) and in `ListModelView` (`lru_cache` keyed on the view instance)
252
+ - Fix the "Administration" menu showing to every logged-in user instead of staff
253
+ - Fix several `viewflow.fsm` bugs: chart crashes on self-transitions, `State` with
254
+ a custom getter replacing falsy-but-valid states, REST `transition` committing
255
+ field writes on a failed transition or allowing arbitrary field writes; add a
256
+ `chart/` state-chart view and action to `FlowViewsMixin`
257
+ - Fix a crash on the admin change page of any FSM-backed model under Django 5.2+
258
+ (incl. 6.1) from the `change_form_fsm_tools` template tag
259
+ - Fix grouped `<select>` options under an `<optgroup>` being dropped, a formset
260
+ validation bypass via a tampered ManagementForm, and `vf-field-select-multiple`
261
+ dropping or failing to toggle selected values
262
+ - Fix a system check now warning when a flow has `Join` nodes but no real lock,
263
+ and `manage.py check`/`runserver` crashing for a Join-node flow defined outside
264
+ any installed app
265
+
266
+ ## 2.3.1 2026-06-30
267
+
268
+ - Add Django 6.1 support
269
+ - Fix the bulk task assign/unassign actions not enforcing the per-task
270
+ `can_assign`/`can_unassign` permission
271
+ - Fix task views accepting a task pk from another flow; tasks are now scoped to
272
+ the flow in the URL
273
+
228
274
  ## 2.3.0 2026-06-30
229
275
 
230
276
  - Fix `viewflow.fsm` chart generation crashing for `Enum` states and `State.ANY`
@@ -249,29 +295,6 @@ modifications of Viewflow. You can find the commercial license terms in
249
295
  - Upgrade `vanilla-jsoneditor` 0.23 → 3 (bundles svelte 5); the JSON field
250
296
  editor API is unchanged
251
297
 
252
- ## 2.2.15 2025-12-24
253
-
254
- - Fix form button name/value lost on resubmission after validation error with Turbo
255
- - Fix subprocess double execution when completing synchronously
256
-
257
- ## 2.2.14 2025-11-24
258
-
259
- - Add Django 6.0 compatibility (requires Python 3.12+)
260
- - Improve error handling for permission creation in multiple database configurations
261
- - Fix BPMN export to include name attribute for gateway nodes (flow.If)
262
-
263
- ## 2.2.13 2025-09-24
264
-
265
- - Fix checkbox field error message styling to display in red color
266
-
267
- ## 2.2.12 2025-07-25
268
-
269
- - Allow to extend and override process_data template
270
-
271
- ## 2.2.11 2025-05-14
272
-
273
- - Return .Avaialble(..) for the start node
274
-
275
298
 
276
299
 
277
300
  [build]: https://img.shields.io/github/actions/workflow/status/viewflow/viewflow/django.yml?branch=main
@@ -32,7 +32,7 @@ Viewflow comes in two versions:
32
32
 
33
33
  ## Installation
34
34
 
35
- Viewflow works with Python 3.8+ and Django 4.0+
35
+ Viewflow works with Python 3.10+ and Django 4.2+
36
36
 
37
37
  Viewflow:
38
38
 
@@ -182,6 +182,52 @@ modifications of Viewflow. You can find the commercial license terms in
182
182
 
183
183
  ## Changelog
184
184
 
185
+ For older releases, see [CHANGELOG.rst](./CHANGELOG.rst).
186
+
187
+ ## 2.3.2 2026-07-06
188
+
189
+ Security and data-integrity release. Highlights:
190
+
191
+ - Fix cross-flow privilege escalation and information disclosure: a user with
192
+ only flow A's permission could cancel, or read the full task list of, flow B's
193
+ process by posting/opening flow B's id on flow A's URL. `CancelProcessView` and
194
+ `DetailProcessView` now scope their querysets to the view's own flow
195
+ - Fix the bulk-delete endpoint (`action/delete/`) deleting rows without checking
196
+ login or the `delete` permission; add the missing authentication checks to the
197
+ standalone `FlowChartView` and the `contrib.plotly` Dash endpoints
198
+ - Fix a transaction-ordering bug that committed partial writes next to a task's
199
+ `ERROR` status in async mode; `Function`, `End`, `If`, `Split`, `Switch`,
200
+ `Subprocess`, and `Join` activation now roll back cleanly on failure
201
+ - Fix a celery `Job` node treating `self.retry()`/`Reject` as a task failure and
202
+ crashing on redelivery of a `STARTED` retry
203
+ - Fix task actions releasing their lock before the transaction commits, which let
204
+ a concurrent request double-execute an action under `CacheLock`
205
+ - Fix `jsonstore` fields with a falsy `default` (`False`, `0`) returning `None`,
206
+ discarding a falsy assigned value, and mis-sorting on `order_by()`
207
+ - Fix unbounded memory leaks in form rendering (widget-renderer cache keyed on the
208
+ widget instance) and in `ListModelView` (`lru_cache` keyed on the view instance)
209
+ - Fix the "Administration" menu showing to every logged-in user instead of staff
210
+ - Fix several `viewflow.fsm` bugs: chart crashes on self-transitions, `State` with
211
+ a custom getter replacing falsy-but-valid states, REST `transition` committing
212
+ field writes on a failed transition or allowing arbitrary field writes; add a
213
+ `chart/` state-chart view and action to `FlowViewsMixin`
214
+ - Fix a crash on the admin change page of any FSM-backed model under Django 5.2+
215
+ (incl. 6.1) from the `change_form_fsm_tools` template tag
216
+ - Fix grouped `<select>` options under an `<optgroup>` being dropped, a formset
217
+ validation bypass via a tampered ManagementForm, and `vf-field-select-multiple`
218
+ dropping or failing to toggle selected values
219
+ - Fix a system check now warning when a flow has `Join` nodes but no real lock,
220
+ and `manage.py check`/`runserver` crashing for a Join-node flow defined outside
221
+ any installed app
222
+
223
+ ## 2.3.1 2026-06-30
224
+
225
+ - Add Django 6.1 support
226
+ - Fix the bulk task assign/unassign actions not enforcing the per-task
227
+ `can_assign`/`can_unassign` permission
228
+ - Fix task views accepting a task pk from another flow; tasks are now scoped to
229
+ the flow in the URL
230
+
185
231
  ## 2.3.0 2026-06-30
186
232
 
187
233
  - Fix `viewflow.fsm` chart generation crashing for `Enum` states and `State.ANY`
@@ -206,29 +252,6 @@ modifications of Viewflow. You can find the commercial license terms in
206
252
  - Upgrade `vanilla-jsoneditor` 0.23 → 3 (bundles svelte 5); the JSON field
207
253
  editor API is unchanged
208
254
 
209
- ## 2.2.15 2025-12-24
210
-
211
- - Fix form button name/value lost on resubmission after validation error with Turbo
212
- - Fix subprocess double execution when completing synchronously
213
-
214
- ## 2.2.14 2025-11-24
215
-
216
- - Add Django 6.0 compatibility (requires Python 3.12+)
217
- - Improve error handling for permission creation in multiple database configurations
218
- - Fix BPMN export to include name attribute for gateway nodes (flow.If)
219
-
220
- ## 2.2.13 2025-09-24
221
-
222
- - Fix checkbox field error message styling to display in red color
223
-
224
- ## 2.2.12 2025-07-25
225
-
226
- - Allow to extend and override process_data template
227
-
228
- ## 2.2.11 2025-05-14
229
-
230
- - Return .Avaialble(..) for the start node
231
-
232
255
 
233
256
 
234
257
  [build]: https://img.shields.io/github/actions/workflow/status/viewflow/viewflow/django.yml?branch=main
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-viewflow
3
- Version: 2.3.0
3
+ Version: 2.3.2
4
4
  Summary: Reusable library to build business applications fast
5
5
  Author: Mikhail Podgurskiy
6
6
  Author-email: kmmbvnr@gmail.com
@@ -75,7 +75,7 @@ Viewflow comes in two versions:
75
75
 
76
76
  ## Installation
77
77
 
78
- Viewflow works with Python 3.8+ and Django 4.0+
78
+ Viewflow works with Python 3.10+ and Django 4.2+
79
79
 
80
80
  Viewflow:
81
81
 
@@ -225,6 +225,52 @@ modifications of Viewflow. You can find the commercial license terms in
225
225
 
226
226
  ## Changelog
227
227
 
228
+ For older releases, see [CHANGELOG.rst](./CHANGELOG.rst).
229
+
230
+ ## 2.3.2 2026-07-06
231
+
232
+ Security and data-integrity release. Highlights:
233
+
234
+ - Fix cross-flow privilege escalation and information disclosure: a user with
235
+ only flow A's permission could cancel, or read the full task list of, flow B's
236
+ process by posting/opening flow B's id on flow A's URL. `CancelProcessView` and
237
+ `DetailProcessView` now scope their querysets to the view's own flow
238
+ - Fix the bulk-delete endpoint (`action/delete/`) deleting rows without checking
239
+ login or the `delete` permission; add the missing authentication checks to the
240
+ standalone `FlowChartView` and the `contrib.plotly` Dash endpoints
241
+ - Fix a transaction-ordering bug that committed partial writes next to a task's
242
+ `ERROR` status in async mode; `Function`, `End`, `If`, `Split`, `Switch`,
243
+ `Subprocess`, and `Join` activation now roll back cleanly on failure
244
+ - Fix a celery `Job` node treating `self.retry()`/`Reject` as a task failure and
245
+ crashing on redelivery of a `STARTED` retry
246
+ - Fix task actions releasing their lock before the transaction commits, which let
247
+ a concurrent request double-execute an action under `CacheLock`
248
+ - Fix `jsonstore` fields with a falsy `default` (`False`, `0`) returning `None`,
249
+ discarding a falsy assigned value, and mis-sorting on `order_by()`
250
+ - Fix unbounded memory leaks in form rendering (widget-renderer cache keyed on the
251
+ widget instance) and in `ListModelView` (`lru_cache` keyed on the view instance)
252
+ - Fix the "Administration" menu showing to every logged-in user instead of staff
253
+ - Fix several `viewflow.fsm` bugs: chart crashes on self-transitions, `State` with
254
+ a custom getter replacing falsy-but-valid states, REST `transition` committing
255
+ field writes on a failed transition or allowing arbitrary field writes; add a
256
+ `chart/` state-chart view and action to `FlowViewsMixin`
257
+ - Fix a crash on the admin change page of any FSM-backed model under Django 5.2+
258
+ (incl. 6.1) from the `change_form_fsm_tools` template tag
259
+ - Fix grouped `<select>` options under an `<optgroup>` being dropped, a formset
260
+ validation bypass via a tampered ManagementForm, and `vf-field-select-multiple`
261
+ dropping or failing to toggle selected values
262
+ - Fix a system check now warning when a flow has `Join` nodes but no real lock,
263
+ and `manage.py check`/`runserver` crashing for a Join-node flow defined outside
264
+ any installed app
265
+
266
+ ## 2.3.1 2026-06-30
267
+
268
+ - Add Django 6.1 support
269
+ - Fix the bulk task assign/unassign actions not enforcing the per-task
270
+ `can_assign`/`can_unassign` permission
271
+ - Fix task views accepting a task pk from another flow; tasks are now scoped to
272
+ the flow in the URL
273
+
228
274
  ## 2.3.0 2026-06-30
229
275
 
230
276
  - Fix `viewflow.fsm` chart generation crashing for `Enum` states and `State.ANY`
@@ -249,29 +295,6 @@ modifications of Viewflow. You can find the commercial license terms in
249
295
  - Upgrade `vanilla-jsoneditor` 0.23 → 3 (bundles svelte 5); the JSON field
250
296
  editor API is unchanged
251
297
 
252
- ## 2.2.15 2025-12-24
253
-
254
- - Fix form button name/value lost on resubmission after validation error with Turbo
255
- - Fix subprocess double execution when completing synchronously
256
-
257
- ## 2.2.14 2025-11-24
258
-
259
- - Add Django 6.0 compatibility (requires Python 3.12+)
260
- - Improve error handling for permission creation in multiple database configurations
261
- - Fix BPMN export to include name attribute for gateway nodes (flow.If)
262
-
263
- ## 2.2.13 2025-09-24
264
-
265
- - Fix checkbox field error message styling to display in red color
266
-
267
- ## 2.2.12 2025-07-25
268
-
269
- - Allow to extend and override process_data template
270
-
271
- ## 2.2.11 2025-05-14
272
-
273
- - Return .Avaialble(..) for the start node
274
-
275
298
 
276
299
 
277
300
  [build]: https://img.shields.io/github/actions/workflow/status/viewflow/viewflow/django.yml?branch=main
@@ -247,6 +247,7 @@ viewflow/templates/viewflow/contrib/plotly.html
247
247
  viewflow/templates/viewflow/contrib/swagger.html
248
248
  viewflow/templates/viewflow/contrib/import_export/export_action.html
249
249
  viewflow/templates/viewflow/contrib/import_export/import_action.html
250
+ viewflow/templates/viewflow/fsm/detail.html
250
251
  viewflow/templates/viewflow/includes/app_menu.html
251
252
  viewflow/templates/viewflow/includes/list_bulk_actions.html
252
253
  viewflow/templates/viewflow/includes/list_filter.html
@@ -262,6 +263,7 @@ viewflow/templates/viewflow/views/confirm_delete.html
262
263
  viewflow/templates/viewflow/views/delete_action.html
263
264
  viewflow/templates/viewflow/views/detail.html
264
265
  viewflow/templates/viewflow/views/form.html
266
+ viewflow/templates/viewflow/views/fsm_chart.html
265
267
  viewflow/templates/viewflow/views/list.html
266
268
  viewflow/templates/viewflow/views/transition.html
267
269
  viewflow/templates/viewflow/workflow/assign.html
@@ -315,6 +317,7 @@ viewflow/workflow/admin.py
315
317
  viewflow/workflow/apps.py
316
318
  viewflow/workflow/base.py
317
319
  viewflow/workflow/chart.py
320
+ viewflow/workflow/checks.py
318
321
  viewflow/workflow/context.py
319
322
  viewflow/workflow/exceptions.py
320
323
  viewflow/workflow/fields.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.3.0",
7
+ version="2.3.2",
8
8
  author_email="kmmbvnr@gmail.com",
9
9
  author="Mikhail Podgurskiy",
10
10
  description="Reusable library to build business applications fast",
@@ -7,13 +7,11 @@
7
7
  # LICENSE_EXCEPTION and the Commercial license defined in file 'COMM_LICENSE',
8
8
  # which is part of this source code package.
9
9
 
10
- from django.conf import settings as django_settings
11
- from .conf import settings
12
10
  from .this_object import this
13
11
  from .utils import viewprop, Icon, DEFAULT
14
12
 
15
13
  __title__ = "Django-Viewflow"
16
- __version__ = "2.3.0"
14
+ __version__ = "2.3.2"
17
15
  __author__ = "Mikhail Podgurskiy"
18
16
  __license__ = "AGPL"
19
17
  __copyright__ = "Copyright 2018-2021 Mikhail Podgurskiy"
@@ -22,11 +20,7 @@ __all__ = ("this", "viewprop", "Icon", "DEFAULT")
22
20
 
23
21
  default_app_config = "viewflow.apps.ViewflowConfig"
24
22
 
25
- if settings.AUTOREGISTER:
26
- # Register site middleware
27
- site_middleware = "viewflow.middleware.SiteMiddleware"
28
- if site_middleware not in django_settings.MIDDLEWARE:
29
- django_settings.MIDDLEWARE += (site_middleware,)
30
- turbo_middleware = "viewflow.middleware.HotwireTurboMiddleware"
31
- if turbo_middleware not in django_settings.MIDDLEWARE:
32
- django_settings.MIDDLEWARE += (turbo_middleware,)
23
+ # Middleware auto-registration lives in ViewflowConfig.ready() -- the app
24
+ # registry isn't populated yet at this point, so apps.is_installed() (needed
25
+ # to recognize viewflow regardless of how it's spelled in INSTALLED_APPS)
26
+ # isn't safe to call here.
@@ -0,0 +1,39 @@
1
+ from django.apps import AppConfig, apps
2
+ from django.conf import settings as django_settings
3
+
4
+ # Copyright (c) 2017-2020, Mikhail Podgurskiy
5
+ # All Rights Reserved.
6
+
7
+ # This work is dual-licensed under AGPL defined in file 'LICENSE' with
8
+ # LICENSE_EXCEPTION and the Commercial licence defined in file 'COMM_LICENSE',
9
+ # which is part of this source code package.
10
+
11
+
12
+ class ViewflowConfig(AppConfig):
13
+ """Default application config."""
14
+
15
+ name = "viewflow"
16
+ label = "viewflow_base" # allow to user 'viewflow' label for 'viewflow.workflow'
17
+
18
+ def ready(self):
19
+ from .conf import settings
20
+
21
+ # The registry isn't populated yet when viewflow.conf.DEFAULTS is
22
+ # first computed, so its AUTOREGISTER default is a best-effort
23
+ # string check that only recognizes the bare "viewflow" app-label
24
+ # form. apps.is_installed() is only safe to call here, once every
25
+ # app is loaded, and correctly recognizes viewflow regardless of
26
+ # how it's spelled in INSTALLED_APPS (including the
27
+ # "viewflow.apps.ViewflowConfig" AppConfig-path form). Only
28
+ # correct the default -- an explicit user setting always wins.
29
+ custom = getattr(django_settings, "VIEWFLOW", {})
30
+ if "AUTOREGISTER" not in custom:
31
+ settings.settings["AUTOREGISTER"] = apps.is_installed("viewflow")
32
+
33
+ if settings.AUTOREGISTER:
34
+ site_middleware = "viewflow.middleware.SiteMiddleware"
35
+ if site_middleware not in django_settings.MIDDLEWARE:
36
+ django_settings.MIDDLEWARE += (site_middleware,)
37
+ turbo_middleware = "viewflow.middleware.HotwireTurboMiddleware"
38
+ if turbo_middleware not in django_settings.MIDDLEWARE:
39
+ django_settings.MIDDLEWARE += (turbo_middleware,)
@@ -38,9 +38,16 @@ class Settings(object):
38
38
  custom = getattr(django_settings, "VIEWFLOW", {})
39
39
  self.settings = deepcopy(DEFAULTS)
40
40
 
41
- for key, value in custom.get("WIDGET_RENDERERS", {}).items():
42
- widget_class, renderer_class = import_string(key), import_string(value)
43
- self.settings["WIDGET_RENDERERS"][widget_class] = renderer_class
41
+ for key, value in custom.items():
42
+ if key == "WIDGET_RENDERERS":
43
+ for widget_key, renderer_value in value.items():
44
+ widget_class, renderer_class = (
45
+ import_string(widget_key),
46
+ import_string(renderer_value),
47
+ )
48
+ self.settings["WIDGET_RENDERERS"][widget_class] = renderer_class
49
+ elif key in self.settings:
50
+ self.settings[key] = value
44
51
 
45
52
  def __getattr__(self, attr):
46
53
  if attr not in self.settings:
@@ -42,7 +42,7 @@ class Admin(AppMenuMixin, Application):
42
42
  self.admin_site = admin_site or admin.site
43
43
  super().__init__(**kwargs)
44
44
 
45
- def has_perm(self, user):
45
+ def has_view_permission(self, user, obj=None):
46
46
  return user.is_staff
47
47
 
48
48
  @property
@@ -19,6 +19,7 @@ from django.core.cache import cache
19
19
  from django.core.cache.utils import make_template_fragment_key
20
20
  from django.core.files.storage import default_storage
21
21
  from django.db import models
22
+ from django.template.defaultfilters import filesizeformat
22
23
  from django.urls import path
23
24
  from django.utils.decorators import method_decorator
24
25
  from django.views import generic
@@ -29,6 +30,9 @@ from viewflow.urls import Viewset
29
30
  from viewflow.utils import viewprop
30
31
 
31
32
 
33
+ MAX_AVATAR_SIZE = 5 * 1024 * 1024 # 5 MB
34
+
35
+
32
36
  class AuthenticationForm(auth_forms.AuthenticationForm):
33
37
  def __init__(self, *args, **kwargs):
34
38
  super().__init__(*args, **kwargs)
@@ -68,16 +72,29 @@ class ProfileView(generic.DetailView):
68
72
 
69
73
  def post(self, request, *args, **kwargs):
70
74
  class AvatarForm(forms.Form):
71
- avatar = forms.FileField(required=True)
75
+ avatar = forms.ImageField(required=True)
76
+
77
+ def clean_avatar(self):
78
+ avatar = self.cleaned_data["avatar"]
79
+ if avatar.size > MAX_AVATAR_SIZE:
80
+ raise forms.ValidationError(
81
+ _(
82
+ "Avatar file is too large (%(size)s). "
83
+ "Max size is %(max_size)s."
84
+ )
85
+ % {
86
+ "size": filesizeformat(avatar.size),
87
+ "max_size": filesizeformat(MAX_AVATAR_SIZE),
88
+ }
89
+ )
90
+ return avatar
72
91
 
73
92
  form = AvatarForm(request.POST, request.FILES)
74
93
  if form.is_valid():
75
94
  file_name = "avatars/{}.png".format(request.user.pk)
76
95
  if default_storage.exists(file_name):
77
96
  default_storage.delete(file_name)
78
- default_storage.save(
79
- file_name, form.cleaned_data["avatar"], max_length=512 * 1024
80
- )
97
+ default_storage.save(file_name, form.cleaned_data["avatar"])
81
98
  key = make_template_fragment_key(
82
99
  "django-viewflow-avatar", [request.user.pk]
83
100
  )
@@ -1,11 +1,34 @@
1
+ import functools
1
2
  import json
2
3
  import re
4
+ from django.core.exceptions import PermissionDenied
3
5
  from django.http import HttpResponse, JsonResponse
4
6
  from django.views.decorators.csrf import csrf_exempt
5
7
  from django.views.decorators.http import require_POST
6
8
  from django.views.generic import TemplateView
7
9
 
8
10
 
11
+ def dash_view_permission_required(view_func):
12
+ """Require an authenticated user with view permission on the Dashboard.
13
+
14
+ Dash endpoints have no built-in auth of their own, and Dashboard's
15
+ default `has_view_permission` (inherited from AppMenuMixin, since
16
+ Dashboard isn't an Application) is always True -- so without this,
17
+ an anonymous user could read the dashboard layout/data and invoke
18
+ registered callbacks.
19
+ """
20
+
21
+ @functools.wraps(view_func)
22
+ def wrapper(request, viewset, *args, **kwargs):
23
+ if not request.user.is_authenticated:
24
+ raise PermissionDenied
25
+ if not viewset.has_view_permission(request.user):
26
+ raise PermissionDenied
27
+ return view_func(request, viewset, *args, **kwargs)
28
+
29
+ return wrapper
30
+
31
+
9
32
  def _extract_urls(data):
10
33
  """
11
34
  Given html string of <script src=""> tags, extracts list of static files stripping version info
@@ -35,15 +58,18 @@ class DashboardView(TemplateView):
35
58
  )
36
59
 
37
60
 
61
+ @dash_view_permission_required
38
62
  def layout_endpoint(request, viewset):
39
63
  dash_response = viewset.dash_app.serve_layout()
40
64
  return HttpResponse(dash_response.data, content_type="application/json")
41
65
 
42
66
 
67
+ @dash_view_permission_required
43
68
  def dependencies_endpoint(request, viewset):
44
69
  return JsonResponse(viewset.dash_app._callback_list, safe=False)
45
70
 
46
71
 
72
+ @dash_view_permission_required
47
73
  @csrf_exempt
48
74
  @require_POST
49
75
  def update_component_endpoint(request, viewset):
@@ -11,8 +11,8 @@ import json
11
11
  import uuid
12
12
  from typing import List
13
13
  from django.db import DEFAULT_DB_ALIAS, models, router
14
- from django.db.models import signals
15
- from django.db.models.sql.where import WhereNode, AND
14
+ from django.db.models.deletion import Collector
15
+ from django.db.models.sql.where import WhereNode, AND, OR
16
16
  from django.utils.duration import duration_iso_string
17
17
  from django.utils.functional import Promise
18
18
  from django.utils.timezone import is_aware
@@ -47,17 +47,17 @@ class CompositeKey(models.AutoField):
47
47
  def delete(inst, using=None, keep_parents=False):
48
48
  using = using or router.db_for_write(self.model, instance=inst)
49
49
 
50
- signals.pre_delete.send(sender=cls, instance=inst, using=using)
51
-
52
- query = cls._default_manager.filter(**self.__get__(inst))
53
- query._raw_delete(using)
50
+ collector = Collector(using=using, origin=inst)
51
+ collector.collect([inst], keep_parents=keep_parents)
52
+ result = collector.delete()
54
53
 
55
54
  for column in self.columns:
56
55
  setattr(inst, column, None)
57
56
 
58
- signals.post_delete.send(sender=cls, instance=inst, using=using)
57
+ return result
59
58
 
60
- cls.delete = delete
59
+ if cls.delete is models.Model.delete:
60
+ cls.delete = delete
61
61
 
62
62
  def get_prep_value(self, value):
63
63
  return self.to_python(value)
@@ -138,3 +138,37 @@ class Exact(models.Lookup):
138
138
  for lookup in lookups:
139
139
  value_constraint.add(lookup, AND)
140
140
  return value_constraint.as_sql(compiler, connection)
141
+
142
+
143
+ @CompositeKey.register_lookup
144
+ class In(models.Lookup):
145
+ """Supports ``pk__in=[...]``, notably the deletion `Collector`'s own
146
+ batch-delete query, which filters by ``<pk_attname>__in`` directly."""
147
+
148
+ lookup_name = "in"
149
+
150
+ def get_prep_lookup(self):
151
+ # The base Lookup.get_prep_lookup() would call
152
+ # output_field.get_prep_value() on the whole rhs list at once --
153
+ # CompositeKey.get_prep_value() expects a single key. Each key is
154
+ # prepared individually, per-field, in as_sql() instead.
155
+ return self.rhs
156
+
157
+ def as_sql(self, compiler, connection):
158
+ fields = [
159
+ self.lhs.field.model._meta.get_field(column)
160
+ for column in self.lhs.field.columns
161
+ ]
162
+ lookup_classes = [field.get_lookup("exact") for field in fields]
163
+
164
+ keys_constraint = WhereNode(connector=OR)
165
+ for key in self.rhs:
166
+ key_constraint = WhereNode()
167
+ for lookup_class, field, column in zip(
168
+ lookup_classes, fields, self.lhs.field.columns
169
+ ):
170
+ key_constraint.add(
171
+ lookup_class(field.get_col(self.lhs.alias), key[column]), AND
172
+ )
173
+ keys_constraint.add(key_constraint, OR)
174
+ return keys_constraint.as_sql(compiler, connection)
@@ -68,13 +68,19 @@ class WidgetRenderer(object):
68
68
  return self.create_root(context)
69
69
 
70
70
  @staticmethod
71
- @lru_cache(maxsize=None)
72
71
  def get_renderer(widget: forms.Widget) -> "Type[WidgetRenderer]":
72
+ return WidgetRenderer._get_renderer_for_class(type(widget))
73
+
74
+ @staticmethod
75
+ @lru_cache(maxsize=None)
76
+ def _get_renderer_for_class(
77
+ widget_class: "Type[forms.Widget]",
78
+ ) -> "Type[WidgetRenderer]":
73
79
  from viewflow.conf import settings
74
80
 
75
- for widget_class in type(widget).mro()[:-2]:
81
+ for klass in widget_class.mro()[:-2]:
76
82
  try:
77
- return settings.WIDGET_RENDERERS[widget_class]
83
+ return settings.WIDGET_RENDERERS[klass]
78
84
  except KeyError:
79
85
  continue
80
86
 
@@ -254,11 +260,12 @@ class SelectRenderer(WidgetRenderer):
254
260
  "name": name or "",
255
261
  "options": {
256
262
  key: value
257
- for key, value in options[0].items()
263
+ for key, value in option.items()
258
264
  if key not in ["template_name", "type", "wrap_label"]
259
265
  },
260
266
  }
261
267
  for name, options, _ in context["widget"]["optgroups"]
268
+ for option in options
262
269
  ],
263
270
  cls=FormDataEncoder,
264
271
  )
@@ -48,11 +48,12 @@ class FlowAdminMixin(object):
48
48
  object. Override this function if your flow class does not have a
49
49
  constructor that accepts the model object as the only argument.
50
50
  """
51
+ owner = self.get_flow_state(request)._owner
51
52
  try:
52
- return self.get_flow_state()._owner(obj)
53
+ return owner(obj)
53
54
  except TypeError:
54
55
  raise ValueError(
55
- f"{self.flow_state._owner} does not have a constructor that accepts"
56
+ f"{owner} does not have a constructor that accepts"
56
57
  " a single argument. Please redefine 'get_object_flow' on the model"
57
58
  " admin."
58
59
  )