dynamicforms 0.77.4__tar.gz → 0.77.7__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.
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/PKG-INFO +4 -3
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/__init__.py +1 -1
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/fields.py +18 -1
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/choice/allow_tags.py +1 -1
- dynamicforms-0.77.7/dynamicforms/mixins/file_field.py +52 -0
- dynamicforms-0.77.7/dynamicforms/preupload_files.py +117 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/serializers.py +7 -4
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/urls.py +1 -1
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/advanced_fields.py +2 -3
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/document.py +2 -3
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/pyproject.toml +1 -1
- dynamicforms-0.77.4/dynamicforms/preupload_files.py +0 -42
- dynamicforms-0.77.4/dynamicforms_legacy/mixins/file_field.py +0 -5
- dynamicforms-0.77.4/examples/rest/fields/df_file_field.py +0 -76
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.actrc +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.coveragerc +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.github/workflows/Python tests.yml +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.github/workflows/check_code.yml +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.github/workflows/check_doc.yml +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.github/workflows/incremental-cover-check.yml +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.github/workflows/vitest_tests.yml +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/.gitignore +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/LICENSE +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/MANIFEST.in +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/README.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/Makefile +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/conf.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/action_controls.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/context_processors.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/dialogs.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/fields.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/index.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/renderers.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/serializers.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/templatetags.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/viewsets.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/contribute.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/guides/index.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/guides/quick_start.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/guides/templates.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/intro.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/settings.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/index.rst +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/make.bat +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.vitepress/config.mts +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.vitepress/theme/index.ts +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.vitepress/theme/style.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/examples/api-examples.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/examples/markdown-examples.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/getting-started.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/index.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/reference/dialog-size.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/reference/hiding_titlebar_and_navbar.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/reference/index.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/reference/layout.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/settings.md +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/action.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/apps.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/filters.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/locale/en/LC_MESSAGES/django.po +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/locale/en/LC_MESSAGES/djangojs.po +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/locale/sl/LC_MESSAGES/django.po +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/locale/sl/LC_MESSAGES/djangojs.po +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/management/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/management/commands/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/management/commands/clean_dfpreuploaded_files.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/migrations/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/action.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/choice/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/choice/null_choice.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/choice/single_choice.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/color_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/conditional_visibility.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/enable_copy.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/field_render.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/help_text.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/implicit_hidden.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/implicit_natural_date.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/null_value.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/password_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/related_field_ajax.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/mixins/rtf_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/models.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/models_utils.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/pagination.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/progress.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/renderers.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/routers.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/struct.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/layout.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/base.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/listserializer.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/render_mode_enum.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/serializer.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/serializer_filter.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/serializer_render_actions.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/serializer_render_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/mixins/util.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/renderer.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/template_render/responsive_table_layout.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/utils.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/views.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms/viewsets.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_dev/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_dev/management/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_dev/management/commands/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_dev/management/commands/generate_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_dev/management/commands/npm_run.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/action.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/apps.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/context_processors.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/dynamicforms_migration_mixin.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/filters.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/migrations/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/action.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/allow_tags.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/enable_copy.py +0 -0
- {dynamicforms-0.77.4/dynamicforms → dynamicforms-0.77.7/dynamicforms_legacy}/mixins/file_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/help_text.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/implicit_hidden.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/implicit_natural_date.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/null_choice.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/null_value.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/password_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/related_field_ajax.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/render.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/rtf_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/mixins/single_choice.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/models.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/pagination.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/progress.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/renderers.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/serializers.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/settings.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap-theme.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/fonts/glyphicons-halflings-regular.eot +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/fonts/glyphicons-halflings-regular.svg +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/fonts/glyphicons-halflings-regular.woff +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/js/bootstrap.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/js/bootstrap.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-3.4.1-dist/js/npm.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-grid.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-grid.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-reboot.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-reboot.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/css/bootstrap.min.css.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.bundle.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.bundle.js.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.js.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/bootstrap-4.3.1-dist/js/bootstrap.min.js.map +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/ckeditor-df/ckEditorCustomBuildReadMe.txt +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/ckeditor-df/ckeditor.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/dynamicforms/dynamicforms.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/dynamicforms/icons/copy.svg +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/dynamicforms/icons/eye-off-outline.svg +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/dynamicforms/icons/eye-outline.svg +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-icons_222222_256x240.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-icons_228ef1_256x240.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-icons_ef8c08_256x240.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-icons_ffd27a_256x240.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/images/ui-icons_ffffff_256x240.png +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/jquery-ui.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/jquery-ui.structure.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/css/jquery-ui.theme.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/js/jquery-3.3.1.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/jquery_ui/js/jquery-ui.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/css/select2-bootstrap3.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/css/select2-bootstrap4.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/css/select2.min.css +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/af.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ar.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/az.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/bg.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/bs.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ca.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/cs.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/da.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/de.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/dsb.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/el.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/en.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/es.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/et.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/eu.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/fa.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/fi.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/fr.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/gl.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/he.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/hi.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/hr.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/hsb.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/hu.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/hy.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/id.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/is.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/it.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ja.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/km.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ko.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/lt.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/lv.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/mk.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ms.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/nb.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/nl.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/pl.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ps.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/pt-BR.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/pt.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ro.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/ru.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/sk.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/sl.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/sr-Cyrl.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/sr.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/sv.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/th.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/tr.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/uk.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/vi.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/zh-CN.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/i18n/zh-TW.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/select2.full.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/select2.full.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/select2.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/static/select2/select2-4.0.5/js/select2.min.js +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/struct.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base_form.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base_includes.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base_includes_select2.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base_list.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base_table_body.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/base_table_filter.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_form.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_includes.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_includes_v3.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_includes_v4.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_list.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_table_body.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/base_table_filter.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/base_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/base_field_v3.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/base_field_v4.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/checkbox.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/checkbox_multiple.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/fieldset.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/form.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/input.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/list_fieldset.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/radio.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/rtf_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/select.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/select_multiple.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/field/textarea.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/modal_dialog.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/modal_dialog_rest.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/bootstrap/page.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/base_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/checkbox.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/checkbox_multiple.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/dict_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/fieldset.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/form.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/input.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/list_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/list_fieldset.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/radio.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/rtf_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/select.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/select_multiple.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/field/textarea.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/base_form.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/base_includes.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/base_list.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/base_table_body.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/base_table_filter.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/base_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/checkbox.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/checkbox_multiple.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/fieldset.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/form.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/input.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/list_fieldset.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/radio.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/rtf_field.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/select.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/select_multiple.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/field/textarea.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/modal_dialog.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/modal_dialog_rest.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/jquery_ui/page.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/modal_dialog.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/modal_dialog_rest.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/page.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templates/dynamicforms/rtf_field_style.html +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templatetags/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/templatetags/dynamicforms.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/urls.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/views.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/dynamicforms_legacy/viewsets.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/admin.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/apps.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/enum_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0001_initial.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0002_auto_20190320_0823.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0003_filter_name.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0004_basicfields_password_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0005_advancedfields_file_field_two.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0005_refreshtype_rich_text_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0006_merge_20200921_1152.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0007_basicfields_nullint_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0008_auto_20210303_0904.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0008_auto_20210312_1146.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0009_auto_20210929_1136.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0010_filter_rtf_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/0011_auto_20211120_0523.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/migrations/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/models.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/recurrence_utils.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/actions_overview.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/basic_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/calculated_css_class_for_table_row.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/calendar.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/calendar_dependencies.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/calendar_recurrence.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/calendar_reminders.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/choice_allow_tags_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/fields/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/fields/name_field.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/filter.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/hidden_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/page_load.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/relation.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/single_dialog.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/validated.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/rest/write_only_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/tests.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/examples/urls.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/manage.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/package-lock.json +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/package.json +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/publish.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/readthedocs.yml +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/requirements.txt +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/requirements_test_functional.txt +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/setup/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/setup/settings.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/setup/urls.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/setup/wsgi.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_advanced_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_basic_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_filter.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_hidden_fields.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_page_load.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_single_dialog.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_test_validated.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/_tests.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/select.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/functional/selenium_test_case.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/request_sync.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/static_files/0_3142.prj +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/__init__.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_calendar.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_conditional_visibility.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_cursor_pagination.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_df_serializer.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_filter.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_page_load.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_struct.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/test_validate_allow_null_for_field_with_source_equal_to_star.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tests/unit/tests.py +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tox.ini +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tsconfig.build.json +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tsconfig.eslint.json +0 -0
- {dynamicforms-0.77.4 → dynamicforms-0.77.7}/tsconfig.json +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: dynamicforms
|
|
3
|
-
Version: 0.77.
|
|
3
|
+
Version: 0.77.7
|
|
4
4
|
Summary: DynamicForms performs all the visualisation & data entry of your DRF Serializers & ViewSets and adds some candy of its own
|
|
5
5
|
Project-URL: Homepage, https://github.com/velis74/DynamicForms
|
|
6
6
|
Project-URL: Repository, https://github.com/velis74/DynamicForms
|
|
7
7
|
Project-URL: Bug Tracker, https://github.com/velis74/DynamicForms/issues
|
|
8
8
|
Author-email: Jure Erznožnik <jure@velis.si>
|
|
9
|
-
License: MIT
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
10
11
|
Classifier: Development Status :: 3 - Alpha
|
|
11
12
|
Classifier: Framework :: Django
|
|
12
13
|
Classifier: License :: OSI Approved :: BSD License
|
|
@@ -35,7 +35,24 @@ assert DFField # So that the linter does not complain
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class AutoGeneratedField(dict):
|
|
38
|
-
|
|
38
|
+
def get_serializer_field(self, name, serializer, extra_params=None):
|
|
39
|
+
from rest_framework.utils import model_meta
|
|
40
|
+
|
|
41
|
+
if not hasattr(serializer, "_df_model"):
|
|
42
|
+
serializer._df_model = getattr(serializer.Meta, "model")
|
|
43
|
+
if not hasattr(serializer, "_df_info"):
|
|
44
|
+
serializer._df_info = model_meta.get_field_info(serializer._df_model)
|
|
45
|
+
if not hasattr(serializer, "_df_depth"):
|
|
46
|
+
serializer._df_depth = getattr(serializer.Meta, "depth", 0)
|
|
47
|
+
|
|
48
|
+
if extra_params is None:
|
|
49
|
+
extra_params = self
|
|
50
|
+
field_class, field_kwargs = serializer.build_field(
|
|
51
|
+
name, serializer._df_info, serializer._df_model, serializer._df_depth
|
|
52
|
+
)
|
|
53
|
+
field_kwargs.update(extra_params)
|
|
54
|
+
|
|
55
|
+
return field_class(**field_kwargs)
|
|
39
56
|
|
|
40
57
|
|
|
41
58
|
class BooleanField(FieldRenderMixin, ActionMixin, FieldHelpTextMixin, ConditionalVisibilityMixin, fields.BooleanField):
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from django.utils.translation import gettext_lazy as _
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from rest_framework.fields import FileField
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class FileFieldMixin(object):
|
|
10
|
+
def __init__(self, **kwargs) -> None:
|
|
11
|
+
super().__init__(**kwargs)
|
|
12
|
+
# noinspection PyUnresolvedReferences
|
|
13
|
+
self.style.setdefault("no_filter", True)
|
|
14
|
+
|
|
15
|
+
def to_representation(self: "FileField", value, row_data=None):
|
|
16
|
+
if value:
|
|
17
|
+
return getattr(value, "url", None)
|
|
18
|
+
return None
|
|
19
|
+
|
|
20
|
+
def to_internal_value(self: "FileField", data):
|
|
21
|
+
from django.core.files.base import ContentFile
|
|
22
|
+
from rest_framework.exceptions import ValidationError
|
|
23
|
+
|
|
24
|
+
from dynamicforms.preupload_files import get_cached_file
|
|
25
|
+
|
|
26
|
+
if isinstance(data, str): # dobimo guid
|
|
27
|
+
cached_file = get_cached_file(data, self.context["request"].user.id or -1, True)
|
|
28
|
+
if cached_file:
|
|
29
|
+
# Naredimo django file iz cache podatkov
|
|
30
|
+
return ContentFile(cached_file.content, name=cached_file.name)
|
|
31
|
+
|
|
32
|
+
# Če datoteke ni v cache-u in imamo obstoječo vrednost na instanci, vrnemo obstoječo vrednost
|
|
33
|
+
if self.parent.instance and getattr(self.parent.instance, self.field_name, None):
|
|
34
|
+
return str(getattr(self.parent.instance, self.field_name))
|
|
35
|
+
raise ValidationError(_("File not found in cache"))
|
|
36
|
+
|
|
37
|
+
if not self.allow_empty_file and not data:
|
|
38
|
+
self.fail("empty")
|
|
39
|
+
|
|
40
|
+
return super().to_internal_value(data)
|
|
41
|
+
|
|
42
|
+
def validate_empty_values(self: "FileField", data):
|
|
43
|
+
"""Override za boljše rokovanje z empty vrednostmi"""
|
|
44
|
+
if data is None:
|
|
45
|
+
if self.required:
|
|
46
|
+
self.fail("required")
|
|
47
|
+
return True, None
|
|
48
|
+
|
|
49
|
+
if data == "" and self.allow_empty_file:
|
|
50
|
+
return True, None
|
|
51
|
+
|
|
52
|
+
return False, data
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import time
|
|
2
|
+
|
|
3
|
+
from dataclasses import asdict, dataclass
|
|
4
|
+
from typing import Optional
|
|
5
|
+
from uuid import uuid4
|
|
6
|
+
|
|
7
|
+
from django.core.cache import cache
|
|
8
|
+
from django.utils.translation import gettext as __
|
|
9
|
+
from rest_framework import status
|
|
10
|
+
from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError
|
|
11
|
+
from rest_framework.response import Response
|
|
12
|
+
from rest_framework.views import APIView
|
|
13
|
+
|
|
14
|
+
# Cache constants
|
|
15
|
+
CACHE_EXPIRATION = 60 * 60 # 60 minutes
|
|
16
|
+
CACHE_KEY_PREFIX = "file_upload_"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class CachedFile:
|
|
21
|
+
content: bytes
|
|
22
|
+
name: str
|
|
23
|
+
content_type: str
|
|
24
|
+
size: int
|
|
25
|
+
user_id: int
|
|
26
|
+
timestamp: int
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def age_in_seconds(self) -> int:
|
|
30
|
+
return int(time.time()) - self.timestamp
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def count_user_cached_files(user_id: int) -> int:
|
|
34
|
+
"""Vrne število vseh cached datotek za uporabnika"""
|
|
35
|
+
count = 0
|
|
36
|
+
|
|
37
|
+
if hasattr(cache, 'keys'): # we expect redis in production
|
|
38
|
+
for key in cache.keys(f"{CACHE_KEY_PREFIX}*"):
|
|
39
|
+
file_data = cache.get(key)
|
|
40
|
+
if file_data and file_data.get("user_id") == user_id:
|
|
41
|
+
count += 1
|
|
42
|
+
|
|
43
|
+
return count
|
|
44
|
+
|
|
45
|
+
class FileUploadView(APIView):
|
|
46
|
+
def post(self, request):
|
|
47
|
+
"""Upload file to cache storage"""
|
|
48
|
+
MAX_FILE_SIZE = 1 * 1024 * 1024 # 1MB
|
|
49
|
+
MAX_FILES_PER_USER = 10
|
|
50
|
+
|
|
51
|
+
uploaded_file = request.FILES.get("file")
|
|
52
|
+
if not uploaded_file:
|
|
53
|
+
raise ValidationError({"file": ["required"]})
|
|
54
|
+
|
|
55
|
+
if uploaded_file.size > MAX_FILE_SIZE:
|
|
56
|
+
msg = __("File size exceeds allowed maximum size of {size_mb}MB")
|
|
57
|
+
raise ValidationError({"file": [msg.format(size_mb=MAX_FILE_SIZE // (1024 * 1024))]})
|
|
58
|
+
|
|
59
|
+
user_id = request.user.id or -1
|
|
60
|
+
|
|
61
|
+
if count_user_cached_files(user_id) >= MAX_FILES_PER_USER:
|
|
62
|
+
raise ValidationError({"file": [__("Too many files uploaded. Please submit a form or try again later.")]})
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
file_identifier = str(uuid4())
|
|
66
|
+
file_content = uploaded_file.read()
|
|
67
|
+
|
|
68
|
+
cached_file = CachedFile(
|
|
69
|
+
content=file_content,
|
|
70
|
+
name=uploaded_file.name,
|
|
71
|
+
content_type=uploaded_file.content_type,
|
|
72
|
+
size=uploaded_file.size,
|
|
73
|
+
user_id=user_id,
|
|
74
|
+
timestamp=int(time.time()),
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
cache_key = f"{CACHE_KEY_PREFIX}{file_identifier}"
|
|
78
|
+
cache.set(cache_key, asdict(cached_file), CACHE_EXPIRATION)
|
|
79
|
+
|
|
80
|
+
return Response({"identifier": file_identifier})
|
|
81
|
+
|
|
82
|
+
except Exception as e:
|
|
83
|
+
# V produkciji uporabi proper logging
|
|
84
|
+
print(f"Error during file upload: {str(e)}")
|
|
85
|
+
return Response({"error": __("File upload failed")}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
86
|
+
|
|
87
|
+
def delete(self, request, file_identifier=None):
|
|
88
|
+
"""Delete file from cache storage"""
|
|
89
|
+
if not file_identifier:
|
|
90
|
+
raise ValidationError({"file_identifier": ["required"]})
|
|
91
|
+
|
|
92
|
+
file_identifier = file_identifier.rstrip("/") # remove the trailing slash
|
|
93
|
+
cached_file = get_cached_file(file_identifier, request.user.id)
|
|
94
|
+
if not cached_file:
|
|
95
|
+
raise NotFound(__("File not found"))
|
|
96
|
+
|
|
97
|
+
cache_key = f"{CACHE_KEY_PREFIX}{file_identifier}"
|
|
98
|
+
cache.delete(cache_key)
|
|
99
|
+
|
|
100
|
+
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def get_cached_file(file_identifier: str, user_id: int, delete_from_cache: bool = False) -> Optional[CachedFile]:
|
|
104
|
+
"""Helper function to retrieve file from cache"""
|
|
105
|
+
cache_key = f"{CACHE_KEY_PREFIX}{file_identifier}"
|
|
106
|
+
file_data = cache.get(cache_key)
|
|
107
|
+
|
|
108
|
+
if not file_data:
|
|
109
|
+
return None
|
|
110
|
+
|
|
111
|
+
if file_data.get("user_id") != user_id:
|
|
112
|
+
raise PermissionDenied(__("You don't have permission to access this file"))
|
|
113
|
+
|
|
114
|
+
if delete_from_cache:
|
|
115
|
+
cache.delete(cache_key)
|
|
116
|
+
|
|
117
|
+
return CachedFile(**file_data)
|
|
@@ -303,10 +303,14 @@ class ModelSerializer(DynamicFormsSerializer, serializers.ModelSerializer):
|
|
|
303
303
|
resolved display value in table
|
|
304
304
|
"""
|
|
305
305
|
for field_name in field_names[:]:
|
|
306
|
-
# serializer field: either what is declared as a Field instance in Serializer or AutogeneratedField
|
|
307
|
-
s_field = declared_fields.get(field_name, getattr(self, field_name, None))
|
|
308
306
|
# existing extra as provided by get_extra_kwargs
|
|
309
307
|
extra = extra_kwargs.get(field_name, dict())
|
|
308
|
+
|
|
309
|
+
# serializer field: either what is declared as a Field instance in Serializer or AutogeneratedField
|
|
310
|
+
s_field = declared_fields.get(field_name, getattr(self, field_name, None))
|
|
311
|
+
if isinstance(s_field, fields.AutoGeneratedField):
|
|
312
|
+
s_field = s_field.get_serializer_field(field_name, self, extra)
|
|
313
|
+
|
|
310
314
|
# model field, if it exists
|
|
311
315
|
try:
|
|
312
316
|
d_field = self.Meta.model._meta.get_field(field_name)
|
|
@@ -350,7 +354,7 @@ class ModelSerializer(DynamicFormsSerializer, serializers.ModelSerializer):
|
|
|
350
354
|
source="*",
|
|
351
355
|
display_form=DisplayMode.HIDDEN,
|
|
352
356
|
display_table=DisplayMode.FULL,
|
|
353
|
-
render_params=s_field
|
|
357
|
+
render_params=getattr(s_field, "render_params", None) if s_field else None,
|
|
354
358
|
)
|
|
355
359
|
|
|
356
360
|
def get_resolve_method(fld_nm, res_fld):
|
|
@@ -528,4 +532,3 @@ class DynamicModelSerializerMixin(DynamicModelMixin):
|
|
|
528
532
|
except ImportError:
|
|
529
533
|
pass
|
|
530
534
|
return self.Meta.layout
|
|
531
|
-
|
|
@@ -5,5 +5,5 @@ from dynamicforms import preupload_files, progress
|
|
|
5
5
|
urlpatterns = [
|
|
6
6
|
# Progress is used for checking on progress of operation on server
|
|
7
7
|
re_path(r"^progress/$", progress.get_progress_value, name="progress"),
|
|
8
|
-
re_path(r"^preupload-file
|
|
8
|
+
re_path(r"^preupload-file/(?P<file_identifier>[\w-]+/)?$", preupload_files.FileUploadView.as_view(), name="preupload-file"),
|
|
9
9
|
]
|
|
@@ -5,7 +5,6 @@ from dynamicforms.template_render.layout import Layout
|
|
|
5
5
|
from dynamicforms.viewsets import ModelViewSet
|
|
6
6
|
|
|
7
7
|
from ..models import AdvancedFields, Relation
|
|
8
|
-
from .fields.df_file_field import DfFileField, DfPreloadedFileField
|
|
9
8
|
|
|
10
9
|
|
|
11
10
|
class AdvancedFieldsSerializer(serializers.ModelSerializer):
|
|
@@ -95,8 +94,8 @@ class AdvancedFieldsSerializer(serializers.ModelSerializer):
|
|
|
95
94
|
queryset=Relation.objects.all(), url_reverse="relation-list", value_field="id", text_field="name"
|
|
96
95
|
)
|
|
97
96
|
slug_related_field = fields.SlugRelatedField(slug_field="name", queryset=Relation.objects.all())
|
|
98
|
-
file_field =
|
|
99
|
-
file_field_two =
|
|
97
|
+
file_field = fields.FileField(max_length=None, allow_empty_file=False, use_url=False, allow_null=True, required=False)
|
|
98
|
+
file_field_two = fields.FileField(allow_empty_file=False, use_url=False, allow_null=True, required=False)
|
|
100
99
|
|
|
101
100
|
# hyperlinked_identity_field = serializers.HyperlinkedIdentityField(view_name='relation-detail', read_only=True)
|
|
102
101
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
from dynamicforms import serializers
|
|
1
|
+
from dynamicforms import fields, serializers
|
|
2
2
|
from dynamicforms.viewsets import ModelViewSet
|
|
3
3
|
|
|
4
4
|
from ..models import Document
|
|
5
|
-
from .fields.df_file_field import DfPreloadedFileField
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
class DocumentsSerializer(serializers.ModelSerializer):
|
|
@@ -13,7 +12,7 @@ class DocumentsSerializer(serializers.ModelSerializer):
|
|
|
13
12
|
"edit": "Editing document object",
|
|
14
13
|
}
|
|
15
14
|
|
|
16
|
-
file =
|
|
15
|
+
file = fields.FileField(allow_empty_file=False, use_url=False, allow_null=True)
|
|
17
16
|
|
|
18
17
|
class Meta:
|
|
19
18
|
model = Document
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dynamicforms"
|
|
7
|
-
version = "0.77.
|
|
7
|
+
version = "0.77.7"
|
|
8
8
|
description = "DynamicForms performs all the visualisation & data entry of your DRF Serializers & ViewSets and adds some candy of its own"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import pathlib
|
|
2
|
-
import time
|
|
3
|
-
|
|
4
|
-
from typing import Optional
|
|
5
|
-
from uuid import uuid4
|
|
6
|
-
|
|
7
|
-
from django.conf import settings
|
|
8
|
-
from django.core.files.storage import FileSystemStorage
|
|
9
|
-
from django.core.files.uploadedfile import InMemoryUploadedFile
|
|
10
|
-
from django.http import HttpResponse, JsonResponse
|
|
11
|
-
from django.utils.translation import gettext as __
|
|
12
|
-
from rest_framework import status
|
|
13
|
-
from rest_framework.exceptions import ValidationError
|
|
14
|
-
|
|
15
|
-
UPLOADED_FILE_NAME_TIMESTAMP_SEPARATOR = "_timestamp_"
|
|
16
|
-
UPLOADED_FILE_NAME_UUID_SEPARATOR = "_uuid_"
|
|
17
|
-
UPLOADED_FILE_TMP_LOCATION = "df_tmp_files"
|
|
18
|
-
|
|
19
|
-
preuploaded_fs = FileSystemStorage(location=f"{settings.MEDIA_ROOT}/{UPLOADED_FILE_TMP_LOCATION}")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def preupload_file(request):
|
|
23
|
-
# if not DYNAMICFORMS.allow_anonymous_user_to_preupload_files and not request.user.is_authenticated:
|
|
24
|
-
# return HttpResponse(status=status.HTTP_401_UNAUTHORIZED)
|
|
25
|
-
if request.method == "POST":
|
|
26
|
-
uploaded_file: Optional[InMemoryUploadedFile] = request.FILES.get("file", None)
|
|
27
|
-
if not uploaded_file:
|
|
28
|
-
raise ValidationError(dict(file=["required"]))
|
|
29
|
-
file_identifier: str = str(uuid4())
|
|
30
|
-
try:
|
|
31
|
-
file_extension: str = pathlib.Path(uploaded_file.name).suffix
|
|
32
|
-
file_name: str = uploaded_file.name.replace(file_extension, "")
|
|
33
|
-
preuploaded_fs.save(
|
|
34
|
-
f"{file_name}{UPLOADED_FILE_NAME_UUID_SEPARATOR}{file_identifier}"
|
|
35
|
-
f"{UPLOADED_FILE_NAME_TIMESTAMP_SEPARATOR}{int(time.time())}"
|
|
36
|
-
f"{file_extension}",
|
|
37
|
-
uploaded_file,
|
|
38
|
-
)
|
|
39
|
-
return JsonResponse(dict(identifier=file_identifier))
|
|
40
|
-
except Exception:
|
|
41
|
-
return HttpResponse(status=status.HTTP_500_INTERNAL_SERVER_ERROR, content=__("File upload failed").encode())
|
|
42
|
-
return HttpResponse(status=status.HTTP_501_NOT_IMPLEMENTED)
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import glob
|
|
2
|
-
import os
|
|
3
|
-
import pathlib
|
|
4
|
-
|
|
5
|
-
from typing import Optional
|
|
6
|
-
|
|
7
|
-
from django.core.files.uploadedfile import InMemoryUploadedFile
|
|
8
|
-
from django.utils.safestring import mark_safe
|
|
9
|
-
from django.utils.translation import gettext_lazy as _
|
|
10
|
-
from rest_framework.exceptions import ValidationError
|
|
11
|
-
|
|
12
|
-
from dynamicforms.fields import FileField
|
|
13
|
-
from dynamicforms.preupload_files import (
|
|
14
|
-
preuploaded_fs,
|
|
15
|
-
UPLOADED_FILE_NAME_TIMESTAMP_SEPARATOR,
|
|
16
|
-
UPLOADED_FILE_NAME_UUID_SEPARATOR,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class DfFileField(FileField):
|
|
21
|
-
def to_representation(self, value, row_data=None):
|
|
22
|
-
empty_value: Optional[str] = ""
|
|
23
|
-
render_to_component_def_format: bool = self.context.get("format", "") == "componentdef"
|
|
24
|
-
if render_to_component_def_format:
|
|
25
|
-
empty_value = None
|
|
26
|
-
if not value:
|
|
27
|
-
return empty_value
|
|
28
|
-
link = mark_safe(
|
|
29
|
-
'<a href="#" onclick=\'dynamicforms.stopEventPropagation(event); window.open("%s", "_blank")\'>%s</a>'
|
|
30
|
-
% (value.url, os.path.basename(value.url))
|
|
31
|
-
)
|
|
32
|
-
self.help_text = "Existing file: %s " % link
|
|
33
|
-
return super().to_representation(empty_value, row_data)
|
|
34
|
-
|
|
35
|
-
def render_to_table(self, value, row_data):
|
|
36
|
-
render_to_component_def_format: bool = self.context.get("format", "") == "componentdef"
|
|
37
|
-
link = mark_safe(
|
|
38
|
-
'<a href="#" onclick=\'dynamicforms.stopEventPropagation(event); window.open("%s", "_blank")\'>%s</a>'
|
|
39
|
-
% (value.url, os.path.basename(value.url))
|
|
40
|
-
)
|
|
41
|
-
return link if not render_to_component_def_format else value.url
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
class DfPreloadedFileField(FileField):
|
|
45
|
-
def to_representation(self, value, row_data=None):
|
|
46
|
-
if value:
|
|
47
|
-
return getattr(value, "url", None)
|
|
48
|
-
return None
|
|
49
|
-
|
|
50
|
-
def to_internal_value(self, data):
|
|
51
|
-
if not isinstance(data, str):
|
|
52
|
-
raise ValidationError(_("File identifier should be string"))
|
|
53
|
-
file_size = len(data)
|
|
54
|
-
if not self.allow_empty_file and not file_size:
|
|
55
|
-
self.fail("empty")
|
|
56
|
-
file: Optional[str] = next(
|
|
57
|
-
iter(
|
|
58
|
-
glob.glob(
|
|
59
|
-
f"{preuploaded_fs.location}/*{UPLOADED_FILE_NAME_UUID_SEPARATOR}*{data}*{UPLOADED_FILE_NAME_TIMESTAMP_SEPARATOR}*"
|
|
60
|
-
)
|
|
61
|
-
),
|
|
62
|
-
None,
|
|
63
|
-
)
|
|
64
|
-
if not file and self.parent.instance and getattr(self.parent.instance, self.field_name, None):
|
|
65
|
-
return str(getattr(self.parent.instance, self.field_name))
|
|
66
|
-
file_object = pathlib.Path(file)
|
|
67
|
-
file_pointer = open(file, "rb")
|
|
68
|
-
return InMemoryUploadedFile(
|
|
69
|
-
file=file_pointer,
|
|
70
|
-
field_name=self.field_name,
|
|
71
|
-
name=f"{file_object.stem.split(UPLOADED_FILE_NAME_UUID_SEPARATOR)[0]}{file_object.suffix}",
|
|
72
|
-
content_type=None,
|
|
73
|
-
size=len(file_pointer.read()),
|
|
74
|
-
charset=None,
|
|
75
|
-
content_type_extra=None,
|
|
76
|
-
)
|
|
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
|
{dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/action_controls.rst
RENAMED
|
File without changes
|
{dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/context_processors.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/serializers.rst
RENAMED
|
File without changes
|
{dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/api/templatetags.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/guides/quick_start.rst
RENAMED
|
File without changes
|
{dynamicforms-0.77.4 → dynamicforms-0.77.7}/docs/.docs_archive/documents/guides/templates.rst
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
|