django-pfx 1.4.dev166__tar.gz → 1.4.dev168__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_pfx-1.4.dev166 → django_pfx-1.4.dev168}/PKG-INFO +1 -1
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/fields/media_field.py +39 -3
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/.gitignore +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/LICENSE +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/README.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/Makefile +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/conf.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/index.rst +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/img/pfx.png +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/make_messages +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/manage.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/fields.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pyproject.toml +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/requirements.txt +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/serve-doc +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/setup.cfg +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/setup.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/apps.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/models.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/basic_api_test.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/urls.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/views.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/views.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.dev168
|
|
4
4
|
Summary: Django PFX is a toolkit designed to streamline the development of RESTful APIs using the Django framework.
|
|
5
5
|
Author: Hervé Martinet
|
|
6
6
|
Author-email: herve.martinet@gmail.com
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.dev168
|
|
4
4
|
Summary: Django PFX is a toolkit designed to streamline the development of RESTful APIs using the Django framework.
|
|
5
5
|
Author: Hervé Martinet
|
|
6
6
|
Author-email: herve.martinet@gmail.com
|
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
from importlib import import_module
|
|
3
3
|
from urllib.request import urlopen
|
|
4
4
|
|
|
5
|
+
from django.core.exceptions import ValidationError
|
|
5
6
|
from django.db import models
|
|
6
7
|
from django.db.models.signals import post_delete, post_init
|
|
7
8
|
from django.dispatch import receiver
|
|
@@ -10,6 +11,8 @@ from pfx.pfxcore.shortcuts import settings
|
|
|
10
11
|
|
|
11
12
|
logger = logging.getLogger(__name__)
|
|
12
13
|
|
|
14
|
+
DEFAULT_KEYS = {"key", "name", "content-type", "content-length"}
|
|
15
|
+
|
|
13
16
|
|
|
14
17
|
def get_storage_class(class_path):
|
|
15
18
|
ps = class_path.split('.')
|
|
@@ -19,7 +22,7 @@ def get_storage_class(class_path):
|
|
|
19
22
|
class MediaField(models.JSONField):
|
|
20
23
|
def __init__(
|
|
21
24
|
self, *args, max_length=255, get_key=None, storage=None,
|
|
22
|
-
auto_delete=False, **kwargs):
|
|
25
|
+
auto_delete=False, extra_keys=None, **kwargs):
|
|
23
26
|
self.get_key = get_key or self.get_default_key
|
|
24
27
|
if not storage and not settings.STORAGE_DEFAULT:
|
|
25
28
|
raise Exception(
|
|
@@ -27,14 +30,47 @@ class MediaField(models.JSONField):
|
|
|
27
30
|
"class on the field or define STORAGE_DEFAULT settings.")
|
|
28
31
|
self.storage = storage or get_storage_class(settings.STORAGE_DEFAULT)
|
|
29
32
|
self.auto_delete = auto_delete
|
|
33
|
+
self.allowed_keys = DEFAULT_KEYS.union(extra_keys or set())
|
|
30
34
|
self._db_value = None
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
|
|
36
|
+
# Inject validator
|
|
37
|
+
kwargs.setdefault("validators", [])
|
|
38
|
+
kwargs["validators"].append(self.validate_keys)
|
|
39
|
+
|
|
40
|
+
super().__init__(*args, max_length=max_length, **kwargs)
|
|
33
41
|
|
|
34
42
|
@staticmethod
|
|
35
43
|
def get_default_key(obj, filename):
|
|
36
44
|
return f"{type(obj).__name__}/{obj.pk}/{filename}"
|
|
37
45
|
|
|
46
|
+
def validate_keys(self, value):
|
|
47
|
+
if isinstance(value, dict):
|
|
48
|
+
missing_keys = []
|
|
49
|
+
if value.get('key'):
|
|
50
|
+
# Empty dict or empty key is allowed to save
|
|
51
|
+
# and object without file to have a pk to determine the key.
|
|
52
|
+
# When the key is set, other required keys must be present.
|
|
53
|
+
if not value.get('name'):
|
|
54
|
+
missing_keys.append('name')
|
|
55
|
+
if not value.get('content-type'):
|
|
56
|
+
missing_keys.append('content-type')
|
|
57
|
+
if not value.get('content-length'):
|
|
58
|
+
missing_keys.append('content-length')
|
|
59
|
+
if missing_keys:
|
|
60
|
+
raise ValidationError(
|
|
61
|
+
f"Missing required keys: {', '.join(missing_keys)}")
|
|
62
|
+
else:
|
|
63
|
+
raise ValidationError("Value must be a dictionary.")
|
|
64
|
+
|
|
65
|
+
def clean_value(self, value):
|
|
66
|
+
if isinstance(value, dict):
|
|
67
|
+
return {k: v for k, v in value.items() if k in self.allowed_keys}
|
|
68
|
+
return value
|
|
69
|
+
|
|
70
|
+
def get_prep_value(self, value):
|
|
71
|
+
value = self.clean_value(value)
|
|
72
|
+
return super().get_prep_value(value)
|
|
73
|
+
|
|
38
74
|
def media_pre_save(self, obj):
|
|
39
75
|
def save_file(obj, file, name):
|
|
40
76
|
setattr(obj, self.name, self.upload(obj, file, name))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/fields/minutes_duration_field.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/management/commands/makeapidoc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/abstract_pfx_base_user.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/models/user_filtered_queryset_mixin.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/templates/registration/welcome_email.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/ordered_rest_view_mixin.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/pfx/pfxcore/views/parameters/subset_page_subset.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests/tests/test_post_migrate_groups_update.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_base_user/settings/dev_custom_example.py
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
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/migrations/0001_initial.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev166 → django_pfx-1.4.dev168}/tests_custom_user/settings/dev_custom_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|