django-viewflow 2.1.1__tar.gz → 2.2.3__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.1 → django-viewflow-2.2.3}/PKG-INFO +1 -3
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/README.md +36 -3
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/django_viewflow.egg-info/PKG-INFO +1 -3
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/django_viewflow.egg-info/SOURCES.txt +1 -2
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/setup.py +1 -1
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/admin/__init__.py +6 -4
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/auth.py +162 -12
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task.html +4 -0
- django-viewflow-2.2.3/viewflow/this_object.py +119 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/urls/base.py +68 -18
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/urls/model.py +9 -6
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/activation.py +130 -36
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/base.py +111 -55
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/__init__.py +0 -6
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/nodes.py +142 -31
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/viewset.py +4 -0
- django-viewflow-2.2.3/viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py +47 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/models.py +24 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/__init__.py +0 -4
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/end.py +5 -2
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/if_gate.py +32 -6
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/job.py +2 -1
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/join.py +7 -1
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/mixins.py +21 -2
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/split.py +3 -6
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/start.py +10 -1
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/view.py +2 -1
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/token.py +11 -10
- django-viewflow-2.1.1/LICENSE.django +0 -37
- django-viewflow-2.1.1/viewflow/this_object.py +0 -67
- django-viewflow-2.1.1/viewflow/workflow/nodes/subprocess.py +0 -149
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/LICENSE +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/LICENSE_EXCEPTION +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/MANIFEST.in +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/django_viewflow.egg-info/dependency_links.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/django_viewflow.egg-info/not-zip-safe +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/django_viewflow.egg-info/requires.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/django_viewflow.egg-info/top_level.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/setup.cfg +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/tests/test_middleware.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/tests/test_templates.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/tests/test_templatetags__viewflow.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/tests/test_this_object.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/tests/test_urls__base.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/tests/test_utils__package.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/apps.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/conf.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/admin/apps.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/plotly/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/plotly/material.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/plotly/views.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/contrib/plotly/viewset.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fields.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/forms/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/forms/renderers.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/admin.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/base.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/chart.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/typing.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/views.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/fsm/viewset.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/jsonstore.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/de/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/de/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/es/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/es/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/fr/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/it/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/it/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/ja/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/ja/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/kk/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/kk/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/ko/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/ko/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/pt/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/pt/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/ru/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/ru/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/sr/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/sr/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/management/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/management/commands/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/management/commands/flowexport.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/middleware.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/css/perfect-scrollbar.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/css/trix.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/css/viewflow.min.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/css/vis-network.min.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-outlined.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-round.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-sharp.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons-two-tone.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/material-icons/material-icons.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Black.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Bold.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Light.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Medium.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Regular.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-Thin.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/roboto/roboto-fontface.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.eot +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.otf +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.ttf +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/SimpleIcons.woff2 +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/fonts/simple-icons/simple-icons.min.css +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/img/favicon.png +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/img/user.png +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash-renderer/build/dash_renderer.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-export.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-highlight.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/async-table.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dash_table/bundle.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-datepicker.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-dropdown.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-graph.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-highlight.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-markdown.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-plotlyjs.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-slider.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/async-upload.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components-shared.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.LICENSE.txt +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/dash_core_components.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/dcc/plotly.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/deps/polyfill@7.12.1.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.7.2.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/deps/prop-types@15.8.1.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/deps/react-dom@16.14.0.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/deps/react@16.14.0.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/contrib/dash/html/dash_html_components.min.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/perfect-scrollbar.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/perfect-scrollbar.min.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/smartcrop.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/trix.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/turbo.es2017-umd.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/viewflow.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/viewflow.min.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/vis-network.min.js +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/static/viewflow/js/vis-network.min.js.map +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/400.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/403.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/404.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/500.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/admin/fsm_change_form.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/admin/fsm_change_form_object_tools.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/admin/fsm_change_list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/admin/fsm_transition_form.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/formtools/wizard/wizard_form.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/logged_out.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/login.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/password_change_done.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/password_change_form.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/password_reset_complete.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/password_reset_confirm.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/password_reset_done.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/password_reset_form.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/profile.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/registration/provider_list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/base.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/base_lockscreen.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/base_page.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/contrib/import_export/export_action.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/contrib/import_export/import_action.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/contrib/plotly.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/contrib/swagger.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/app_menu.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/list_bulk_actions.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/list_filter.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/list_pagination.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/object_detail_card.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/site_menu.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/snackbar.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/view_action_menu.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/viewflow_css.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/includes/viewflow_js.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/material/circular_progress.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/views/confirm_delete.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/views/delete_action.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/views/detail.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/views/form.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/views/list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/views/transition.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/assign.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/base_page.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/celery_task_detail.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/flow_menu.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/graph.bpmn +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/graph.svg +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/process_cancel.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/process_dashboard.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/process_data.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/process_detail.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/process_list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/process_tasks_list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/start.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_assign.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_base.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_cancel.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_data.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_detail.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_revive.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_unassign.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task_undo.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/tasks_assign.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/tasks_unassign.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/workflow_menu.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/workflow_tasks_list.html +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templatetags/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templatetags/fsm.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templatetags/viewflow.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templatetags/workflow.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/urls/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/urls/sites.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/utils.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/actions.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/base.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/create.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/delete.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/detail.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/filters.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/list.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/search.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/views/update.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/admin.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/apps.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/chart.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/context.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/exceptions.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/fields.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/mixins.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/utils.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/actions.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/chart.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/create.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/dashboard.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/detail.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/filters.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/list.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/mixins.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/flow/views/update.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/lock.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/managers.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0001_initial.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0002_fsmchange.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0003_task_owner_permission_change.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0004_extend_fields_length.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0004_subprocess.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0005_merge.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0005_rename_flowcls.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0006_i18n.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0006_merge.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0007_owner_permission_obj.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0007_task_assigned.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0008_jsonfield_and_artifact.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0008_merge.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0009_merge.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0010_viewflow20.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0011_alter_task_created_and_more.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/migrations/__init__.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/func.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/handle.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/obsolete.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/nodes/switch.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/signals.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/status.py +0 -0
- {django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/workflow/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-viewflow
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.3
|
|
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,10 +185,41 @@ modifications of Viewflow. You can find the commercial license terms in
|
|
|
183
185
|
|
|
184
186
|
## Changelog
|
|
185
187
|
|
|
186
|
-
### 2.
|
|
188
|
+
### 2.2.3 2024-07-09
|
|
189
|
+
|
|
190
|
+
- Fixed issue with Split/Join operations when an immediate split to join
|
|
191
|
+
connection occurs.
|
|
192
|
+
- Improved redirect functionality for "Execute and Continue." Now redirects to
|
|
193
|
+
the process details if the process has finished.
|
|
194
|
+
- Enabled the Undo action for End() nodes.
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
### 2.2.2 2024-07-05
|
|
198
|
+
|
|
199
|
+
- Introduced new parameters for .If().Then(.., task_data=, task_seed) and
|
|
200
|
+
.Else(...)
|
|
201
|
+
- Include {{ form.media }} into default workflow/task.html template
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
### 2.2.1 2024-07-03
|
|
205
|
+
|
|
206
|
+
- Introduced a new parameter for .Next(..., task_seed=) that allows the
|
|
207
|
+
instantiation of new tasks with additional initialized .seed generic foreign key
|
|
208
|
+
- Introduced a new parameter for .Split(..., task_seed_source=) same as task_data_source,
|
|
209
|
+
prodices outgoing tasks with initializaed .seed value
|
|
210
|
+
- Introduced a new parameter for flow.Subprocess(process_data=, process_seed=,
|
|
211
|
+
task_data=, task_seed=) allows to provide data nad seed for newly created
|
|
212
|
+
process and/or start task
|
|
213
|
+
|
|
214
|
+
### 2.2.0 2024-06-28
|
|
187
215
|
|
|
188
|
-
-
|
|
189
|
-
|
|
216
|
+
- Introduced a new parameter for .Next(..., task_data=) that allows the
|
|
217
|
+
instantiation of new tasks with additional initialized .data, enabling data to
|
|
218
|
+
be passed from task to task.
|
|
219
|
+
- Added process.seed and task.seed generic foreign keys to the default workflow
|
|
220
|
+
models. Along with process.artifact and task.artifact, these additions enable
|
|
221
|
+
tracking of business process results from start to finish.
|
|
222
|
+
- Renamed Split.Next(data_source=) to task_data_source=.
|
|
190
223
|
|
|
191
224
|
|
|
192
225
|
[build]: https://img.shields.io/github/actions/workflow/status/viewflow/viewflow/django.yml?branch=main
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-viewflow
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.3
|
|
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
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
LICENSE
|
|
2
|
-
LICENSE.django
|
|
3
2
|
LICENSE_EXCEPTION
|
|
4
3
|
MANIFEST.in
|
|
5
4
|
README.md
|
|
@@ -306,6 +305,7 @@ viewflow/workflow/migrations/0009_merge.py
|
|
|
306
305
|
viewflow/workflow/migrations/0010_viewflow20.py
|
|
307
306
|
viewflow/workflow/migrations/0011_alter_task_created_and_more.py
|
|
308
307
|
viewflow/workflow/migrations/0012_alter_process_data_alter_task_data.py
|
|
308
|
+
viewflow/workflow/migrations/0013_process_seed_content_type_process_seed_object_id_and_more.py
|
|
309
309
|
viewflow/workflow/migrations/__init__.py
|
|
310
310
|
viewflow/workflow/nodes/__init__.py
|
|
311
311
|
viewflow/workflow/nodes/end.py
|
|
@@ -318,6 +318,5 @@ viewflow/workflow/nodes/mixins.py
|
|
|
318
318
|
viewflow/workflow/nodes/obsolete.py
|
|
319
319
|
viewflow/workflow/nodes/split.py
|
|
320
320
|
viewflow/workflow/nodes/start.py
|
|
321
|
-
viewflow/workflow/nodes/subprocess.py
|
|
322
321
|
viewflow/workflow/nodes/switch.py
|
|
323
322
|
viewflow/workflow/nodes/view.py
|
|
@@ -4,7 +4,7 @@ README = open("README.md", "r", encoding="utf-8").read()
|
|
|
4
4
|
|
|
5
5
|
setuptools.setup(
|
|
6
6
|
name="django-viewflow",
|
|
7
|
-
version="2.
|
|
7
|
+
version="2.2.3",
|
|
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
|
|
{django-viewflow-2.1.1 → django-viewflow-2.2.3}/viewflow/templates/viewflow/workflow/task.html
RENAMED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{% extends request.resolver_match.app.base_template_name|default:'viewflow/workflow/base_page.html' %}
|
|
2
2
|
{% load i18n viewflow workflow %}
|
|
3
3
|
|
|
4
|
+
{% block extrahead %}
|
|
5
|
+
{{ block.super }}
|
|
6
|
+
{{ form.media }}
|
|
7
|
+
{% endblock %}
|
|
4
8
|
|
|
5
9
|
{% block content %}{% with process=request.activation.process task=request.activation.task %}
|
|
6
10
|
<div class="mdc-layout-grid vf-page__grid">
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Forward-reference for class-body declarations"""
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2017-2020, Mikhail Podgurskiy
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
|
|
6
|
+
# This work is dual-licensed under AGPL defined in file 'LICENSE' with
|
|
7
|
+
# LICENSE_EXCEPTION and the Commercial license defined in file 'COMM_LICENSE',
|
|
8
|
+
# which is part of this source code package.
|
|
9
|
+
from typing import Any, Optional, Union
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ThisMethod:
|
|
13
|
+
"""
|
|
14
|
+
Reference to a method for forward references in class bodies.
|
|
15
|
+
|
|
16
|
+
This class is used to defer the resolution of a method reference until the
|
|
17
|
+
class is fully constructed. This is particularly useful in workflow or state
|
|
18
|
+
machine implementations where the flow references are declared before the
|
|
19
|
+
methods are defined.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, propname: str, methodname: str):
|
|
23
|
+
self._propname = propname
|
|
24
|
+
self._methodname = methodname
|
|
25
|
+
|
|
26
|
+
def resolve(self, instance) -> Any:
|
|
27
|
+
"""
|
|
28
|
+
Resolve the method reference on the given instance.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
instance (object): The instance on which to resolve the method.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Any: The result of the resolved method call.
|
|
35
|
+
|
|
36
|
+
Raises:
|
|
37
|
+
AttributeError: If the property or method does not exist on the instance.
|
|
38
|
+
"""
|
|
39
|
+
prop = getattr(instance, self._propname)
|
|
40
|
+
method = getattr(instance, f"_this_{self._methodname}")
|
|
41
|
+
return method(prop)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ThisObject(object):
|
|
45
|
+
"""
|
|
46
|
+
Helper for forward references to class attributes.
|
|
47
|
+
|
|
48
|
+
This class is used to defer the resolution of an attribute reference until
|
|
49
|
+
the class is fully constructed. This allows for the use of class attributes
|
|
50
|
+
before they are defined.
|
|
51
|
+
|
|
52
|
+
Attributes:
|
|
53
|
+
name (str): The name of the attribute to resolve.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
def __init__(self, name: str) -> None: # noqa D102
|
|
57
|
+
self.name = name
|
|
58
|
+
|
|
59
|
+
def resolve(self, instance: object) -> Any:
|
|
60
|
+
"""
|
|
61
|
+
Resolve the attribute reference on the given instance.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
instance (object): The instance on which to resolve the attribute.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Any: The resolved attribute.
|
|
68
|
+
|
|
69
|
+
Raises:
|
|
70
|
+
AttributeError: If the attribute does not exist on the instance.
|
|
71
|
+
"""
|
|
72
|
+
return getattr(instance, self.name)
|
|
73
|
+
|
|
74
|
+
# def __copy__(self):
|
|
75
|
+
# return super().__copy__()
|
|
76
|
+
|
|
77
|
+
# def __deepcopy__(self, memo):
|
|
78
|
+
# return super().__deepcopy__(memo)
|
|
79
|
+
|
|
80
|
+
def __getattr__(self, name):
|
|
81
|
+
if name.startswith("__"):
|
|
82
|
+
super().__getattr__(name)
|
|
83
|
+
return ThisMethod(self.name, name)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class This:
|
|
87
|
+
"""
|
|
88
|
+
Helper for building forward references to class attributes and methods.
|
|
89
|
+
|
|
90
|
+
The rationale is the ability to specify references to the class attributes and
|
|
91
|
+
methods before they are declared. `this` acts similarly to `self`, but for
|
|
92
|
+
class-level forward references.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
def resolve(self, instance: object, this_ref: Union[ThisObject, ThisMethod, Any]):
|
|
96
|
+
"""
|
|
97
|
+
Resolve a forward reference on the given instance.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
instance (object): The instance on which to resolve the reference.
|
|
101
|
+
this_ref (Union[ThisObject, ThisMethod, Any]): The reference to resolve.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Any: The resolved reference.
|
|
105
|
+
|
|
106
|
+
Raises:
|
|
107
|
+
AttributeError: If the reference cannot be resolved.
|
|
108
|
+
"""
|
|
109
|
+
if isinstance(this_ref, (ThisObject, ThisMethod)):
|
|
110
|
+
return this_ref.resolve(instance)
|
|
111
|
+
else:
|
|
112
|
+
return this_ref
|
|
113
|
+
|
|
114
|
+
def __getattr__(self, name):
|
|
115
|
+
return ThisObject(name)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# Instantiate a global `this` object for use in class definitions.
|
|
119
|
+
this = This()
|