django-viewflow 2.0.0b7__tar.gz → 2.0.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 (345) hide show
  1. django-viewflow-2.0.2/LICENSE.django +37 -0
  2. {django-viewflow-2.0.0b7/django_viewflow.egg-info → django-viewflow-2.0.2}/PKG-INFO +12 -9
  3. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/README.md +22 -9
  4. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2/django_viewflow.egg-info}/PKG-INFO +12 -9
  5. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/django_viewflow.egg-info/SOURCES.txt +55 -0
  6. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/django_viewflow.egg-info/requires.txt +1 -1
  7. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/setup.cfg +5 -1
  8. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/setup.py +9 -6
  9. django-viewflow-2.0.2/tests/test_middleware.py +60 -0
  10. django-viewflow-2.0.2/tests/test_templates.py +58 -0
  11. django-viewflow-2.0.2/tests/test_templatetags__viewflow.py +82 -0
  12. django-viewflow-2.0.2/tests/test_this_object.py +47 -0
  13. django-viewflow-2.0.2/tests/test_urls__base.py +60 -0
  14. django-viewflow-2.0.2/tests/test_utils__package.py +33 -0
  15. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/__init__.py +11 -13
  16. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/apps.py +2 -2
  17. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/conf.py +9 -9
  18. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/admin/__init__.py +4 -3
  19. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/auth.py +90 -58
  20. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/plotly/__init__.py +4 -3
  21. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/plotly/material.py +24 -14
  22. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/plotly/views.py +16 -11
  23. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fields.py +20 -25
  24. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/base.py +20 -18
  25. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/typing.py +1 -1
  26. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/views.py +3 -3
  27. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/jsonstore.py +15 -3
  28. django-viewflow-2.0.2/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
  29. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/de/LC_MESSAGES/django.po +86 -70
  30. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
  31. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/es/LC_MESSAGES/django.po +83 -67
  32. django-viewflow-2.0.2/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
  33. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/fr/LC_MESSAGES/django.po +100 -84
  34. django-viewflow-2.0.2/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
  35. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/it/LC_MESSAGES/django.po +93 -77
  36. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
  37. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/ja/LC_MESSAGES/django.po +84 -70
  38. django-viewflow-2.0.2/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
  39. django-viewflow-2.0.2/viewflow/locale/kk/LC_MESSAGES/django.po +764 -0
  40. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/ko/LC_MESSAGES/django.po +79 -65
  41. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/pt/LC_MESSAGES/django.po +79 -63
  42. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
  43. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/ru/LC_MESSAGES/django.po +85 -65
  44. django-viewflow-2.0.2/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
  45. {django-viewflow-2.0.0b7/viewflow/locale/kk → django-viewflow-2.0.2/viewflow/locale/sr}/LC_MESSAGES/django.po +199 -177
  46. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +79 -65
  47. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/management/__init__.py +21 -15
  48. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/middleware.py +16 -9
  49. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/css/trix.css +3 -1
  50. django-viewflow-2.0.2/viewflow/static/viewflow/css/viewflow.min.css +22 -0
  51. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
  52. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
  53. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
  54. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
  55. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
  56. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +5991 -0
  57. django-viewflow-2.0.2/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +1 -0
  58. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +2 -0
  59. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +3 -0
  60. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +3 -0
  61. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +1 -0
  62. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +2 -0
  63. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +1 -0
  64. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +3 -0
  65. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +18 -0
  66. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +1 -0
  67. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +2 -0
  68. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +1 -0
  69. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +2 -0
  70. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +1 -0
  71. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +3 -0
  72. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +5 -0
  73. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +1 -0
  74. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +2 -0
  75. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +1 -0
  76. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +1 -0
  77. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +2 -0
  78. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +1 -0
  79. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +3 -0
  80. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +13 -0
  81. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +1 -0
  82. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +2 -0
  83. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +51 -0
  84. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +2 -0
  85. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +11 -0
  86. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +1 -0
  87. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +2 -0
  88. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +1 -0
  89. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +3 -0
  90. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +14 -0
  91. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +1 -0
  92. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +3 -0
  93. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +25 -0
  94. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +1 -0
  95. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +58 -0
  96. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +1 -0
  97. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +1 -0
  98. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +1 -0
  99. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +239 -0
  100. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +32 -0
  101. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +2 -0
  102. django-viewflow-2.0.2/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +1 -0
  103. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/js/viewflow.min.js +138 -141
  104. django-viewflow-2.0.2/viewflow/static/viewflow/js/viewflow.min.js.map +1 -0
  105. django-viewflow-2.0.2/viewflow/static/viewflow/js/vis-network.min.js +27 -0
  106. django-viewflow-2.0.2/viewflow/static/viewflow/js/vis-network.min.js.map +1 -0
  107. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/login.html +1 -1
  108. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/base_page.html +7 -4
  109. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/start.html +1 -1
  110. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task.html +3 -1
  111. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_base.html +1 -1
  112. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_cancel.html +1 -1
  113. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_undo.html +1 -1
  114. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templatetags/fsm.py +4 -3
  115. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templatetags/workflow.py +9 -3
  116. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/this_object.py +4 -2
  117. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/urls/model.py +6 -1
  118. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/actions.py +27 -20
  119. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/base.py +9 -9
  120. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/create.py +4 -2
  121. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/delete.py +13 -10
  122. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/filters.py +13 -1
  123. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/list.py +7 -7
  124. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/search.py +5 -5
  125. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/update.py +4 -2
  126. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/__init__.py +11 -4
  127. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/activation.py +6 -3
  128. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/admin.py +2 -1
  129. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/base.py +2 -3
  130. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/chart.py +121 -107
  131. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/context.py +2 -2
  132. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/fields.py +13 -1
  133. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/mixins.py +6 -4
  134. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/nodes.py +30 -0
  135. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/actions.py +10 -3
  136. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/create.py +8 -5
  137. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/filters.py +24 -19
  138. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/list.py +19 -10
  139. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/update.py +9 -7
  140. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/lock.py +11 -6
  141. django-viewflow-2.0.2/viewflow/workflow/migrations/0001_initial.py +103 -0
  142. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0002_fsmchange.py +9 -11
  143. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +3 -3
  144. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0004_extend_fields_length.py +6 -6
  145. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0004_subprocess.py +2 -3
  146. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0005_merge.py +3 -4
  147. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0005_rename_flowcls.py +4 -4
  148. django-viewflow-2.0.2/viewflow/workflow/migrations/0006_i18n.py +146 -0
  149. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0006_merge.py +3 -4
  150. django-viewflow-2.0.2/viewflow/workflow/migrations/0007_owner_permission_obj.py +30 -0
  151. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0007_task_assigned.py +4 -4
  152. django-viewflow-2.0.2/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +57 -0
  153. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0008_merge.py +3 -4
  154. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0009_merge.py +3 -4
  155. django-viewflow-2.0.2/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +22 -0
  156. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/models.py +9 -2
  157. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/job.py +29 -0
  158. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/join.py +4 -4
  159. django-viewflow-2.0.2/viewflow/workflow/nodes/obsolete.py +49 -0
  160. django-viewflow-2.0.2/viewflow/workflow/status.py +22 -0
  161. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/token.py +4 -4
  162. django-viewflow-2.0.0b7/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
  163. django-viewflow-2.0.0b7/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
  164. django-viewflow-2.0.0b7/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
  165. django-viewflow-2.0.0b7/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
  166. django-viewflow-2.0.0b7/viewflow/static/viewflow/css/viewflow.min.css +0 -22
  167. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
  168. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
  169. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
  170. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
  171. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
  172. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -4524
  173. django-viewflow-2.0.0b7/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -1
  174. django-viewflow-2.0.0b7/viewflow/static/viewflow/js/viewflow.min.js.map +0 -1
  175. django-viewflow-2.0.0b7/viewflow/static/viewflow/js/vis-network.min.js +0 -27
  176. django-viewflow-2.0.0b7/viewflow/static/viewflow/js/vis-network.min.js.map +0 -1
  177. django-viewflow-2.0.0b7/viewflow/workflow/migrations/0001_initial.py +0 -48
  178. django-viewflow-2.0.0b7/viewflow/workflow/migrations/0006_i18n.py +0 -110
  179. django-viewflow-2.0.0b7/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -25
  180. django-viewflow-2.0.0b7/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -45
  181. django-viewflow-2.0.0b7/viewflow/workflow/nodes/obsolete.py +0 -45
  182. django-viewflow-2.0.0b7/viewflow/workflow/status.py +0 -22
  183. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/LICENSE +0 -0
  184. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/LICENSE_EXCEPTION +0 -0
  185. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/MANIFEST.in +0 -0
  186. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/django_viewflow.egg-info/dependency_links.txt +0 -0
  187. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/django_viewflow.egg-info/not-zip-safe +0 -0
  188. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/django_viewflow.egg-info/top_level.txt +0 -0
  189. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/__init__.py +0 -0
  190. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/admin/apps.py +0 -0
  191. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/contrib/plotly/viewset.py +0 -0
  192. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/forms/__init__.py +0 -0
  193. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/forms/renderers.py +0 -0
  194. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/__init__.py +0 -0
  195. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/admin.py +0 -0
  196. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/chart.py +0 -0
  197. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/fsm/viewset.py +0 -0
  198. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
  199. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
  200. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  201. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/management/commands/__init__.py +0 -0
  202. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/management/commands/flowexport.py +0 -0
  203. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
  204. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
  205. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
  206. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
  207. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
  208. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
  209. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
  210. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
  211. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
  212. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
  213. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
  214. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
  215. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
  216. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
  217. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
  218. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  219. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  220. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
  221. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
  222. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  223. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  224. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
  225. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
  226. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
  227. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  228. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
  229. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
  230. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  231. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  232. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
  233. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
  234. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  235. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  236. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
  237. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
  238. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  239. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  240. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
  241. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/img/favicon.png +0 -0
  242. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/img/user.png +0 -0
  243. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
  244. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
  245. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/js/smartcrop.js +0 -0
  246. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/js/trix.js +0 -0
  247. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
  248. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/400.html +0 -0
  249. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/403.html +0 -0
  250. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/404.html +0 -0
  251. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/500.html +0 -0
  252. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/admin/fsm_change_form.html +0 -0
  253. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
  254. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/admin/fsm_change_list.html +0 -0
  255. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/admin/fsm_transition_form.html +0 -0
  256. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
  257. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/logged_out.html +0 -0
  258. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/password_change_done.html +0 -0
  259. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/password_change_form.html +0 -0
  260. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/password_reset_complete.html +0 -0
  261. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/password_reset_confirm.html +0 -0
  262. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/password_reset_done.html +0 -0
  263. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/password_reset_form.html +0 -0
  264. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/profile.html +0 -0
  265. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/registration/provider_list.html +0 -0
  266. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/base.html +0 -0
  267. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
  268. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
  269. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
  270. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
  271. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
  272. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
  273. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
  274. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
  275. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
  276. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
  277. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
  278. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
  279. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
  280. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
  281. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
  282. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
  283. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
  284. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/views/delete_action.html +0 -0
  285. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/views/detail.html +0 -0
  286. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/views/form.html +0 -0
  287. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/views/list.html +0 -0
  288. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/views/transition.html +0 -0
  289. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/assign.html +0 -0
  290. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
  291. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
  292. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
  293. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
  294. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
  295. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
  296. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
  297. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
  298. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
  299. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
  300. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
  301. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
  302. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
  303. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_detail.html +0 -0
  304. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
  305. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
  306. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
  307. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
  308. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
  309. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
  310. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
  311. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templatetags/__init__.py +0 -0
  312. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/templatetags/viewflow.py +0 -0
  313. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/urls/__init__.py +0 -0
  314. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/urls/base.py +0 -0
  315. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/urls/sites.py +0 -0
  316. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/utils.py +0 -0
  317. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/__init__.py +0 -0
  318. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/views/detail.py +0 -0
  319. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/apps.py +0 -0
  320. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/exceptions.py +0 -0
  321. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/__init__.py +0 -0
  322. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/utils.py +0 -0
  323. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/__init__.py +0 -0
  324. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/chart.py +0 -0
  325. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/dashboard.py +0 -0
  326. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/detail.py +0 -0
  327. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/views/mixins.py +0 -0
  328. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/flow/viewset.py +0 -0
  329. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/managers.py +0 -0
  330. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
  331. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
  332. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/migrations/__init__.py +0 -0
  333. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/__init__.py +0 -0
  334. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/end.py +0 -0
  335. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/func.py +0 -0
  336. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/handle.py +0 -0
  337. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/if_gate.py +0 -0
  338. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/mixins.py +0 -0
  339. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/split.py +0 -0
  340. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/start.py +0 -0
  341. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/subprocess.py +0 -0
  342. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/switch.py +0 -0
  343. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/nodes/view.py +0 -0
  344. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/signals.py +0 -0
  345. {django-viewflow-2.0.0b7 → django-viewflow-2.0.2}/viewflow/workflow/utils.py +0 -0
