django-pfx 1.7.6.dev33__tar.gz → 1.7.6.dev35__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.dev33 → django_pfx-1.7.6.dev35}/PKG-INFO +1 -1
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/django_pfx.egg-info/PKG-INFO +1 -1
- django_pfx-1.7.6.dev35/django_pfx.egg-info/scm_version.json +8 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/fields/media_field.py +13 -7
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/basic_api_test.py +66 -7
- django_pfx-1.7.6.dev33/django_pfx.egg-info/scm_version.json +0 -8
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/.gitignore +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/.gitlab-ci.yml +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/LICENSE +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/MANIFEST.in +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/README.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/django_pfx.egg-info/scm_file_list.json +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/Makefile +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/conf.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/index.rst +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/api.views.rst +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/authentication.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/decorator.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/getting_started.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/model.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/profiling.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/settings.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/testing.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/doc/source/user_jobs.md +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/img/pfx.png +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/img/pfx.svg +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/make_messages +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/manage.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/apps.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/email_backend/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/email_backend/memory_email_backend.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/email_backend/q_mailjet_email_backend.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/exceptions.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/mailjet/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/mailjet/mailjet.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/mailjet/message_result.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0002_alter_email_headers.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0003_alter_email_options.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0004_alter_email_mail_from.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0005_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0006_alter_email_attachments.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/models/email.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/providers/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/providers/email_django_q_executor.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/shortcuts.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/tasks.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/templates/emails/base_template.html +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/templates/emails/base_template.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/templates/emails/base_template_subject.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/test.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/views/email_rest_view.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/mfa/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/mfa/authenticator.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/mfa/base.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/mfa/email.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/mfa/legacy.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/mfa/sms.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/middleware/request_too_big_middleware.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/middleware/ws_cookie_authentication_middleware.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0005_mfadevice_mfadevice_mfa_device_unique_backend.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0006_alter_pfxuser_managers.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0007_alter_pfxuser_options.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/0008_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/attachment_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/mfa_device.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/mfa_user_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/sms/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/sms/backends/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/sms/backends/base.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/sms/backends/console.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/sms/backends/memory.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/version_check.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/fields.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/mfa_authentication_views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/xml_test_runner.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/apps.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/0002_alter_userjob_options_alter_userjob_auto_queued_and_more.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/0003_clean_scheduled_tasks.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/0004_userjob_summary_url.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/0005_swappable_user_job.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/0006_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/models/user_job.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/models/user_job_attachment.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/providers/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/providers/user_job_django_q_executor.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/providers/user_job_websocket_channel_provider.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/tasks.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/views/user_job_attachment_view.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/views/user_job_view.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/userjobs/views/user_websocket_consumer.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pyproject.toml +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/requirements.txt +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/serve-doc +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/setup.cfg +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/setup.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/apps.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/channel_group_send_calls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/mfa_urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/models.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/settings/common.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/mfa_test_utils.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_client.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_emails_email_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_emails_email_model.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_emails_q_mailjet_email_backend.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_emails_send_email_message.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_emails_test_tools.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_help_text.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_fields_time.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_mfa_legacy.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_mfa_login_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_mfa_setup_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_test_runner.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_user_job_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_user_job_messages.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_user_job_model.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_user_websocket.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_version_check.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/tests/test_ws_cookie_middleware.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests/views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_base_user/views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/models.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user/views.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/migrations/0002_lowercase_verbose_names.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/models.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/providers.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/scope.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/settings/common.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/tests/test_user_job.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_custom_user_job/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/models.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/settings/common.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/tests_user_email_login/urls.py +0 -0
- {django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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.dev35
|
|
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.dev35
|
|
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
|
|
@@ -7,7 +7,7 @@ from urllib.parse import unquote_to_bytes
|
|
|
7
7
|
|
|
8
8
|
from django.core.exceptions import ValidationError
|
|
9
9
|
from django.db import models
|
|
10
|
-
from django.db.models.signals import post_delete, post_init
|
|
10
|
+
from django.db.models.signals import post_delete, post_init, post_save
|
|
11
11
|
from django.dispatch import receiver
|
|
12
12
|
|
|
13
13
|
from pfx.pfxcore.shortcuts import settings
|
|
@@ -80,7 +80,6 @@ class MediaField(models.JSONField):
|
|
|
80
80
|
self.auto_delete = auto_delete
|
|
81
81
|
self.allowed_keys = DEFAULT_KEYS.union(extra_keys or set())
|
|
82
82
|
self.convert_heic = convert_heic
|
|
83
|
-
self._db_value = None
|
|
84
83
|
|
|
85
84
|
# Inject default validator if empty
|
|
86
85
|
kwargs.setdefault("validators", [validate_media_json])
|
|
@@ -113,8 +112,9 @@ class MediaField(models.JSONField):
|
|
|
113
112
|
else:
|
|
114
113
|
b64 = None
|
|
115
114
|
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
db_value = obj._media_db_values.get(self.name)
|
|
116
|
+
if db_value and (b64 or not value):
|
|
117
|
+
after_save.append(lambda: self.delete(db_value))
|
|
118
118
|
setattr(obj, self.name, None)
|
|
119
119
|
if b64:
|
|
120
120
|
try:
|
|
@@ -160,11 +160,17 @@ class MediaField(models.JSONField):
|
|
|
160
160
|
return self.storage.delete(value)
|
|
161
161
|
|
|
162
162
|
|
|
163
|
+
# Kept on the instance: the field is shared by every instance of the model.
|
|
163
164
|
@receiver(post_init)
|
|
164
|
-
|
|
165
|
+
@receiver(post_save)
|
|
166
|
+
def store_media_db_values(sender, instance, update_fields=None, **kwargs):
|
|
165
167
|
for field in sender._meta.fields:
|
|
166
|
-
if isinstance(field, MediaField)
|
|
167
|
-
|
|
168
|
+
if isinstance(field, MediaField) and (
|
|
169
|
+
update_fields is None or field.name in update_fields):
|
|
170
|
+
if not hasattr(instance, '_media_db_values'):
|
|
171
|
+
instance._media_db_values = {}
|
|
172
|
+
instance._media_db_values[field.name] = (
|
|
173
|
+
field.value_from_object(instance))
|
|
168
174
|
|
|
169
175
|
|
|
170
176
|
@receiver(post_delete)
|
|
@@ -847,6 +847,64 @@ 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 _create_book_with_file(self, name):
|
|
851
|
+
response = self.client.post('/api/books', dict(
|
|
852
|
+
name=name,
|
|
853
|
+
author=self.author1.pk,
|
|
854
|
+
pub_date='2000-01-01',
|
|
855
|
+
local_file=dict(
|
|
856
|
+
name='test.txt',
|
|
857
|
+
base64='data:text/plain;charset=utf-8;'
|
|
858
|
+
'base64,VGVzdCBjb250ZW50')))
|
|
859
|
+
self.assertRC(response, 200)
|
|
860
|
+
return (
|
|
861
|
+
self.get_val(response, 'pk'),
|
|
862
|
+
self.get_val(response, 'local_file.key'))
|
|
863
|
+
|
|
864
|
+
def _replace_file(self, book):
|
|
865
|
+
book.local_file = dict(
|
|
866
|
+
name='new.txt',
|
|
867
|
+
base64='data:text/plain;charset=utf-8;base64,TmV3IGNvbnRlbnQ=')
|
|
868
|
+
funcs = Book._meta.get_field('local_file').media_pre_save(book)
|
|
869
|
+
book.save()
|
|
870
|
+
for func in funcs:
|
|
871
|
+
func()
|
|
872
|
+
return book.local_file['key']
|
|
873
|
+
|
|
874
|
+
def test_replace_file_after_loading_another_object(self):
|
|
875
|
+
"""Replacing a file deletes the old file of that object only.
|
|
876
|
+
|
|
877
|
+
The original value used to live on the field, shared by every
|
|
878
|
+
instance of the model: loading a second book overwrote it, and
|
|
879
|
+
replacing the first book's file deleted the second book's file
|
|
880
|
+
while leaving the first one's old file orphaned.
|
|
881
|
+
"""
|
|
882
|
+
pk1, key1 = self._create_book_with_file("Book 1")
|
|
883
|
+
pk2, key2 = self._create_book_with_file("Book 2")
|
|
884
|
+
|
|
885
|
+
book1 = Book.objects.get(pk=pk1)
|
|
886
|
+
Book.objects.get(pk=pk2)
|
|
887
|
+
self._replace_file(book1)
|
|
888
|
+
|
|
889
|
+
self.assertFalse(Path(f'/tmp/django-pfx-filestore/{key1}').exists())
|
|
890
|
+
self.assertTrue(Path(f'/tmp/django-pfx-filestore/{key2}').exists())
|
|
891
|
+
|
|
892
|
+
def test_replace_file_twice_on_same_instance(self):
|
|
893
|
+
"""The original value follows each save, so a second replacement
|
|
894
|
+
on the same instance deletes the file of the first one rather
|
|
895
|
+
than the long-gone file it was loaded with."""
|
|
896
|
+
pk, key = self._create_book_with_file("Book")
|
|
897
|
+
|
|
898
|
+
book = Book.objects.get(pk=pk)
|
|
899
|
+
new_key = self._replace_file(book)
|
|
900
|
+
self.assertTrue(
|
|
901
|
+
Path(f'/tmp/django-pfx-filestore/{new_key}').exists())
|
|
902
|
+
self._replace_file(book)
|
|
903
|
+
|
|
904
|
+
self.assertFalse(Path(f'/tmp/django-pfx-filestore/{key}').exists())
|
|
905
|
+
self.assertFalse(
|
|
906
|
+
Path(f'/tmp/django-pfx-filestore/{new_key}').exists())
|
|
907
|
+
|
|
850
908
|
def test_create_file_rejects_non_data_uri(self):
|
|
851
909
|
"""A media upload only accepts a ``data:`` URI.
|
|
852
910
|
|
|
@@ -1332,19 +1390,20 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
1332
1390
|
STORAGE_S3_AWS_PUT_URL_EXPIRE=300)
|
|
1333
1391
|
@patch("boto3.client", MagicMock(return_value=MockBoto3Client()))
|
|
1334
1392
|
def test_media_field(self):
|
|
1393
|
+
key = f"Book/{self.author1_book1.pk}/cover.png"
|
|
1335
1394
|
response = self.client.get(
|
|
1336
1395
|
f'/api/books/{self.author1_book1.pk}/cover/upload-url/'
|
|
1337
1396
|
'cover.png?content-type=image/png')
|
|
1338
1397
|
self.assertRC(response, 200)
|
|
1339
|
-
self.assertJE(response, 'file.key',
|
|
1398
|
+
self.assertJE(response, 'file.key', key)
|
|
1340
1399
|
self.assertJE(response, 'file.name', "cover.png")
|
|
1341
1400
|
self.assertJE(
|
|
1342
|
-
response, 'url', "http://dragonfly.fake/
|
|
1401
|
+
response, 'url', f"http://dragonfly.fake/{key}")
|
|
1343
1402
|
|
|
1344
1403
|
response = self.client.put(f'/api/books/{self.author1_book1.pk}', dict(
|
|
1345
1404
|
cover=response.json_content['file']))
|
|
1346
1405
|
self.assertRC(response, 200)
|
|
1347
|
-
self.assertJE(response, 'cover.key',
|
|
1406
|
+
self.assertJE(response, 'cover.key', key)
|
|
1348
1407
|
self.assertJE(response, 'cover.name', "cover.png")
|
|
1349
1408
|
self.assertJE(response, 'cover.content-length', 1000)
|
|
1350
1409
|
self.assertJE(response, 'cover.content-type', "image/png")
|
|
@@ -1353,18 +1412,18 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
1353
1412
|
f'/api/books/{self.author1_book1.pk}/cover')
|
|
1354
1413
|
self.assertRC(response, 200)
|
|
1355
1414
|
self.assertJE(
|
|
1356
|
-
response, 'url', "http://dragonfly.fake/
|
|
1415
|
+
response, 'url', f"http://dragonfly.fake/{key}")
|
|
1357
1416
|
|
|
1358
1417
|
response = self.client.get(
|
|
1359
1418
|
f'/api/books/{self.author1_book1.pk}/cover?redirect=false')
|
|
1360
1419
|
self.assertRC(response, 200)
|
|
1361
1420
|
self.assertJE(
|
|
1362
|
-
response, 'url', "http://dragonfly.fake/
|
|
1421
|
+
response, 'url', f"http://dragonfly.fake/{key}")
|
|
1363
1422
|
|
|
1364
1423
|
response = self.client.get(
|
|
1365
1424
|
f'/api/books/{self.author1_book1.pk}/cover?redirect=true')
|
|
1366
1425
|
self.assertRedirects(
|
|
1367
|
-
response, "http://dragonfly.fake/
|
|
1426
|
+
response, f"http://dragonfly.fake/{key}",
|
|
1368
1427
|
fetch_redirect_response=False)
|
|
1369
1428
|
|
|
1370
1429
|
with patch.object(
|
|
@@ -1374,7 +1433,7 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
1374
1433
|
f'/api/books/{self.author1_book1.pk}')
|
|
1375
1434
|
mock_delete.assert_called_with(
|
|
1376
1435
|
Bucket='dragonfly.fake',
|
|
1377
|
-
Key=
|
|
1436
|
+
Key=key)
|
|
1378
1437
|
|
|
1379
1438
|
def test_annotate_meta_service(self):
|
|
1380
1439
|
response = self.client.get('/api/authors-annotate/meta')
|
|
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.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/email_backend/memory_email_backend.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/locale/fr/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/migrations/0002_alter_email_headers.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/providers/email_django_q_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/emails/templates/emails/base_template.html
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/management/commands/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/management/commands/makeapidoc.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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.dev33 → django_pfx-1.7.6.dev35}/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.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/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.dev33 → django_pfx-1.7.6.dev35}/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
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/media_rest_view_mixin.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/mfa_authentication_views.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/ordered_rest_view_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev33 → django_pfx-1.7.6.dev35}/pfx/pfxcore/views/parameters/date_format.py
RENAMED
|
File without changes
|
|
File without changes
|