django-viewflow 2.1.0__tar.gz → 2.1.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.
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/PKG-INFO +1 -3
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/README.md +16 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/PKG-INFO +1 -3
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/setup.py +1 -1
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/admin/__init__.py +6 -4
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/auth.py +162 -12
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/urls/model.py +9 -6
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/nodes.py +54 -1
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/job.py +2 -1
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/join.py +5 -2
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/split.py +1 -1
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/start.py +5 -2
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/view.py +5 -2
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/LICENSE +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/LICENSE.django +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/LICENSE_EXCEPTION +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/MANIFEST.in +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/SOURCES.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/dependency_links.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/not-zip-safe +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/requires.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/top_level.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/setup.cfg +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/tests/test_middleware.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/tests/test_templates.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/tests/test_templatetags__viewflow.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/tests/test_this_object.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/tests/test_urls__base.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/tests/test_utils__package.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/apps.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/conf.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/admin/apps.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/plotly/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/plotly/material.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/plotly/views.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/contrib/plotly/viewset.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fields.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/forms/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/forms/renderers.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/admin.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/base.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/chart.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/typing.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/views.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/fsm/viewset.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/jsonstore.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/management/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/management/commands/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/management/commands/flowexport.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/middleware.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/css/trix.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/img/favicon.png +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/img/user.png +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/smartcrop.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/trix.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/viewflow.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/viewflow.min.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/400.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/403.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/404.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/500.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/admin/fsm_change_form.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/admin/fsm_change_list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/admin/fsm_transition_form.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/logged_out.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/login.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/password_change_done.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/password_change_form.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/password_reset_complete.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/password_reset_confirm.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/password_reset_done.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/password_reset_form.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/profile.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/registration/provider_list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/base.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/base_page.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/views/delete_action.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/views/detail.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/views/form.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/views/list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/views/transition.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/assign.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/start.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_detail.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templatetags/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templatetags/fsm.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templatetags/viewflow.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/templatetags/workflow.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/this_object.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/urls/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/urls/base.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/urls/sites.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/utils.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/actions.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/base.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/create.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/delete.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/detail.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/filters.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/list.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/search.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/views/update.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/activation.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/admin.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/apps.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/base.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/chart.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/context.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/exceptions.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/fields.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/mixins.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/utils.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/actions.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/chart.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/create.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/dashboard.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/detail.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/filters.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/list.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/mixins.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/views/update.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/flow/viewset.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/lock.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/managers.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0001_initial.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0005_merge.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0006_i18n.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0006_merge.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0008_merge.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0009_merge.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/migrations/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/models.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/__init__.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/end.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/func.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/handle.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/if_gate.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/mixins.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/obsolete.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/subprocess.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/nodes/switch.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/signals.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/status.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/token.py +0 -0
- {django-viewflow-2.1.0 → django-viewflow-2.1.2}/viewflow/workflow/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-viewflow
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: Reusable library to build business applications fast
|
|
5
5
|
Author: Mikhail Podgurskiy
|
|
6
6
|
Author-email: kmmbvnr@gmail.com
|
|
@@ -25,5 +25,3 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
25
25
|
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
26
26
|
Requires-Python: >=3.8
|
|
27
27
|
License-File: LICENSE
|
|
28
|
-
Requires-Dist: Django>=4.2
|
|
29
|
-
Requires-Dist: django-filter>=2.3.0
|
|
@@ -143,6 +143,8 @@ Make and run migrations to create the necessary database tables, then start your
|
|
|
143
143
|
server and access the workflow through the pre-built frontend. You should be
|
|
144
144
|
able to create and track pizza orders with the workflow.
|
|
145
145
|
|
|
146
|
+
Go to the https://docs.viewflow.io/workflow/writing.html for the next steps
|
|
147
|
+
|
|
146
148
|
## Documentation
|
|
147
149
|
|
|
148
150
|
Viewflow's documentation for the latest version is available at
|
|
@@ -183,6 +185,20 @@ modifications of Viewflow. You can find the commercial license terms in
|
|
|
183
185
|
|
|
184
186
|
## Changelog
|
|
185
187
|
|
|
188
|
+
### 2.1.2 2024-06-24
|
|
189
|
+
|
|
190
|
+
- Allow cancelling Celery tasks from the ERROR state.
|
|
191
|
+
- Hotfix: Fix broken Join when no other nodes are created by Split.
|
|
192
|
+
- Allow using this references to flow static methods as Celery tasks.
|
|
193
|
+
- Allow cancelling Celery jobs from the ERROR status.
|
|
194
|
+
- Add missing permission check before adding a new item to the list.
|
|
195
|
+
- Allow Admin() viewset to be used as a sub-item in an Application viewset.
|
|
196
|
+
|
|
197
|
+
### 2.1.1 2024-06-06
|
|
198
|
+
|
|
199
|
+
- Hotfix broken task creation
|
|
200
|
+
|
|
201
|
+
|
|
186
202
|
### 2.1.0 2024-06-16
|
|
187
203
|
|
|
188
204
|
- Allow to assign additional custom data to viewflow.fsm transitions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-viewflow
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: Reusable library to build business applications fast
|
|
5
5
|
Author: Mikhail Podgurskiy
|
|
6
6
|
Author-email: kmmbvnr@gmail.com
|
|
@@ -25,5 +25,3 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
25
25
|
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
26
26
|
Requires-Python: >=3.8
|
|
27
27
|
License-File: LICENSE
|
|
28
|
-
Requires-Dist: Django>=4.2
|
|
29
|
-
Requires-Dist: django-filter>=2.3.0
|
|
@@ -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.1.
|
|
7
|
+
version="2.1.2",
|
|
8
8
|
author_email="kmmbvnr@gmail.com",
|
|
9
9
|
author="Mikhail Podgurskiy",
|
|
10
10
|
description="Reusable library to build business applications fast",
|
|
@@ -9,20 +9,22 @@ from django.contrib import admin
|
|
|
9
9
|
from django.utils.translation import gettext_lazy as _
|
|
10
10
|
|
|
11
11
|
from viewflow import Icon
|
|
12
|
-
from viewflow.urls import Application
|
|
12
|
+
from viewflow.urls import Application, AppMenuMixin
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class Admin(Application):
|
|
15
|
+
class Admin(AppMenuMixin, Application):
|
|
16
16
|
"""
|
|
17
17
|
Django administration Viewset adapter::
|
|
18
18
|
|
|
19
|
-
from
|
|
19
|
+
from django.contrib import admin
|
|
20
|
+
from viewflow.contrib.admin import Admin
|
|
20
21
|
|
|
21
|
-
site = Site(
|
|
22
|
+
site = Site(viewsets=[
|
|
22
23
|
Admin()
|
|
23
24
|
])
|
|
24
25
|
|
|
25
26
|
urls = [
|
|
27
|
+
path("admin/", admin.site.urls),
|
|
26
28
|
path('', site.urls)
|
|
27
29
|
]
|
|
28
30
|
|
|
@@ -132,23 +132,29 @@ def get_user_avatar_url(user):
|
|
|
132
132
|
|
|
133
133
|
class AuthViewset(Viewset):
|
|
134
134
|
"""
|
|
135
|
-
Class-based
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
135
|
+
Class-based URL configuration for `django.contrib.auth`.
|
|
136
|
+
|
|
137
|
+
This viewset provides URL patterns for user authentication, including login,
|
|
138
|
+
logout, and password management views.
|
|
139
|
+
|
|
140
|
+
.. code-block:: python
|
|
141
|
+
|
|
142
|
+
urlpatterns = [
|
|
143
|
+
path('accounts/', AuthViewset(
|
|
144
|
+
allow_password_change=False,
|
|
145
|
+
login_view=views.LoginView.as_view(
|
|
146
|
+
authentication_form=MyAuthForm
|
|
147
|
+
),
|
|
148
|
+
).urls),
|
|
149
|
+
]
|
|
145
150
|
"""
|
|
146
151
|
|
|
147
152
|
def __init__(self, *, allow_password_change=True, with_profile_view=True, **kwargs):
|
|
148
153
|
"""
|
|
149
|
-
Initialize the viewset.
|
|
154
|
+
Initialize the viewset with options for password change and profile view.
|
|
150
155
|
|
|
151
|
-
:param allow_password_change
|
|
156
|
+
:param allow_password_change: Enable or disable password change/reset views. Defaults to True.
|
|
157
|
+
:param with_profile_view: Enable or disable profile view. Defaults to True.
|
|
152
158
|
"""
|
|
153
159
|
super().__init__(**kwargs)
|
|
154
160
|
self.allow_password_change = allow_password_change
|
|
@@ -160,16 +166,32 @@ class AuthViewset(Viewset):
|
|
|
160
166
|
login_view_class = views.LoginView
|
|
161
167
|
|
|
162
168
|
def get_login_view_kwargs(self, **kwargs):
|
|
169
|
+
"""
|
|
170
|
+
Get keyword arguments for the login view.
|
|
171
|
+
|
|
172
|
+
:param kwargs: Additional keyword arguments for the login view.
|
|
173
|
+
:return: Dictionary of keyword arguments.
|
|
174
|
+
"""
|
|
163
175
|
result = {"form_class": AuthenticationForm}
|
|
164
176
|
result.update(kwargs)
|
|
165
177
|
return result
|
|
166
178
|
|
|
167
179
|
@viewprop
|
|
168
180
|
def login_view(self):
|
|
181
|
+
"""
|
|
182
|
+
Property to get the configured login view.
|
|
183
|
+
|
|
184
|
+
:return: Configured login view instance.
|
|
185
|
+
"""
|
|
169
186
|
return self.login_view_class.as_view(**self.get_login_view_kwargs())
|
|
170
187
|
|
|
171
188
|
@property
|
|
172
189
|
def login_path(self):
|
|
190
|
+
"""
|
|
191
|
+
Property to get the URL pattern for the login view.
|
|
192
|
+
|
|
193
|
+
:return: URL pattern for the login view.
|
|
194
|
+
"""
|
|
173
195
|
return path("login/", self.login_view, name="login")
|
|
174
196
|
|
|
175
197
|
"""
|
|
@@ -178,14 +200,30 @@ class AuthViewset(Viewset):
|
|
|
178
200
|
logout_view_class = views.LogoutView
|
|
179
201
|
|
|
180
202
|
def get_logout_view_kwargs(self, **kwargs):
|
|
203
|
+
"""
|
|
204
|
+
Get keyword arguments for the logout view.
|
|
205
|
+
|
|
206
|
+
:param kwargs: Additional keyword arguments for the logout view.
|
|
207
|
+
:return: Dictionary of keyword arguments.
|
|
208
|
+
"""
|
|
181
209
|
return kwargs
|
|
182
210
|
|
|
183
211
|
@viewprop
|
|
184
212
|
def logout_view(self):
|
|
213
|
+
"""
|
|
214
|
+
Property to get the configured logout view.
|
|
215
|
+
|
|
216
|
+
:return: Configured logout view class.
|
|
217
|
+
"""
|
|
185
218
|
return self.logout_view_class.as_view(**self.get_logout_view_kwargs())
|
|
186
219
|
|
|
187
220
|
@property
|
|
188
221
|
def logout_path(self):
|
|
222
|
+
"""
|
|
223
|
+
Property to get the URL pattern for the logout view.
|
|
224
|
+
|
|
225
|
+
:return: URL pattern for the logout view.
|
|
226
|
+
"""
|
|
189
227
|
return path("logout/", self.logout_view, name="logout")
|
|
190
228
|
|
|
191
229
|
"""
|
|
@@ -194,14 +232,30 @@ class AuthViewset(Viewset):
|
|
|
194
232
|
pass_change_view_class = views.PasswordChangeView
|
|
195
233
|
|
|
196
234
|
def get_pass_change_view_kwargs(self, **kwargs):
|
|
235
|
+
"""
|
|
236
|
+
Get keyword arguments for the password change view.
|
|
237
|
+
|
|
238
|
+
:param kwargs: Additional keyword arguments for the password change view.
|
|
239
|
+
:return: Dictionary of keyword arguments.
|
|
240
|
+
"""
|
|
197
241
|
return kwargs
|
|
198
242
|
|
|
199
243
|
@viewprop
|
|
200
244
|
def pass_change_view(self):
|
|
245
|
+
"""
|
|
246
|
+
Property to get the configured password change view.
|
|
247
|
+
|
|
248
|
+
:return: Configured password change view class.
|
|
249
|
+
"""
|
|
201
250
|
return self.pass_change_view_class.as_view(**self.get_pass_change_view_kwargs())
|
|
202
251
|
|
|
203
252
|
@property
|
|
204
253
|
def pass_change_path(self):
|
|
254
|
+
"""
|
|
255
|
+
Property to get the URL pattern for the password change view.
|
|
256
|
+
|
|
257
|
+
:return: URL pattern for the password change view.
|
|
258
|
+
"""
|
|
205
259
|
if self.allow_password_change:
|
|
206
260
|
return path(
|
|
207
261
|
"password_change/", self.pass_change_view, name="password_change"
|
|
@@ -213,16 +267,32 @@ class AuthViewset(Viewset):
|
|
|
213
267
|
pass_change_done_view_class = views.PasswordChangeDoneView
|
|
214
268
|
|
|
215
269
|
def get_pass_change_done_view_kwargs(self, **kwargs):
|
|
270
|
+
"""
|
|
271
|
+
Get keyword arguments for the password change done view.
|
|
272
|
+
|
|
273
|
+
:param kwargs: Additional keyword arguments for the password change done view.
|
|
274
|
+
:return: Dictionary of keyword arguments.
|
|
275
|
+
"""
|
|
216
276
|
return kwargs
|
|
217
277
|
|
|
218
278
|
@viewprop
|
|
219
279
|
def pass_change_done_view(self):
|
|
280
|
+
"""
|
|
281
|
+
Property to get the configured password change done view.
|
|
282
|
+
|
|
283
|
+
:return: Configured password change done view class.
|
|
284
|
+
"""
|
|
220
285
|
return self.pass_change_done_view_class.as_view(
|
|
221
286
|
**self.get_pass_change_done_view_kwargs()
|
|
222
287
|
)
|
|
223
288
|
|
|
224
289
|
@property
|
|
225
290
|
def pass_change_done_path(self):
|
|
291
|
+
"""
|
|
292
|
+
Property to get the URL pattern for the password change done view.
|
|
293
|
+
|
|
294
|
+
:return: URL pattern for the password change done view.
|
|
295
|
+
"""
|
|
226
296
|
if self.allow_password_change:
|
|
227
297
|
return path(
|
|
228
298
|
"password_change/done/",
|
|
@@ -236,14 +306,30 @@ class AuthViewset(Viewset):
|
|
|
236
306
|
pass_reset_view_class = views.PasswordResetView
|
|
237
307
|
|
|
238
308
|
def get_pass_reset_view_kwargs(self, **kwargs):
|
|
309
|
+
"""
|
|
310
|
+
Get keyword arguments for the password reset request view.
|
|
311
|
+
|
|
312
|
+
:param kwargs: Additional keyword arguments for the password reset request view.
|
|
313
|
+
:return: Dictionary of keyword arguments.
|
|
314
|
+
"""
|
|
239
315
|
return kwargs
|
|
240
316
|
|
|
241
317
|
@viewprop
|
|
242
318
|
def pass_reset_view(self):
|
|
319
|
+
"""
|
|
320
|
+
Property to get the configured password reset request view.
|
|
321
|
+
|
|
322
|
+
:return: Configured password reset request view class.
|
|
323
|
+
"""
|
|
243
324
|
return self.pass_reset_view_class.as_view(**self.get_pass_reset_view_kwargs())
|
|
244
325
|
|
|
245
326
|
@property
|
|
246
327
|
def pass_reset_path(self):
|
|
328
|
+
"""
|
|
329
|
+
Property to get the URL pattern for the password reset request view.
|
|
330
|
+
|
|
331
|
+
:return: URL pattern for the password reset request view.
|
|
332
|
+
"""
|
|
247
333
|
if self.allow_password_change:
|
|
248
334
|
return path("password_reset/", self.pass_reset_view, name="password_reset")
|
|
249
335
|
|
|
@@ -253,16 +339,32 @@ class AuthViewset(Viewset):
|
|
|
253
339
|
pass_reset_done_view_class = views.PasswordResetDoneView
|
|
254
340
|
|
|
255
341
|
def get_pass_reset_done_view_kwargs(self, **kwargs):
|
|
342
|
+
"""
|
|
343
|
+
Get keyword arguments for the password reset request done view.
|
|
344
|
+
|
|
345
|
+
:param kwargs: Additional keyword arguments for the password reset request done view.
|
|
346
|
+
:return: Dictionary of keyword arguments.
|
|
347
|
+
"""
|
|
256
348
|
return kwargs
|
|
257
349
|
|
|
258
350
|
@viewprop
|
|
259
351
|
def pass_reset_done_view(self):
|
|
352
|
+
"""
|
|
353
|
+
Property to get the configured password reset request done view.
|
|
354
|
+
|
|
355
|
+
:return: Configured password reset request done view class.
|
|
356
|
+
"""
|
|
260
357
|
return self.pass_reset_done_view_class.as_view(
|
|
261
358
|
**self.get_pass_reset_done_view_kwargs()
|
|
262
359
|
)
|
|
263
360
|
|
|
264
361
|
@property
|
|
265
362
|
def pass_reset_done_path(self):
|
|
363
|
+
"""
|
|
364
|
+
Property to get the URL pattern for the password reset request done view.
|
|
365
|
+
|
|
366
|
+
:return: URL pattern for the password reset request done view.
|
|
367
|
+
"""
|
|
266
368
|
if self.allow_password_change:
|
|
267
369
|
return path(
|
|
268
370
|
"password_reset/done/",
|
|
@@ -276,16 +378,32 @@ class AuthViewset(Viewset):
|
|
|
276
378
|
pass_reset_confirm_view_class = views.PasswordResetConfirmView
|
|
277
379
|
|
|
278
380
|
def get_pass_reset_confirm_view_kwargs(self, **kwargs):
|
|
381
|
+
"""
|
|
382
|
+
Get keyword arguments for the password reset confirm view.
|
|
383
|
+
|
|
384
|
+
:param kwargs: Additional keyword arguments for the password reset confirm view.
|
|
385
|
+
:return: Dictionary of keyword arguments.
|
|
386
|
+
"""
|
|
279
387
|
return kwargs
|
|
280
388
|
|
|
281
389
|
@viewprop
|
|
282
390
|
def pass_reset_confirm_view(self):
|
|
391
|
+
"""
|
|
392
|
+
Property to get the configured password reset confirm view.
|
|
393
|
+
|
|
394
|
+
:return: Configured password reset confirm view class.
|
|
395
|
+
"""
|
|
283
396
|
return self.pass_reset_confirm_view_class.as_view(
|
|
284
397
|
**self.get_pass_reset_confirm_view_kwargs()
|
|
285
398
|
)
|
|
286
399
|
|
|
287
400
|
@property
|
|
288
401
|
def pass_reset_confirm_path(self):
|
|
402
|
+
"""
|
|
403
|
+
Property to get the URL pattern for the password reset confirm view.
|
|
404
|
+
|
|
405
|
+
:return: URL pattern for the password reset confirm view.
|
|
406
|
+
"""
|
|
289
407
|
if self.allow_password_change:
|
|
290
408
|
return path(
|
|
291
409
|
"reset/<uidb64>/<token>/",
|
|
@@ -299,16 +417,32 @@ class AuthViewset(Viewset):
|
|
|
299
417
|
pass_reset_complete_view_class = views.PasswordResetCompleteView
|
|
300
418
|
|
|
301
419
|
def get_pass_reset_complete_view_kwargs(self, **kwargs):
|
|
420
|
+
"""
|
|
421
|
+
Get keyword arguments for the password reset complete view.
|
|
422
|
+
|
|
423
|
+
:param kwargs: Additional keyword arguments for the password reset complete view.
|
|
424
|
+
:return: Dictionary of keyword arguments.
|
|
425
|
+
"""
|
|
302
426
|
return kwargs
|
|
303
427
|
|
|
304
428
|
@viewprop
|
|
305
429
|
def pass_reset_complete_view(self):
|
|
430
|
+
"""
|
|
431
|
+
Property to get the configured password reset complete view.
|
|
432
|
+
|
|
433
|
+
:return: Configured password reset complete view class.
|
|
434
|
+
"""
|
|
306
435
|
return self.pass_reset_complete_view_class.as_view(
|
|
307
436
|
**self.get_pass_reset_complete_view_kwargs()
|
|
308
437
|
)
|
|
309
438
|
|
|
310
439
|
@property
|
|
311
440
|
def pass_reset_complete_path(self):
|
|
441
|
+
"""
|
|
442
|
+
Property to get the URL pattern for the password reset complete view.
|
|
443
|
+
|
|
444
|
+
:return: URL pattern for the password reset complete view.
|
|
445
|
+
"""
|
|
312
446
|
if self.allow_password_change:
|
|
313
447
|
return path(
|
|
314
448
|
"reset/done/",
|
|
@@ -322,14 +456,30 @@ class AuthViewset(Viewset):
|
|
|
322
456
|
profile_view_class = ProfileView
|
|
323
457
|
|
|
324
458
|
def get_profile_view_kwargs(self, **kwargs):
|
|
459
|
+
"""
|
|
460
|
+
Get keyword arguments for the profile view.
|
|
461
|
+
|
|
462
|
+
:param kwargs: Additional keyword arguments for the profile view.
|
|
463
|
+
:return: Dictionary of keyword arguments.
|
|
464
|
+
"""
|
|
325
465
|
return kwargs
|
|
326
466
|
|
|
327
467
|
@viewprop
|
|
328
468
|
def profile_view(self):
|
|
469
|
+
"""
|
|
470
|
+
Property to get the configured profile view.
|
|
471
|
+
|
|
472
|
+
:return: Configured profile view class.
|
|
473
|
+
"""
|
|
329
474
|
return self.profile_view_class.as_view(**self.get_profile_view_kwargs())
|
|
330
475
|
|
|
331
476
|
@property
|
|
332
477
|
def profile_path(self):
|
|
478
|
+
"""
|
|
479
|
+
Property to get the URL pattern for the profile view.
|
|
480
|
+
|
|
481
|
+
:return: URL pattern for the profile view.
|
|
482
|
+
"""
|
|
333
483
|
if self.with_profile_view:
|
|
334
484
|
return path("profile/", self.profile_view, name="profile")
|
|
335
485
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# which is part of this source code package.
|
|
7
7
|
|
|
8
8
|
from django.urls import path
|
|
9
|
+
from django.utils.translation import gettext_lazy as _
|
|
9
10
|
|
|
10
11
|
from viewflow.urls import AppMenuMixin, Viewset, ViewsetMeta
|
|
11
12
|
from viewflow.utils import DEFAULT, Icon, first_not_default, has_object_perm, viewprop
|
|
@@ -138,12 +139,14 @@ class CreateViewMixin(metaclass=ViewsetMeta):
|
|
|
138
139
|
return self.filter_kwargs(self.create_view_class, **view_kwargs)
|
|
139
140
|
|
|
140
141
|
def get_list_page_actions(self, request, *actions):
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
142
|
+
if self.has_add_permission(request.user):
|
|
143
|
+
add_action = Action(
|
|
144
|
+
name=_("Add new"),
|
|
145
|
+
url=self.reverse("add"),
|
|
146
|
+
icon=Icon("add_circle", class_="material-icons mdc-list-item__graphic"),
|
|
147
|
+
)
|
|
148
|
+
actions = (add_action, *actions)
|
|
149
|
+
return super().get_list_page_actions(request, *actions)
|
|
147
150
|
|
|
148
151
|
@viewprop
|
|
149
152
|
def create_view_kwargs(self):
|
|
@@ -316,8 +316,37 @@ class Split(
|
|
|
316
316
|
nodes.Split,
|
|
317
317
|
):
|
|
318
318
|
"""
|
|
319
|
-
|
|
319
|
+
Represents a parallel split gateway in a workflow, allowing branching into multiple parallel paths.
|
|
320
320
|
|
|
321
|
+
Methods:
|
|
322
|
+
- `Next(node, case=None, data_source=None)`: Defines the subsequent node in the workflow.
|
|
323
|
+
|
|
324
|
+
* `node`: The next node to execute.
|
|
325
|
+
* `case` (optional): A callable that takes an activation and returns `True` if the node should be activated.
|
|
326
|
+
* `data_source` (optional): A callable that takes an activation and returns a list of data items, creating an instance of the node for each item, with `task.data` set to the item.
|
|
327
|
+
|
|
328
|
+
- `Always(node)`: A shortcut to define a subsequent node that is always executed.
|
|
329
|
+
|
|
330
|
+
Example:
|
|
331
|
+
|
|
332
|
+
.. code-block:: python
|
|
333
|
+
|
|
334
|
+
flow.Split()
|
|
335
|
+
.Next(
|
|
336
|
+
this.approve,
|
|
337
|
+
case=act.process.approved,
|
|
338
|
+
data_source=lambda activation: [{"sample": "test task 1"}, {"sample": "test task 2"}],
|
|
339
|
+
)
|
|
340
|
+
.Always(this.required)
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
In this example:
|
|
344
|
+
- The `approve` node is executed multiple times based on the `data_source` list.
|
|
345
|
+
- The `required` node is always executed unconditionally in parallel.
|
|
346
|
+
|
|
347
|
+
Notes:
|
|
348
|
+
- If `case` is not provided, the node is always activated.
|
|
349
|
+
- If `data_source` is not provided, the node is created only once.
|
|
321
350
|
"""
|
|
322
351
|
|
|
323
352
|
index_view_class = views.IndexTaskView
|
|
@@ -330,6 +359,30 @@ class SplitFirst(
|
|
|
330
359
|
mixins.NodeDetailMixin,
|
|
331
360
|
nodes.SplitFirst,
|
|
332
361
|
):
|
|
362
|
+
"""
|
|
363
|
+
Parallel split, as soon as the first task is completed, the remaining tasks
|
|
364
|
+
are cancelled.
|
|
365
|
+
|
|
366
|
+
The `SplitFirst` class is useful in workflows where you want to initiate
|
|
367
|
+
multiple parallel tasks but only require the first task to complete,
|
|
368
|
+
cancelling the rest once the first task finishes.
|
|
369
|
+
|
|
370
|
+
Example:
|
|
371
|
+
|
|
372
|
+
.. code-block:: python
|
|
373
|
+
|
|
374
|
+
class MyFlow(flow.Flow):
|
|
375
|
+
split_first = SplitFirst().Next(this.task_a).Next(this.task_b)
|
|
376
|
+
|
|
377
|
+
task_a = flow.View(views.UserView).Next(this.join)
|
|
378
|
+
|
|
379
|
+
task_b = celery.Timer(delay=timedelata(minutes=10)).Next(this.join)
|
|
380
|
+
|
|
381
|
+
join = flow.Join()
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
"""
|
|
385
|
+
|
|
333
386
|
index_view_class = views.IndexTaskView
|
|
334
387
|
detail_view_class = views.DetailTaskView
|
|
335
388
|
|
|
@@ -14,7 +14,7 @@ from . import mixins
|
|
|
14
14
|
|
|
15
15
|
class AbstractJobActivation(mixins.NextNodeActivationMixin, Activation):
|
|
16
16
|
@classmethod
|
|
17
|
-
def create(cls, flow_task, prev_activation, token):
|
|
17
|
+
def create(cls, flow_task, prev_activation, token, data=None):
|
|
18
18
|
"""Instantiate and persist new flow task."""
|
|
19
19
|
flow_class = flow_task.flow_class
|
|
20
20
|
task = flow_class.task_class(
|
|
@@ -22,6 +22,7 @@ class AbstractJobActivation(mixins.NextNodeActivationMixin, Activation):
|
|
|
22
22
|
flow_task=flow_task,
|
|
23
23
|
token=token,
|
|
24
24
|
external_task_id=str(uuid.uuid4()),
|
|
25
|
+
data=data if data is not None else {},
|
|
25
26
|
)
|
|
26
27
|
task.save()
|
|
27
28
|
task.previous.add(prev_activation.task)
|
|
@@ -15,7 +15,7 @@ class JoinActivation(mixins.NextNodeActivationMixin, Activation):
|
|
|
15
15
|
super().__init__(*args, **kwargs)
|
|
16
16
|
|
|
17
17
|
@classmethod
|
|
18
|
-
def create(cls, flow_task, prev_activation, token):
|
|
18
|
+
def create(cls, flow_task, prev_activation, token, data=None):
|
|
19
19
|
"""
|
|
20
20
|
Join and, if all incoming paths are completed, continue execution.
|
|
21
21
|
|
|
@@ -43,7 +43,10 @@ class JoinActivation(mixins.NextNodeActivationMixin, Activation):
|
|
|
43
43
|
token = token.get_base_split_token()
|
|
44
44
|
|
|
45
45
|
task = flow_class.task_class.objects.create(
|
|
46
|
-
process=prev_activation.process,
|
|
46
|
+
process=prev_activation.process,
|
|
47
|
+
flow_task=flow_task,
|
|
48
|
+
token=token,
|
|
49
|
+
data=data if data is not None else {},
|
|
47
50
|
)
|
|
48
51
|
|
|
49
52
|
task.previous.add(prev_activation.task)
|
|
@@ -47,7 +47,7 @@ class SplitActivation(Activation):
|
|
|
47
47
|
|
|
48
48
|
next_tasks = [
|
|
49
49
|
(task, data) for task, data in self.next_tasks if not isinstance(task, Join)
|
|
50
|
-
] + [(task,
|
|
50
|
+
] + [(task, data) for task, data in self.next_tasks if isinstance(task, Join)]
|
|
51
51
|
|
|
52
52
|
for n, (next_task, data) in enumerate(next_tasks, 1):
|
|
53
53
|
yield next_task._create(
|
|
@@ -13,12 +13,15 @@ class StartActivation(mixins.NextNodeActivationMixin, Activation):
|
|
|
13
13
|
"""Task activation that creates new process instance."""
|
|
14
14
|
|
|
15
15
|
@classmethod
|
|
16
|
-
def create(cls, flow_task, prev_activation, token):
|
|
16
|
+
def create(cls, flow_task, prev_activation, token, data=None):
|
|
17
17
|
flow_class = flow_task.flow_class
|
|
18
18
|
|
|
19
19
|
process = flow_class.process_class(flow_class=flow_class)
|
|
20
20
|
task = flow_class.task_class(
|
|
21
|
-
flow_task=flow_task,
|
|
21
|
+
flow_task=flow_task,
|
|
22
|
+
process=process,
|
|
23
|
+
started=now(),
|
|
24
|
+
data=data if data is not None else {},
|
|
22
25
|
)
|
|
23
26
|
|
|
24
27
|
return cls(task)
|
|
@@ -13,11 +13,14 @@ class ViewActivation(mixins.NextNodeActivationMixin, Activation):
|
|
|
13
13
|
"""View node activation."""
|
|
14
14
|
|
|
15
15
|
@classmethod
|
|
16
|
-
def create(cls, flow_task, prev_activation, token):
|
|
16
|
+
def create(cls, flow_task, prev_activation, token, data=None):
|
|
17
17
|
"""Instantiate and persist new flow task."""
|
|
18
18
|
flow_class = flow_task.flow_class
|
|
19
19
|
task = flow_class.task_class(
|
|
20
|
-
process=prev_activation.process,
|
|
20
|
+
process=prev_activation.process,
|
|
21
|
+
flow_task=flow_task,
|
|
22
|
+
token=token,
|
|
23
|
+
data=data if data is not None else {},
|
|
21
24
|
)
|
|
22
25
|
|
|
23
26
|
activation = cls(task)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-viewflow-2.1.0 → django-viewflow-2.1.2}/django_viewflow.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|