django-viewflow 2.2.7__tar.gz → 2.2.8__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.2.7/django_viewflow.egg-info → django-viewflow-2.2.8}/PKG-INFO +42 -3
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/README.md +41 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8/django_viewflow.egg-info}/PKG-INFO +42 -3
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/setup.py +1 -1
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/base.py +6 -4
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/typing.py +1 -1
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/jsonstore.py +8 -1
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/base.py +3 -4
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/sites.py +2 -2
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/utils.py +1 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/base.py +3 -2
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/fields.py +7 -1
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/mixins.py +8 -6
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/nodes.py +20 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/models.py +6 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/LICENSE +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/LICENSE_EXCEPTION +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/MANIFEST.in +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/SOURCES.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/dependency_links.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/not-zip-safe +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/requires.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/django_viewflow.egg-info/top_level.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/setup.cfg +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_middleware.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_templates.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_templatetags__viewflow.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_this_object.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_urls__base.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/tests/test_utils__package.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/apps.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/conf.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/admin/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/admin/apps.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/auth.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/material.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/views.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/contrib/plotly/viewset.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fields.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/forms/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/forms/renderers.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/admin.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/chart.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/views.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/fsm/viewset.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/management/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/management/commands/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/management/commands/flowexport.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/middleware.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/trix.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/img/favicon.png +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/img/user.png +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/smartcrop.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/trix.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/viewflow.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/viewflow.min.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/400.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/403.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/404.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/500.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_change_form.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_change_list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/admin/fsm_transition_form.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/logged_out.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/login.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_change_done.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_change_form.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_complete.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_confirm.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_done.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/password_reset_form.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/profile.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/registration/provider_list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/base.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/base_page.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/delete_action.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/detail.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/form.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/views/transition.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/assign.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/start.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_detail.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/fsm.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/viewflow.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/templatetags/workflow.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/this_object.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/urls/model.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/actions.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/create.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/delete.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/detail.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/filters.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/list.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/search.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/views/update.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/activation.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/admin.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/apps.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/base.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/chart.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/context.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/exceptions.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/utils.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/actions.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/chart.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/create.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/dashboard.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/detail.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/filters.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/list.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/mixins.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/views/update.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/flow/viewset.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/lock.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/managers.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0001_initial.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0005_merge.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0006_i18n.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0006_merge.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0008_merge.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0009_merge.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/0014_alter_process_parent_task.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/migrations/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/__init__.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/end.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/func.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/handle.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/if_gate.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/job.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/join.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/mixins.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/obsolete.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/split.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/start.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/switch.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/nodes/view.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/signals.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/status.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/token.py +0 -0
- {django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/workflow/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-viewflow
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.8
|
|
4
4
|
Summary: Reusable library to build business applications fast
|
|
5
5
|
Author: Mikhail Podgurskiy
|
|
6
6
|
Author-email: kmmbvnr@gmail.com
|
|
@@ -26,8 +26,6 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or l
|
|
|
26
26
|
Requires-Python: >=3.8
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
28
28
|
License-File: LICENSE
|
|
29
|
-
Requires-Dist: Django>=4.2
|
|
30
|
-
Requires-Dist: django-filter>=2.3.0
|
|
31
29
|
|
|
32
30
|
# Viewflow
|
|
33
31
|
|
|
@@ -218,6 +216,47 @@ modifications of Viewflow. You can find the commercial license terms in
|
|
|
218
216
|
|
|
219
217
|
## Changelog
|
|
220
218
|
|
|
219
|
+
### 2.2.8 2024-10-04
|
|
220
|
+
|
|
221
|
+
- Prevent exceptions from being raised by Process/Task models when a flow class
|
|
222
|
+
is deleted but still referenced in the database.
|
|
223
|
+
- Fix serialization issue with jsonstore.DecimalField.
|
|
224
|
+
- Add missing 'index' view for celery.Task node.
|
|
225
|
+
- Enable recovery of flow.Subprocess and flow.NSubprocess nodes from error state.
|
|
226
|
+
- Correct invalid typing for FSM conditions.
|
|
227
|
+
- Allow setting permission=None in the FSM @transition decorator to explicitly bypass permission checks.
|
|
228
|
+
- Add support for MultiValueField and django-money fields form rendering
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
### 2.2.7 2024-08-16
|
|
232
|
+
|
|
233
|
+
- Added compatibility fix for Python 3.8.
|
|
234
|
+
- Extend documentation with data management explanation - https://docs.viewflow.io/workflow/data_flow.html
|
|
235
|
+
- Expanded documentation to cover permission management - https://docs.viewflow.io/workflow/permissions.html
|
|
236
|
+
- Introduced an experimental JSONEditorWidget.
|
|
237
|
+
- Fixed issue with saving the state of revived tasks.
|
|
238
|
+
- Enabled the option to cancel If tasks.
|
|
239
|
+
- Updated default FSM state change in FlowViewsMixin to now use transaction.atomic.
|
|
240
|
+
- Added support for using DependentModelSelect in formsets.
|
|
241
|
+
- Enabled AjaxModelSelect to function as a dependency for DependentModelSelect
|
|
242
|
+
- Corrected typo in the deletion success message.
|
|
243
|
+
- Test under django 5.1
|
|
244
|
+
|
|
245
|
+
### 2.2.6 2024-08-04
|
|
246
|
+
|
|
247
|
+
- Resolved the flow.If condition's this reference during class construction.
|
|
248
|
+
- Improved error handling when a Celery task finishes.
|
|
249
|
+
- Fixed an issue where errors occurring in a task after a successful celery.Job
|
|
250
|
+
task incorrectly prevented the job task from being marked as completed, with
|
|
251
|
+
the errored task correctly put into an error state.
|
|
252
|
+
- Redirect to the next process task now will take into account tasks in the ERROR state
|
|
253
|
+
- Add ability to revive flow.Function and flow.SplitFirst
|
|
254
|
+
- Fixed an error that occurred when a deleted process.artifact was referenced in
|
|
255
|
+
the process field data listing within templates.
|
|
256
|
+
- Allow to cancel Subprocess tasks
|
|
257
|
+
- Allow to cancel Function tasks
|
|
258
|
+
- Allow custom task models inherited from AbstactTask have no .seed and .data fields
|
|
259
|
+
|
|
221
260
|
### 2.2.5 2024-07-17
|
|
222
261
|
|
|
223
262
|
- The 'pattern' widget attribute is now passed to the underlying form input.
|
|
@@ -187,6 +187,47 @@ modifications of Viewflow. You can find the commercial license terms in
|
|
|
187
187
|
|
|
188
188
|
## Changelog
|
|
189
189
|
|
|
190
|
+
### 2.2.8 2024-10-04
|
|
191
|
+
|
|
192
|
+
- Prevent exceptions from being raised by Process/Task models when a flow class
|
|
193
|
+
is deleted but still referenced in the database.
|
|
194
|
+
- Fix serialization issue with jsonstore.DecimalField.
|
|
195
|
+
- Add missing 'index' view for celery.Task node.
|
|
196
|
+
- Enable recovery of flow.Subprocess and flow.NSubprocess nodes from error state.
|
|
197
|
+
- Correct invalid typing for FSM conditions.
|
|
198
|
+
- Allow setting permission=None in the FSM @transition decorator to explicitly bypass permission checks.
|
|
199
|
+
- Add support for MultiValueField and django-money fields form rendering
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
### 2.2.7 2024-08-16
|
|
203
|
+
|
|
204
|
+
- Added compatibility fix for Python 3.8.
|
|
205
|
+
- Extend documentation with data management explanation - https://docs.viewflow.io/workflow/data_flow.html
|
|
206
|
+
- Expanded documentation to cover permission management - https://docs.viewflow.io/workflow/permissions.html
|
|
207
|
+
- Introduced an experimental JSONEditorWidget.
|
|
208
|
+
- Fixed issue with saving the state of revived tasks.
|
|
209
|
+
- Enabled the option to cancel If tasks.
|
|
210
|
+
- Updated default FSM state change in FlowViewsMixin to now use transaction.atomic.
|
|
211
|
+
- Added support for using DependentModelSelect in formsets.
|
|
212
|
+
- Enabled AjaxModelSelect to function as a dependency for DependentModelSelect
|
|
213
|
+
- Corrected typo in the deletion success message.
|
|
214
|
+
- Test under django 5.1
|
|
215
|
+
|
|
216
|
+
### 2.2.6 2024-08-04
|
|
217
|
+
|
|
218
|
+
- Resolved the flow.If condition's this reference during class construction.
|
|
219
|
+
- Improved error handling when a Celery task finishes.
|
|
220
|
+
- Fixed an issue where errors occurring in a task after a successful celery.Job
|
|
221
|
+
task incorrectly prevented the job task from being marked as completed, with
|
|
222
|
+
the errored task correctly put into an error state.
|
|
223
|
+
- Redirect to the next process task now will take into account tasks in the ERROR state
|
|
224
|
+
- Add ability to revive flow.Function and flow.SplitFirst
|
|
225
|
+
- Fixed an error that occurred when a deleted process.artifact was referenced in
|
|
226
|
+
the process field data listing within templates.
|
|
227
|
+
- Allow to cancel Subprocess tasks
|
|
228
|
+
- Allow to cancel Function tasks
|
|
229
|
+
- Allow custom task models inherited from AbstactTask have no .seed and .data fields
|
|
230
|
+
|
|
190
231
|
### 2.2.5 2024-07-17
|
|
191
232
|
|
|
192
233
|
- The 'pattern' widget attribute is now passed to the underlying form input.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-viewflow
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.8
|
|
4
4
|
Summary: Reusable library to build business applications fast
|
|
5
5
|
Author: Mikhail Podgurskiy
|
|
6
6
|
Author-email: kmmbvnr@gmail.com
|
|
@@ -26,8 +26,6 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or l
|
|
|
26
26
|
Requires-Python: >=3.8
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
28
28
|
License-File: LICENSE
|
|
29
|
-
Requires-Dist: Django>=4.2
|
|
30
|
-
Requires-Dist: django-filter>=2.3.0
|
|
31
29
|
|
|
32
30
|
# Viewflow
|
|
33
31
|
|
|
@@ -218,6 +216,47 @@ modifications of Viewflow. You can find the commercial license terms in
|
|
|
218
216
|
|
|
219
217
|
## Changelog
|
|
220
218
|
|
|
219
|
+
### 2.2.8 2024-10-04
|
|
220
|
+
|
|
221
|
+
- Prevent exceptions from being raised by Process/Task models when a flow class
|
|
222
|
+
is deleted but still referenced in the database.
|
|
223
|
+
- Fix serialization issue with jsonstore.DecimalField.
|
|
224
|
+
- Add missing 'index' view for celery.Task node.
|
|
225
|
+
- Enable recovery of flow.Subprocess and flow.NSubprocess nodes from error state.
|
|
226
|
+
- Correct invalid typing for FSM conditions.
|
|
227
|
+
- Allow setting permission=None in the FSM @transition decorator to explicitly bypass permission checks.
|
|
228
|
+
- Add support for MultiValueField and django-money fields form rendering
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
### 2.2.7 2024-08-16
|
|
232
|
+
|
|
233
|
+
- Added compatibility fix for Python 3.8.
|
|
234
|
+
- Extend documentation with data management explanation - https://docs.viewflow.io/workflow/data_flow.html
|
|
235
|
+
- Expanded documentation to cover permission management - https://docs.viewflow.io/workflow/permissions.html
|
|
236
|
+
- Introduced an experimental JSONEditorWidget.
|
|
237
|
+
- Fixed issue with saving the state of revived tasks.
|
|
238
|
+
- Enabled the option to cancel If tasks.
|
|
239
|
+
- Updated default FSM state change in FlowViewsMixin to now use transaction.atomic.
|
|
240
|
+
- Added support for using DependentModelSelect in formsets.
|
|
241
|
+
- Enabled AjaxModelSelect to function as a dependency for DependentModelSelect
|
|
242
|
+
- Corrected typo in the deletion success message.
|
|
243
|
+
- Test under django 5.1
|
|
244
|
+
|
|
245
|
+
### 2.2.6 2024-08-04
|
|
246
|
+
|
|
247
|
+
- Resolved the flow.If condition's this reference during class construction.
|
|
248
|
+
- Improved error handling when a Celery task finishes.
|
|
249
|
+
- Fixed an issue where errors occurring in a task after a successful celery.Job
|
|
250
|
+
task incorrectly prevented the job task from being marked as completed, with
|
|
251
|
+
the errored task correctly put into an error state.
|
|
252
|
+
- Redirect to the next process task now will take into account tasks in the ERROR state
|
|
253
|
+
- Add ability to revive flow.Function and flow.SplitFirst
|
|
254
|
+
- Fixed an error that occurred when a deleted process.artifact was referenced in
|
|
255
|
+
the process field data listing within templates.
|
|
256
|
+
- Allow to cancel Subprocess tasks
|
|
257
|
+
- Allow to cancel Function tasks
|
|
258
|
+
- Allow custom task models inherited from AbstactTask have no .seed and .data fields
|
|
259
|
+
|
|
221
260
|
### 2.2.5 2024-07-17
|
|
222
261
|
|
|
223
262
|
- The 'pattern' widget attribute is now passed to the underlying form input.
|
|
@@ -4,7 +4,7 @@ README = open("README.md", "r", encoding="utf-8").read()
|
|
|
4
4
|
|
|
5
5
|
setuptools.setup(
|
|
6
6
|
name="django-viewflow",
|
|
7
|
-
version="2.2.
|
|
7
|
+
version="2.2.8",
|
|
8
8
|
author_email="kmmbvnr@gmail.com",
|
|
9
9
|
author="Mikhail Podgurskiy",
|
|
10
10
|
description="Reusable library to build business applications fast",
|
|
@@ -12,7 +12,7 @@ from __future__ import annotations
|
|
|
12
12
|
import inspect
|
|
13
13
|
from typing import Any, Dict, Mapping, Iterable, List, Type, Optional
|
|
14
14
|
from viewflow.this_object import ThisObject
|
|
15
|
-
from viewflow.utils import MARKER
|
|
15
|
+
from viewflow.utils import DEFAULT, MARKER
|
|
16
16
|
from .typing import (
|
|
17
17
|
UserModel,
|
|
18
18
|
Condition,
|
|
@@ -39,7 +39,7 @@ class Transition:
|
|
|
39
39
|
target: Optional[StateValue],
|
|
40
40
|
label: Optional[str] = None,
|
|
41
41
|
conditions: Optional[List[Condition]] = None,
|
|
42
|
-
permission: Optional[Permission] =
|
|
42
|
+
permission: Optional[Permission] = DEFAULT,
|
|
43
43
|
custom: Optional[Dict] = None,
|
|
44
44
|
): # noqa D102
|
|
45
45
|
self.func = func
|
|
@@ -86,8 +86,10 @@ class Transition:
|
|
|
86
86
|
|
|
87
87
|
def has_perm(self, instance: object, user: UserModel) -> bool:
|
|
88
88
|
"""Checks if the given user has permission to perform this transition."""
|
|
89
|
+
if self.permission is DEFAULT:
|
|
90
|
+
return False # Protected by default
|
|
89
91
|
if self.permission is None:
|
|
90
|
-
return
|
|
92
|
+
return True # Explicitly allowed to any
|
|
91
93
|
elif callable(self.permission):
|
|
92
94
|
return self.permission(instance, user)
|
|
93
95
|
elif isinstance(self.permission, ThisObject):
|
|
@@ -410,7 +412,7 @@ class State:
|
|
|
410
412
|
target: Optional[StateValue] = None,
|
|
411
413
|
label: Optional[str] = None,
|
|
412
414
|
conditions: Optional[List[Condition]] = None,
|
|
413
|
-
permission: Optional[Permission] =
|
|
415
|
+
permission: Optional[Permission] = DEFAULT,
|
|
414
416
|
custom: Optional[Dict] = None,
|
|
415
417
|
) -> Any:
|
|
416
418
|
"""Decorator to mark a method as a state transition."""
|
|
@@ -13,7 +13,7 @@ if TYPE_CHECKING:
|
|
|
13
13
|
|
|
14
14
|
UserModel = Any
|
|
15
15
|
StateValue = Any
|
|
16
|
-
Condition = Union[ThisObject, Callable[[object
|
|
16
|
+
Condition = Union[ThisObject, Callable[[object], bool]]
|
|
17
17
|
Permission = Union[ThisObject, Callable[[object, Any], bool]]
|
|
18
18
|
StateTransitions = Mapping["TransitionMethod", List["Transition"]]
|
|
19
19
|
TransitionFunction = Callable[..., Any]
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import copy
|
|
9
9
|
import json
|
|
10
10
|
from datetime import date, datetime
|
|
11
|
+
from decimal import Decimal
|
|
11
12
|
from functools import partialmethod
|
|
12
13
|
|
|
13
14
|
from django.core.exceptions import FieldError
|
|
@@ -190,7 +191,13 @@ class DateTimeField(JSONFieldMixin, fields.DateTimeField):
|
|
|
190
191
|
|
|
191
192
|
|
|
192
193
|
class DecimalField(JSONFieldMixin, fields.DecimalField):
|
|
193
|
-
|
|
194
|
+
def to_json(self, value):
|
|
195
|
+
if value is not None:
|
|
196
|
+
return str(value)
|
|
197
|
+
|
|
198
|
+
def from_json(self, value):
|
|
199
|
+
if value is not None:
|
|
200
|
+
return Decimal(value)
|
|
194
201
|
|
|
195
202
|
|
|
196
203
|
class EmailField(JSONFieldMixin, fields.EmailField):
|
|
@@ -8,10 +8,9 @@ import copy
|
|
|
8
8
|
import types
|
|
9
9
|
import warnings
|
|
10
10
|
from collections import namedtuple, OrderedDict
|
|
11
|
-
from typing import Optional, Dict, Any, List
|
|
12
|
-
|
|
11
|
+
from typing import Optional, Dict, Any, List
|
|
13
12
|
from django.views.generic import RedirectView
|
|
14
|
-
from django.urls import URLPattern, URLResolver, include, path, reverse
|
|
13
|
+
from django.urls import ResolverMatch, URLPattern, URLResolver, include, path, reverse
|
|
15
14
|
from django.urls.resolvers import RoutePattern
|
|
16
15
|
|
|
17
16
|
from viewflow.utils import (
|
|
@@ -40,7 +39,7 @@ class _URLResolver(URLResolver):
|
|
|
40
39
|
self.extra = kwargs.pop("extra", {})
|
|
41
40
|
super(_URLResolver, self).__init__(*args, **kwargs)
|
|
42
41
|
|
|
43
|
-
def resolve(self, *args, **kwargs) ->
|
|
42
|
+
def resolve(self, *args, **kwargs) -> ResolverMatch:
|
|
44
43
|
result = super(_URLResolver, self).resolve(*args, **kwargs)
|
|
45
44
|
if not isinstance(result.url_name, _UrlName):
|
|
46
45
|
result.url_name = _UrlName(result.url_name)
|
|
@@ -17,7 +17,7 @@ class AppMenuMixin:
|
|
|
17
17
|
"""A route that can be listed in an Application menu."""
|
|
18
18
|
|
|
19
19
|
title = None
|
|
20
|
-
icon = Icon("view_carousel")
|
|
20
|
+
icon: Icon | str = Icon("view_carousel")
|
|
21
21
|
|
|
22
22
|
def __init__(self, **kwargs):
|
|
23
23
|
super().__init__(**kwargs)
|
|
@@ -47,7 +47,7 @@ class AppMenuMixin:
|
|
|
47
47
|
|
|
48
48
|
class Application(IndexViewMixin, Viewset):
|
|
49
49
|
title = ""
|
|
50
|
-
icon = Icon("view_module")
|
|
50
|
+
icon: Icon | str = Icon("view_module")
|
|
51
51
|
menu_template_name = "viewflow/includes/app_menu.html"
|
|
52
52
|
base_template_name = "viewflow/base_page.html"
|
|
53
53
|
permission = None
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
# LICENSE_EXCEPTION and the Commercial licence defined in file 'COMM_LICENSE',
|
|
6
6
|
# which is part of this source code package.
|
|
7
7
|
|
|
8
|
+
from typing import Any, List, Union
|
|
8
9
|
from django import forms
|
|
9
10
|
from viewflow.utils import viewprop
|
|
10
11
|
from viewflow.forms import Span
|
|
@@ -29,7 +30,7 @@ class FormLayoutMixin(object):
|
|
|
29
30
|
Mixin for FormView to infer View.fields definition from form Layout.
|
|
30
31
|
"""
|
|
31
32
|
|
|
32
|
-
form_class = None
|
|
33
|
+
form_class: Any = None
|
|
33
34
|
|
|
34
35
|
@viewprop
|
|
35
36
|
def layout(self):
|
|
@@ -37,7 +38,7 @@ class FormLayoutMixin(object):
|
|
|
37
38
|
return self.form_class.layout
|
|
38
39
|
|
|
39
40
|
@viewprop
|
|
40
|
-
def fields(self):
|
|
41
|
+
def fields(self) -> Any:
|
|
41
42
|
if self.form_class is None:
|
|
42
43
|
if self.layout is not None:
|
|
43
44
|
return _collect_elements(self.layout)
|
|
@@ -94,6 +94,8 @@ class FlowReferenceField(models.CharField):
|
|
|
94
94
|
return import_flow_by_ref(value)
|
|
95
95
|
except LookupError:
|
|
96
96
|
return None
|
|
97
|
+
except ImportError:
|
|
98
|
+
return None
|
|
97
99
|
|
|
98
100
|
def get_prep_value(self, value): # noqa D1o2
|
|
99
101
|
if value and not isinstance(value, str):
|
|
@@ -118,7 +120,11 @@ class TaskReferenceField(models.CharField):
|
|
|
118
120
|
def from_db_value(self, value, expression, connection):
|
|
119
121
|
if value is None:
|
|
120
122
|
return value
|
|
121
|
-
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
return import_task_by_ref(value)
|
|
126
|
+
except ImportError:
|
|
127
|
+
return None
|
|
122
128
|
|
|
123
129
|
def get_prep_value(self, value): # noqa D102
|
|
124
130
|
if value and not isinstance(value, str):
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Type, Optional
|
|
2
|
+
from django.views import View
|
|
1
3
|
from django.urls import path
|
|
2
4
|
from viewflow import viewprop
|
|
3
5
|
from viewflow.urls import ViewsetMeta
|
|
@@ -7,7 +9,7 @@ from . import utils
|
|
|
7
9
|
class NodeDetailMixin(metaclass=ViewsetMeta):
|
|
8
10
|
"""Task detail view."""
|
|
9
11
|
|
|
10
|
-
index_view_class = None
|
|
12
|
+
index_view_class: Optional[Type[View]] = None
|
|
11
13
|
|
|
12
14
|
@viewprop
|
|
13
15
|
def index_view(self):
|
|
@@ -24,7 +26,7 @@ class NodeDetailMixin(metaclass=ViewsetMeta):
|
|
|
24
26
|
name="index",
|
|
25
27
|
)
|
|
26
28
|
|
|
27
|
-
detail_view_class = None
|
|
29
|
+
detail_view_class: Optional[Type[View]] = None
|
|
28
30
|
|
|
29
31
|
@viewprop
|
|
30
32
|
def detail_view(self):
|
|
@@ -49,7 +51,7 @@ class NodeDetailMixin(metaclass=ViewsetMeta):
|
|
|
49
51
|
class NodeExecuteMixin(metaclass=ViewsetMeta):
|
|
50
52
|
"""Re-execute a gate manually."""
|
|
51
53
|
|
|
52
|
-
execute_view_class = None
|
|
54
|
+
execute_view_class: Optional[Type[View]] = None
|
|
53
55
|
|
|
54
56
|
@viewprop
|
|
55
57
|
def execute_view(self):
|
|
@@ -70,7 +72,7 @@ class NodeExecuteMixin(metaclass=ViewsetMeta):
|
|
|
70
72
|
class NodeUndoMixin(metaclass=ViewsetMeta):
|
|
71
73
|
"""Allow to undo a completed task."""
|
|
72
74
|
|
|
73
|
-
undo_view_class = None
|
|
75
|
+
undo_view_class: Optional[Type[View]] = None
|
|
74
76
|
|
|
75
77
|
@viewprop
|
|
76
78
|
def undo_view(self):
|
|
@@ -94,7 +96,7 @@ class NodeUndoMixin(metaclass=ViewsetMeta):
|
|
|
94
96
|
class NodeCancelMixin(metaclass=ViewsetMeta):
|
|
95
97
|
"""Cancel a task action."""
|
|
96
98
|
|
|
97
|
-
cancel_view_class = None
|
|
99
|
+
cancel_view_class: Optional[Type[View]] = None
|
|
98
100
|
|
|
99
101
|
@viewprop
|
|
100
102
|
def cancel_view(self):
|
|
@@ -120,7 +122,7 @@ class NodeCancelMixin(metaclass=ViewsetMeta):
|
|
|
120
122
|
class NodeReviveMixin(metaclass=ViewsetMeta):
|
|
121
123
|
"""Review a canceled task"""
|
|
122
124
|
|
|
123
|
-
revive_view_class = None
|
|
125
|
+
revive_view_class: Optional[Type[View]] = None
|
|
124
126
|
|
|
125
127
|
@viewprop
|
|
126
128
|
def revive_view(self):
|
|
@@ -420,6 +420,7 @@ try:
|
|
|
420
420
|
mixins.NodeDetailMixin,
|
|
421
421
|
mixins.NodeCancelMixin,
|
|
422
422
|
mixins.NodeUndoMixin,
|
|
423
|
+
mixins.NodeReviveMixin,
|
|
423
424
|
nodes.Subprocess,
|
|
424
425
|
):
|
|
425
426
|
"""
|
|
@@ -452,11 +453,13 @@ try:
|
|
|
452
453
|
detail_view_class = views.DetailTaskView
|
|
453
454
|
cancel_view_class = views.CancelTaskView
|
|
454
455
|
undo_view_class = views.UndoTaskView
|
|
456
|
+
revive_view_class = views.ReviveTaskView
|
|
455
457
|
|
|
456
458
|
class NSubprocess(
|
|
457
459
|
mixins.NodeDetailMixin,
|
|
458
460
|
mixins.NodeCancelMixin,
|
|
459
461
|
mixins.NodeUndoMixin,
|
|
462
|
+
mixins.NodeReviveMixin,
|
|
460
463
|
nodes.NSubprocess,
|
|
461
464
|
):
|
|
462
465
|
"""
|
|
@@ -491,6 +494,7 @@ try:
|
|
|
491
494
|
detail_view_class = views.DetailTaskView
|
|
492
495
|
cancel_view_class = views.CancelTaskView
|
|
493
496
|
undo_view_class = views.UndoTaskView
|
|
497
|
+
revive_view_class = views.ReviveTaskView
|
|
494
498
|
|
|
495
499
|
except AttributeError:
|
|
496
500
|
"""Pro-only functionality"""
|
|
@@ -504,6 +508,22 @@ class Switch(
|
|
|
504
508
|
mixins.NodeReviveMixin,
|
|
505
509
|
nodes.Switch,
|
|
506
510
|
):
|
|
511
|
+
"""
|
|
512
|
+
Gateway that selects one of the outgoing node.
|
|
513
|
+
|
|
514
|
+
Activates first node with matched condition.
|
|
515
|
+
|
|
516
|
+
Example::
|
|
517
|
+
|
|
518
|
+
select_responsible_person = (
|
|
519
|
+
flow.Switch()
|
|
520
|
+
.Case(this.dean_approval, lambda act: a.process.need_dean)
|
|
521
|
+
.Case(this.head_approval, lambda act: a.process.need_head)
|
|
522
|
+
.Default(this.supervisor_approval)
|
|
523
|
+
)
|
|
524
|
+
|
|
525
|
+
"""
|
|
526
|
+
|
|
507
527
|
index_view_class = views.IndexTaskView
|
|
508
528
|
detail_view_class = views.DetailTaskView
|
|
509
529
|
cancel_view_class = views.CancelTaskView
|
|
@@ -43,6 +43,9 @@ class AbstractProcess(models.Model):
|
|
|
43
43
|
@property
|
|
44
44
|
def brief(self):
|
|
45
45
|
"""Quick textual process state representation for end user."""
|
|
46
|
+
if self.flow_class is None:
|
|
47
|
+
return None
|
|
48
|
+
|
|
46
49
|
template_content = ""
|
|
47
50
|
|
|
48
51
|
if self.finished:
|
|
@@ -175,6 +178,9 @@ class AbstractTask(models.Model):
|
|
|
175
178
|
|
|
176
179
|
@property
|
|
177
180
|
def title(self):
|
|
181
|
+
if self.flow_task is None:
|
|
182
|
+
return None
|
|
183
|
+
|
|
178
184
|
if self.flow_task.task_title:
|
|
179
185
|
return self.flow_task.task_title
|
|
180
186
|
return _(str(self.flow_task))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_viewflow-2.2.7 → django-viewflow-2.2.8}/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
|
|
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
|
|
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
|
{django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_viewflow-2.2.7 → django-viewflow-2.2.8}/viewflow/static/viewflow/css/perfect-scrollbar.css
RENAMED
|
File without changes
|