@@ -0,0 +1,37 @@
1
+ Viewflow is dual-licensed under AGPL defined in file 'LICENSE' with
2
+ LICENSE_EXCEPTION and the Commercial license defined in file 'COMM_LICENSE',
3
+ which is part of this source code package.
4
+
5
+ Viewflow includes code from the Django web framework, which is licensed under
6
+ the three-clause BSD license, a permissive open source license. The copyright
7
+ and licenseis included below for compliance with Django's terms.
8
+
9
+ ----------------------------------------------------------------------
10
+
11
+ Copyright (c) Django Software Foundation and individual contributors.
12
+ All rights reserved.
13
+
14
+ Redistribution and use in source and binary forms, with or without modification,
15
+ are permitted provided that the following conditions are met:
16
+
17
+ 1. Redistributions of source code must retain the above copyright notice,
18
+ this list of conditions and the following disclaimer.
19
+
20
+ 2. Redistributions in binary form must reproduce the above copyright
21
+ notice, this list of conditions and the following disclaimer in the
22
+ documentation and/or other materials provided with the distribution.
23
+
24
+ 3. Neither the name of Django nor the names of its contributors may be used
25
+ to endorse or promote products derived from this software without
26
+ specific prior written permission.
27
+
28
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
29
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
30
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
31
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
32
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
33
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
34
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
35
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,26 +1,29 @@
1
- Metadata-Version: 1.2
1
+ Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.0.0b7
3
+ Version: 2.0.2
4
4
  Summary: Reusable library to build business applications fast
