django-pfx 1.7.6.dev21__tar.gz → 1.7.6.dev23__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.7.6.dev21 → django_pfx-1.7.6.dev23}/PKG-INFO +1 -1
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/scm_version.json +2 -2
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/fields/media_field.py +31 -3
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/basic_api_test.py +31 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/.gitignore +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/.gitlab-ci.yml +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/LICENSE +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/MANIFEST.in +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/README.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/scm_file_list.json +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/Makefile +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/conf.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/index.rst +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/api.views.rst +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/authentication.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/decorator.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/getting_started.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/model.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/profiling.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/settings.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/testing.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/doc/source/user_jobs.md +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/img/pfx.png +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/img/pfx.svg +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/make_messages +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/manage.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/apps.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/email_backend/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/email_backend/q_mailjet_email_backend.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/exceptions.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/mailjet/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/mailjet/mailjet.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/mailjet/message_result.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0002_alter_email_headers.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0003_alter_email_options.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0004_alter_email_mail_from.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0005_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/models/email.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/providers/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/providers/email_django_q_executor.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/shortcuts.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/tasks.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/templates/emails/base_template.html +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/templates/emails/base_template.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/templates/emails/base_template_subject.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/views/email_rest_view.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/mfa/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/mfa/authenticator.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/mfa/base.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/mfa/email.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/mfa/legacy.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/mfa/sms.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/middleware/request_too_big_middleware.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/middleware/ws_cookie_authentication_middleware.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0005_mfadevice_mfadevice_mfa_device_unique_backend.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0006_alter_pfxuser_managers.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0007_alter_pfxuser_options.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0008_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/attachment_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/mfa_device.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/mfa_user_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/sms/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/sms/backends/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/sms/backends/base.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/sms/backends/console.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/version_check.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/fields.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/mfa_authentication_views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/apps.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0002_alter_userjob_options_alter_userjob_auto_queued_and_more.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0003_clean_scheduled_tasks.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0004_userjob_summary_url.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0005_swappable_user_job.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0006_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/models/user_job.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/models/user_job_attachment.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/providers/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/providers/user_job_django_q_executor.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/providers/user_job_websocket_channel_provider.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/tasks.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/views/user_job_attachment_view.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/views/user_job_view.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/views/user_websocket_consumer.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pyproject.toml +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/requirements.txt +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/serve-doc +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/setup.cfg +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/setup.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/apps.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/channel_group_send_calls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/mfa_urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/models.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/settings/common.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/mfa_test_utils.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_client.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_emails_email_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_emails_email_model.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_emails_q_mailjet_email_backend.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_emails_send_email_message.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_help_text.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_fields_time.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_mfa_legacy.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_mfa_login_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_mfa_setup_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_user_job_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_user_job_messages.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_user_job_model.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_user_websocket.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_version_check.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/tests/test_ws_cookie_middleware.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests/views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_base_user/views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/models.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user/views.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/migrations/0002_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/models.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/providers.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/scope.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/settings/common.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/tests/test_user_job.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_custom_user_job/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/models.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/settings/common.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/urls.py +0 -0
- {django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/tests_user_email_login/views.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.7.6.
|
|
3
|
+
Version: 1.7.6.dev23
|
|
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.7.6.
|
|
3
|
+
Version: 1.7.6.dev23
|
|
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,7 +1,9 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import binascii
|
|
1
3
|
import io
|
|
2
4
|
import logging
|
|
3
5
|
from importlib import import_module
|
|
4
|
-
from urllib.
|
|
6
|
+
from urllib.parse import unquote_to_bytes
|
|
5
7
|
|
|
6
8
|
from django.core.exceptions import ValidationError
|
|
7
9
|
from django.db import models
|
|
@@ -15,6 +17,30 @@ logger = logging.getLogger(__name__)
|
|
|
15
17
|
DEFAULT_KEYS = {"key", "name", "content-type", "content-length"}
|
|
16
18
|
|
|
17
19
|
|
|
20
|
+
def decode_data_uri(value):
|
|
21
|
+
"""Return the bytes carried by a ``data:`` URI, and only that.
|
|
22
|
+
|
|
23
|
+
The uploaded content reaches the server as this string. It used to be
|
|
24
|
+
handed to ``urlopen``, which also opens ``file://`` and ``http://``:
|
|
25
|
+
a client could then have the server read a local file or reach the
|
|
26
|
+
internal network. Only the ``data:`` scheme is accepted here, and it
|
|
27
|
+
is decoded in place, never opened.
|
|
28
|
+
|
|
29
|
+
:raises ValidationError: when the value is not a valid ``data:`` URI
|
|
30
|
+
"""
|
|
31
|
+
if not isinstance(value, str) or not value.startswith('data:'):
|
|
32
|
+
raise ValidationError("Le contenu doit être une URI « data: ».")
|
|
33
|
+
header, sep, data = value[len('data:'):].partition(',')
|
|
34
|
+
if not sep:
|
|
35
|
+
raise ValidationError("URI « data: » invalide.")
|
|
36
|
+
if ';base64' in header:
|
|
37
|
+
try:
|
|
38
|
+
return base64.b64decode(data, validate=True)
|
|
39
|
+
except (binascii.Error, ValueError):
|
|
40
|
+
raise ValidationError("URI « data: » invalide.")
|
|
41
|
+
return unquote_to_bytes(data)
|
|
42
|
+
|
|
43
|
+
|
|
18
44
|
def get_storage_class(class_path):
|
|
19
45
|
ps = class_path.split('.')
|
|
20
46
|
return getattr(import_module('.'.join(ps[:-1])), ps[-1])()
|
|
@@ -91,8 +117,10 @@ class MediaField(models.JSONField):
|
|
|
91
117
|
after_save.append(lambda: self.delete(self._db_value))
|
|
92
118
|
setattr(obj, self.name, None)
|
|
93
119
|
if b64:
|
|
94
|
-
|
|
95
|
-
file =
|
|
120
|
+
try:
|
|
121
|
+
file = decode_data_uri(b64)
|
|
122
|
+
except ValidationError as e:
|
|
123
|
+
raise ValidationError({self.name: e.messages})
|
|
96
124
|
setattr(obj, self.name, dict(key=self.get_key(obj, name)))
|
|
97
125
|
after_save.append(lambda: save_file(obj, file, name))
|
|
98
126
|
return after_save
|
|
@@ -847,6 +847,37 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
847
847
|
self.assertJE(response, 'local_file', None)
|
|
848
848
|
self.assertFalse(Path(f'/tmp/django-pfx-filestore/{key2}').exists())
|
|
849
849
|
|
|
850
|
+
def test_create_file_rejects_non_data_uri(self):
|
|
851
|
+
"""A media upload only accepts a ``data:`` URI.
|
|
852
|
+
|
|
853
|
+
The content used to be handed to ``urlopen``, so ``file://`` made
|
|
854
|
+
the server read a local file and ``http://`` reach the network.
|
|
855
|
+
Both are refused now, with a field error, before anything is read.
|
|
856
|
+
"""
|
|
857
|
+
for uri in (
|
|
858
|
+
'file:///etc/hostname',
|
|
859
|
+
'http://169.254.169.254/latest/meta-data/',
|
|
860
|
+
'not a uri at all'):
|
|
861
|
+
response = self.client.post('/api/books', dict(
|
|
862
|
+
name="Test Book",
|
|
863
|
+
author=self.author1.pk,
|
|
864
|
+
pub_date='2000-01-01',
|
|
865
|
+
local_file=dict(name='x.txt', base64=uri)))
|
|
866
|
+
self.assertRC(response, 422)
|
|
867
|
+
self.assertJEExists(response, 'local_file')
|
|
868
|
+
|
|
869
|
+
def test_create_file_url_encoded_data_uri(self):
|
|
870
|
+
"""A ``data:`` URI without ``;base64`` is percent-decoded, as
|
|
871
|
+
``urlopen`` did, so that path keeps working without it."""
|
|
872
|
+
response = self.client.post('/api/books', dict(
|
|
873
|
+
name="Test Book",
|
|
874
|
+
author=self.author1.pk,
|
|
875
|
+
pub_date='2000-01-01',
|
|
876
|
+
local_file=dict(
|
|
877
|
+
name='test.txt', base64='data:text/plain,Hello%20world')))
|
|
878
|
+
self.assertRC(response, 200)
|
|
879
|
+
self.assertJE(response, 'local_file.content-length', '11')
|
|
880
|
+
|
|
850
881
|
def test_get_file_content_disposition(self):
|
|
851
882
|
"""The file name must survive both local serving paths.
|
|
852
883
|
|
|
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.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/locale/fr/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/locale/fr/LC_MESSAGES/django.po
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0002_alter_email_headers.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/migrations/0003_alter_email_options.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.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/providers/email_django_q_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/templates/emails/base_template.html
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/emails/templates/emails/base_template.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/fields/minutes_duration_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/commands/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/commands/makeapidoc.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/management/commands/profile.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
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.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.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/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
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/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
|
|
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.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/media_rest_view_mixin.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/mfa_authentication_views.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/ordered_rest_view_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/date_format.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_count.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_items.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_order.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/list_search.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/meta_fields.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/meta_orders.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_page.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/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
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/locale/fr/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/locale/fr/LC_MESSAGES/django.po
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/migrations/0005_swappable_user_job.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev21 → django_pfx-1.7.6.dev23}/pfx/userjobs/models/user_job_attachment.py
RENAMED
|
File without changes
|