5
- Home-page: UNKNOWN
6
5
  Author: Mikhail Podgurskiy
7
6
  Author-email: kmmbvnr@gmail.com
8
7
  License: AGPL
9
- Description: UNKNOWN
10
8
  Keywords: django,admin,workflow,fsm,bpm,bpmn
11
- Platform: UNKNOWN
12
- Classifier: Development Status :: 4 - Beta
9
+ Classifier: Development Status :: 5 - Production/Stable
13
10
  Classifier: Intended Audience :: Developers
14
11
  Classifier: Natural Language :: English
15
12
  Classifier: Operating System :: OS Independent
16
13
  Classifier: Framework :: Django
17
- Classifier: Framework :: Django :: 4.0
18
- Classifier: Framework :: Django :: 4.1
14
+ Classifier: Framework :: Django :: 4.2
15
+ Classifier: Framework :: Django :: 5.0
19
16
  Classifier: Programming Language :: Python :: 3
20
17
  Classifier: Programming Language :: Python :: 3 :: Only
21
18
  Classifier: Programming Language :: Python :: 3.8
22
19
  Classifier: Programming Language :: Python :: 3.9
23
20
  Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
24
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
25
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
26
- Requires-Python: >=3.7
26
+ Requires-Python: >=3.8
27
+ License-File: LICENSE
28
+ Requires-Dist: Django>=4.2
29
+ Requires-Dist: django-filter>=2.3.0
@@ -31,11 +31,11 @@ Viewflow works with Python 3.8 or greater and Django 4.0+
31
31
 
32
32
  Viewflow:
33
33
 
34
- pip install django-viewflow --pre
34
+ pip install django-viewflow
35
35
 
36
- Viewflow-PRO
36
+ Viewflow-PRO:
37
37
 
38
- pip install django-viewflow-pro --extra-index-url https://pypi.viewflow.io/<licence_id>/simple/ --pre
38
+ pip install django-viewflow-pro --extra-index-url https://pypi.viewflow.io/<licence_id>/simple/
39
39
 
40
40
  Add 'viewflow' and, in case you need workflow capabilities 'viewflow.workflow' to the INSTALLED_APPS settings.py
41
41
 
@@ -183,13 +183,26 @@ modifications of Viewflow. You can find the commercial license terms in
183
183
 
184
184
  ## Changelog
185
185
 
186
- ### 2.0.0.b7 2023-08-25
186
+ ### 2.0.2 2024-04-19
187
187
 
188
- - Fix pre-populated file field value
189
- - Improvements for depended select widget
190
- - Add total counter widget
191
- - Improve wizard template default breadcrumbs
192
- - Support for %b date format
188
+ - Fix logout link
189
+ - Change admin user autocomplete field to readonly
190
+
191
+
192
+ ### 2.0.1 2024-04-17
193
+
194
+ - Fix for AjaxModelSelect in m2m relations
195
+
196
+
197
+ ### 2.0.0 2024-04-09
198
+
199
+ - Added support for Django 5.0+
200
+ - Updated to Material Components Web 1.4.0
201
+ - Improved help text styles
202
+ - Fixed default app_name configuration for Viewsets
203
+ - List View initial filter values support
204
+ - Enhanced localization support
205
+ - Corrected object permission checks for delete actions
193
206
 
194
207
 
195
208
  [build]: https://img.shields.io/github/actions/workflow/status/viewflow/viewflow/django.yml?branch=main
@@ -1,26 +1,29 @@
1
- Metadata-Version: 1.2
1
+ Metadata-Version: 2.1
2
2
  Name: django-viewflow
3
- Version: 2.0.0b7
3
+ Version: 2.0.2
4
4
  Summary: Reusable library to build business applications fast
5
- Home-page: UNKNOWN
6
5
  Author: Mikhail Podgurskiy
7
6
  Author-email: kmmbvnr@gmail.com
8
7
  License: AGPL
9
- Description: UNKNOWN
10
8
  Keywords: django,admin,workflow,fsm,bpm,bpmn
11
- Platform: UNKNOWN
12
- Classifier: Development Status :: 4 - Beta
9
+ Classifier: Development Status :: 5 - Production/Stable
13
10
  Classifier: Intended Audience :: Developers
14
11
  Classifier: Natural Language :: English
15
12
  Classifier: Operating System :: OS Independent
16
13
  Classifier: Framework :: Django
17
- Classifier: Framework :: Django :: 4.0
18
- Classifier: Framework :: Django :: 4.1
14
+ Classifier: Framework :: Django :: 4.2
15
+ Classifier: Framework :: Django :: 5.0
19
16
  Classifier: Programming Language :: Python :: 3
20
17
  Classifier: Programming Language :: Python :: 3 :: Only
21
18
  Classifier: Programming Language :: Python :: 3.8
22
19
  Classifier: Programming Language :: Python :: 3.9
23
20
  Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
24
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
25
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
26
- Requires-Python: >=3.7
26
+ Requires-Python: >=3.8
27
+ License-File: LICENSE
28
+ Requires-Dist: Django>=4.2
29
+ Requires-Dist: django-filter>=2.3.0
@@ -1,4 +1,5 @@
1
1
  LICENSE
2
+ LICENSE.django
2
3
  LICENSE_EXCEPTION
3
4
  MANIFEST.in
4
5
  README.md
@@ -10,6 +11,12 @@ django_viewflow.egg-info/dependency_links.txt
10
11
  django_viewflow.egg-info/not-zip-safe
11
12
  django_viewflow.egg-info/requires.txt
12
13
  django_viewflow.egg-info/top_level.txt
14
+ tests/test_middleware.py
15
+ tests/test_templates.py
16
+ tests/test_templatetags__viewflow.py
17
+ tests/test_this_object.py
18
+ tests/test_urls__base.py
19
+ tests/test_utils__package.py
13
20
  viewflow/__init__.py
14
21
  viewflow/apps.py
15
22
  viewflow/conf.py
@@ -53,6 +60,8 @@ viewflow/locale/pt/LC_MESSAGES/django.mo
53
60
  viewflow/locale/pt/LC_MESSAGES/django.po
54
61
  viewflow/locale/ru/LC_MESSAGES/django.mo
55
62
  viewflow/locale/ru/LC_MESSAGES/django.po
63
+ viewflow/locale/sr/LC_MESSAGES/django.mo
64
+ viewflow/locale/sr/LC_MESSAGES/django.po
56
65
  viewflow/locale/zh_Hans/LC_MESSAGES/django.mo
57
66
  viewflow/locale/zh_Hans/LC_MESSAGES/django.po
58
67
  viewflow/management/__init__.py
@@ -116,6 +125,51 @@ viewflow/static/viewflow/js/viewflow.min.js
116
125
  viewflow/static/viewflow/js/viewflow.min.js.map
117
126
  viewflow/static/viewflow/js/vis-network.min.js
118
127
  viewflow/static/viewflow/js/vis-network.min.js.map
128
+ viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js
129
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js
130
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt
131
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map
132
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js
133
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map
134
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js
135
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt
136
+ viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map
137
+ viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js
138
+ viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map
139
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js
140
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map
141
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js
142
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt
143
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map
144
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js
145
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt
146
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map
147
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js
148
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map
149
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js
150
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt
151
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map
152
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js
153
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt
154
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js
155
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt
156
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map
157
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js
158
+ viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map
159
+ viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js
160
+ viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt
161
+ viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map
162
+ viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js
163
+ viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt
164
+ viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map
165
+ viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js
166
+ viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js
167
+ viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js
168
+ viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js
169
+ viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js
170
+ viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js
171
+ viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js
172
+ viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map
119
173
  viewflow/templates/400.html
120
174
  viewflow/templates/403.html
121
175
  viewflow/templates/404.html
@@ -251,6 +305,7 @@ viewflow/workflow/migrations/0008_merge.py
251
305
  viewflow/workflow/migrations/0009_merge.py
252
306
  viewflow/workflow/migrations/0010_viewflow20.py
253
307
  viewflow/workflow/migrations/0011_alter_task_created_and_more.py
308
+ viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py
254
309
  viewflow/workflow/migrations/__init__.py
255
310
  viewflow/workflow/nodes/__init__.py
256
311
  viewflow/workflow/nodes/end.py
@@ -1,2 +1,2 @@
1
- Django>=3.2
1
+ Django>=4.2
2
2
  django-filter>=2.3.0
@@ -1,3 +1,6 @@
1
+ [metadata]
2
+ license_files = LICENSE
3
+
1
4
  [mypy]
2
5
  python_version = 3.8
3
6
  ignore_missing_imports = True
@@ -5,7 +8,8 @@ files = viewflow/**/*.py
5
8
 
6
9
  [flake8]
7
10
  max-line-length = 130
8
- ignore = D100, D105, D107, W503
11
+ ignore = D100, D105, D107, W503, E203
12
+ extend-ignore = W503
9
13
 
10
14
  [coverage:report]
11
15
  omit = ../*migrations*
@@ -4,7 +4,7 @@ README = open("README.md", "r", encoding="utf-8").read()
4
4
 
5
5
  setuptools.setup(
6
6
  name="django-viewflow",
7
- version="2.0.0b7",
7
+ version="2.0.2",
8
8
  author_email="kmmbvnr@gmail.com",
9
9
  author="Mikhail Podgurskiy",
10
10
  description="Reusable library to build business applications fast",
@@ -14,26 +14,29 @@ setuptools.setup(
14
14
  # long_description_content_type="text/markdown",
15
15
  # long_description=README,
16
16
  packages=setuptools.find_packages(exclude=["tests*"]),
17
- python_requires=">=3.7",
17
+ python_requires=">=3.8",
18
18
  zip_safe=False,
19
19
  classifiers=[
20
- "Development Status :: 4 - Beta",
20
+ "Development Status :: 5 - Production/Stable",
21
21
  "Intended Audience :: Developers",
22
22
  "Natural Language :: English",
23
23
  "Operating System :: OS Independent",
24
24
  "Framework :: Django",
25
- "Framework :: Django :: 4.0",
26
- "Framework :: Django :: 4.1",
25
+ "Framework :: Django :: 4.2",
26
+ "Framework :: Django :: 5.0",
27
27
  "Programming Language :: Python :: 3",
28
28
  "Programming Language :: Python :: 3 :: Only",
29
29
  "Programming Language :: Python :: 3.8",
30
30
  "Programming Language :: Python :: 3.9",
31
31
  "Programming Language :: Python :: 3.10",
32
+ "Programming Language :: Python :: 3.11",
33
+ "Programming Language :: Python :: 3.12",
34
+ "Programming Language :: Python :: 3.13",
32
35
  "Topic :: Software Development :: Libraries :: Python Modules",
33
36
  "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
34
37
  ],
35
38
  install_requires=[
36
- "Django>=3.2",
39
+ "Django>=4.2",
37
40
  "django-filter>=2.3.0",
38
41
  ],
39
42
  )
@@ -0,0 +1,60 @@
1
+ from django.test import TestCase, override_settings
2
+ from django.urls import path
3
+ from django.views.generic import TemplateView
4
+ from viewflow.urls import AppMenuMixin, Application, Site, Viewset, route
5
+
6
+
7
+ class NestedViewset(Viewset):
8
+ app_name = "nested"
9
+ page_path = path(
10
+ "page/", TemplateView.as_view(template_name="viewflow/base.html"), name="page"
11
+ )
12
+
13
+
14
+ class CityViewset(AppMenuMixin, Viewset):
15
+ index_path = path(
16
+ "", TemplateView.as_view(template_name="viewflow/base.html"), name="index"
17
+ )
18
+ nested_path = route("nested/", NestedViewset())
19
+
20
+
21
+ site = Site(
22
+ title="Test site",
23
+ viewsets=[
24
+ Application(
25
+ app_name="test",
26
+ viewsets=[
27
+ CityViewset(),
28
+ ],
29
+ )
30
+ ],
31
+ )
32
+
33
+ urlpatterns = [path("", site.urls)]
34
+
35
+
36
+ @override_settings(ROOT_URLCONF=__name__)
37
+ class Test(TestCase):
38
+ def test_context_injected(self):
39
+ response = self.client.get("/test/city/")
40
+ match = response.wsgi_request.resolver_match
41
+
42
+ self.assertTrue(hasattr(match, "site"))
43
+ self.assertEqual(match.site, site)
44
+
45
+ self.assertTrue(hasattr(match, "app"))
46
+ self.assertEqual(match.app, site._children[0])
47
+
48
+ # App -> Site -> CityViewset
49
+ self.assertTrue(hasattr(match, "viewset"))
50
+ self.assertEqual(match.viewset, site._children[0]._children[0])
51
+
52
+ def test_nested_viewset_injected(self):
53
+ response = self.client.get("/test/city/nested/page/")
54
+ match = response.wsgi_request.resolver_match
55
+
56
+ # App -> Site -> CityViewset -> Nested
57
+ self.assertTrue(hasattr(match, "viewset"))
58
+ self.assertEqual(
59
+ match.viewset, site._children[0]._children[0].nested_path.viewset
60
+ )
@@ -0,0 +1,58 @@
1
+ import html5lib
2
+ from django.contrib.auth.models import AnonymousUser
3
+ from django.shortcuts import render
4
+ from django.test import RequestFactory, TestCase, override_settings
5
+ from django.urls import path
6
+ from django.views.generic import TemplateView
7
+ from viewflow.urls import Application, AppMenuMixin, IndexViewMixin, Site, Viewset
8
+
9
+
10
+ @override_settings(ROOT_URLCONF=__name__)
11
+ class Test(TestCase):
12
+ fixtures = ['users.json']
13
+
14
+ def setUp(self):
15
+ self.request = RequestFactory().get('/')
16
+ self.request.user = AnonymousUser()
17
+ self.validator = html5lib.HTMLParser(strict=True)
18
+
19
+ def test_base(self):
20
+ response = render(self.request, 'viewflow/base.html', {})
21
+ self.validator.parse(response.content)
22
+
23
+ def test_base__snackbar(self):
24
+ response = render(self.request, 'viewflow/base.html', {
25
+ 'messages': ['Test message 1', 'Rest message 2']
26
+ })
27
+ self.assertTrue('vf-snackbar' in response.content.decode())
28
+ self.validator.parse(response.content)
29
+
30
+ def test_base_page(self):
31
+ response = render(self.request, 'viewflow/base_page.html', {})
32
+ self.validator.parse(response.content)
33
+
34
+ def test_base_page__with_site_menu(self):
35
+ self.assertTrue(self.client.login(username="admin", password="admin"))
36
+ response = self.client.get('/application/test/test/')
37
+ self.assertTrue('Test Application' in response.content.decode())
38
+ self.assertTrue('Test Viewset' in response.content.decode())
39
+ self.validator.parse(response.content)
40
+
41
+ def test_lockscreen__404(self):
42
+ response = render(self.request, '404.html', {})
43
+ self.validator.parse(response.content)
44
+
45
+
46
+ class TestViewset(IndexViewMixin, AppMenuMixin, Viewset):
47
+ title = 'Test Viewset'
48
+ page_path = path('test/', TemplateView.as_view(template_name='viewflow/base_page.html'), name="page")
49
+
50
+
51
+ urlpatterns = [
52
+ path('', Site(viewsets=[
53
+ Application(
54
+ title='Test Application',
55
+ viewsets=[TestViewset()]
56
+ )
57
+ ]).urls)
58
+ ]
@@ -0,0 +1,82 @@
1
+ from django.contrib.auth.models import User
2
+ from django.template import Template, Context
3
+ from django.test import TestCase, RequestFactory, override_settings
4
+ from django.urls import path
5
+ from viewflow.urls import Site, ModelViewset
6
+
7
+
8
+ @override_settings(ROOT_URLCONF=__name__)
9
+ class Test(TestCase):
10
+ fixtures = ["users.json"]
11
+
12
+ def setUp(self):
13
+ self.request = RequestFactory().get("/test/")
14
+ self.user = User.objects.get(username="admin")
15
+ self.request.user = self.user
16
+
17
+ def test_get_absolute_url(self):
18
+ context = Context({"request": self.request, "site": site, "user": self.user})
19
+ context.request = self.request
20
+
21
+ content = Template(
22
+ "{% load viewflow %}{% get_absolute_url site user %}"
23
+ ).render(context)
24
+ self.assertEqual(f"/user/{self.user.pk}/change/", content)
25
+
26
+ content = Template(
27
+ "{% load viewflow %}{% get_absolute_url site user as var%}{{ var }}"
28
+ ).render(context)
29
+ self.assertEqual(f"/user/{self.user.pk}/change/", content)
30
+
31
+ def test_reverse(self):
32
+ context = Context(
33
+ {"request": self.request, "viewset": site.viewsets[0], "user": self.user}
34
+ )
35
+ context.request = self.request
36
+
37
+ content = Template(
38
+ "{% load viewflow %}{% reverse viewset 'change' user.pk %}"
39
+ ).render(context)
40
+ self.assertEqual(f"/user/{self.user.pk}/change/", content)
41
+
42
+ content = Template(
43
+ "{% load viewflow %}{% reverse viewset 'change' user.pk as var %}{{ var }}"
44
+ ).render(context)
45
+ self.assertEqual(f"/user/{self.user.pk}/change/", content)
46
+
47
+ content = Template(
48
+ "{% load viewflow %}{% reverse viewset 'change' pk=user.pk %}"
49
+ ).render(context)
50
+ self.assertEqual(f"/user/{self.user.pk}/change/", content)
51
+
52
+ def test_get_verbose_name(self):
53
+ context = Context({"model": User})
54
+ content = Template("{% load viewflow %}{{ model|verbose_name }}").render(
55
+ context
56
+ )
57
+ self.assertEqual("user", content)
58
+
59
+ context = Context({"user": self.user})
60
+ content = Template("{% load viewflow %}{{ user|verbose_name }}").render(context)
61
+ self.assertEqual("user", content)
62
+
63
+ def test_get_verbose_name_plural(self):
64
+ context = Context({"model": User})
65
+ content = Template("{% load viewflow %}{{ model|verbose_name_plural }}").render(
66
+ context
67
+ )
68
+ self.assertEqual("users", content)
69
+
70
+ context = Context({"user": self.user})
71
+ content = Template("{% load viewflow %}{{ user|verbose_name_plural }}").render(
72
+ context
73
+ )
74
+ self.assertEqual("users", content)
75
+
76
+ def _test_list_column_order(self):
77
+ pass
78
+
79
+
80
+ site = Site(viewsets=[ModelViewset(model=User)])
81
+
82
+ urlpatterns = [path("", site.urls)]
@@ -0,0 +1,47 @@
1
+ import functools
2
+ from django.test import TestCase
3
+ from viewflow import this
4
+
5
+
6
+ class Review(object):
7
+ approver = 'Will Smith'
8
+ publisher = 'John Doe'
9
+
10
+ def approve(self):
11
+ return 'approve'
12
+
13
+ def publish(self):
14
+ return 'publish'
15
+
16
+ def _this_owner(self, transition):
17
+ if transition == self.approve:
18
+ return self.approver
19
+ elif transition == self.publish:
20
+ return self.publisher
21
+ else:
22
+ raise ValueError(f"Can't find owner for {transition}")
23
+
24
+ def _this_call(self, transition):
25
+ def call_transition(self, transition):
26
+ return transition()
27
+ return functools.partial(call_transition, self, transition)
28
+
29
+
30
+
31
+ class Test(TestCase):
32
+ def test_this_refs_data(self):
33
+ self.assertEqual(this.some_name.name, 'some_name')
34
+ self.assertEqual(this.another_some_name.name, 'another_some_name')
35
+
36
+ def test_this_ref_resolve(self):
37
+ review = Review()
38
+
39
+ approve = this.approve.resolve(review)
40
+ self.assertEqual(approve, review.approve)
41
+ self.assertEqual(Review.approver, this.approve.owner.resolve(review))
42
+ self.assertEqual(this.approve.call.resolve(review)(), 'approve')
43
+
44
+ publish = this.publish.resolve(review)
45
+ self.assertEqual(publish, review.publish)
46
+ self.assertEqual(Review.publisher, this.publish.owner.resolve(review))
47
+ self.assertEqual(this.publish.call.resolve(review)(), 'publish')
@@ -0,0 +1,60 @@
1
+ from django.views.generic import TemplateView
2
+ from django.urls import path, reverse
3
+ from django.test import TestCase, override_settings
4
+ from viewflow.urls import route, IndexViewMixin, Viewset
5
+
6
+
7
+ class NestedViewset(IndexViewMixin, Viewset):
8
+ app_name = "nested"
9
+
10
+ page_path = path(
11
+ "page/", TemplateView.as_view(template_name="viewflow/base.html"), name="page"
12
+ )
13
+ route_path = route("test/", Viewset())
14
+
15
+
16
+ class InheritedViewset(NestedViewset):
17
+ app_name = "nested"
18
+
19
+ page_path = path(
20
+ "page2/", TemplateView.as_view(template_name="viewflow/base.html"), name="page"
21
+ )
22
+
23
+
24
+ class RootViewset(Viewset):
25
+ app_name = "root"
26
+
27
+ index_path = path(
28
+ "", TemplateView.as_view(template_name="viewflow/base.html"), name="index"
29
+ )
30
+ nested_path = route("test/", NestedViewset())
31
+ nested2_path = route("nested2/", NestedViewset(app_name="nested2"))
32
+
33
+ # check here that route_url mounted second time successfully
34
+ nested3_path = route("inherited/", InheritedViewset(app_name="nested2"))
35
+
36
+
37
+ urlconfig = RootViewset()
38
+
39
+ urlpatterns = [path("", urlconfig.urls)]
40
+
41
+
42
+ @override_settings(ROOT_URLCONF=__name__)
43
+ class Test(TestCase): # noqa: D101
44
+ def test_created_urls(self):
45
+ self.assertEqual("/", reverse("root:index"))
46
+
47
+ self.assertEqual("/test/", reverse("root:nested:index"))
48
+ self.assertEqual("/test/page/", reverse("root:nested:page"))
49
+
50
+ self.assertEqual("/nested2/", reverse("root:nested2:index"))
51
+ self.assertEqual("/nested2/page/", reverse("root:nested2:page"))
52
+
53
+ def test_urlconf_resolve(self):
54
+ self.assertEqual("/", urlconfig.reverse("index"))
55
+ self.assertEqual("/test/", urlconfig.nested_path.viewset.reverse("index"))
56
+ self.assertEqual("/test/page/", urlconfig.nested_path.viewset.reverse("page"))
57
+
58
+ def test_auto_redirect(self):
59
+ response = self.client.get(reverse("root:nested:index"))
60
+ self.assertRedirects(response, "/test/page/")
@@ -0,0 +1,33 @@
1
+ from django.test import TestCase
2
+ from viewflow import utils
3
+
4
+
5
+ class Test(TestCase): # noqa: D101
6
+ def test_get_app_package_succeed(self):
7
+ self.assertEqual(utils.get_app_package('admin'), 'django.contrib.admin')
8
+ self.assertEqual(utils.get_app_package('auth'), 'django.contrib.auth')
9
+ self.assertEqual(utils.get_app_package('viewflow'), 'viewflow.workflow')
10
+
11
+ def test_get_app_package_bug112(self):
12
+ """ Application models are located in a module that consists of multiple files """
13
+ self.assertEqual(utils.get_app_package('tests'), 'tests')
14
+
15
+ def test_get_app_package_missing_app_raise(self):
16
+ self.assertRaises(Exception, utils.get_app_package, 'missing_app')
17
+
18
+ def test_get_containing_app_data_succeed(self):
19
+ self.assertEqual(utils.get_containing_app_data('django.contrib.admin.views'),
20
+ ('admin', 'django.contrib.admin'))
21
+ self.assertEqual(utils.get_containing_app_data('django.contrib.auth.urls'),
22
+ ('auth', 'django.contrib.auth'))
23
+ self.assertEqual(utils.get_containing_app_data('viewflow.workflow.flow'),
24
+ ('viewflow', 'viewflow.workflow'))
25
+
26
+ def test_get_containing_app_data_bug112(self):
27
+ """ Application models are located in a module that consists of multiple files """
28
+ self.assertEqual(utils.get_containing_app_data('tests.models'),
29
+ ('tests', 'tests'))
30
+
31
+ def test_get_containing_app_data_none_on_missing(self):
32
+ self.assertEqual(utils.get_containing_app_data('unknown.module'),
33
+ (None, None))