django-pfx 1.4.dev174__tar.gz → 1.4.dev178__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.dev174 → django_pfx-1.4.dev178}/PKG-INFO +1 -1
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +10 -10
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/shortcuts.py +11 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/storage/local_storage.py +6 -13
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/fields.py +12 -2
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/rest_views.py +0 -1
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/basic_api_test.py +8 -18
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/.gitignore +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/LICENSE +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/README.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/Makefile +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/conf.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/index.rst +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/img/pfx.png +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/make_messages +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/manage.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pyproject.toml +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/requirements.txt +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/serve-doc +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/setup.cfg +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/setup.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/apps.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/models.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/urls.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests/views.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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.dev178
|
|
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.dev178
|
|
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 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: \n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
|
-
"POT-Creation-Date:
|
|
10
|
+
"POT-Creation-Date: 2026-02-11 13:48+0100\n"
|
|
11
11
|
"PO-Revision-Date: 2021-06-22 23:31+0200\n"
|
|
12
12
|
"Last-Translator: \n"
|
|
13
13
|
"Language-Team: \n"
|
|
@@ -112,27 +112,27 @@ msgstr "OTP activé"
|
|
|
112
112
|
msgid "%(model_name)s with this %(field_labels)s already exists."
|
|
113
113
|
msgstr "%(model_name)s avec ce/cette %(field_labels)s éxiste déjà."
|
|
114
114
|
|
|
115
|
-
#: shortcuts.py:
|
|
115
|
+
#: shortcuts.py:52
|
|
116
116
|
#, python-brace-format
|
|
117
117
|
msgid "{key} must be an integer number."
|
|
118
118
|
msgstr "{key} doit être un nombre entier."
|
|
119
119
|
|
|
120
|
-
#: shortcuts.py:
|
|
120
|
+
#: shortcuts.py:68
|
|
121
121
|
#, python-brace-format
|
|
122
122
|
msgid "{key} must be a number."
|
|
123
123
|
msgstr "{key} doit être un nombre."
|
|
124
124
|
|
|
125
|
-
#: shortcuts.py:
|
|
125
|
+
#: shortcuts.py:84
|
|
126
126
|
#, python-brace-format
|
|
127
127
|
msgid "{key} must be a decimal number."
|
|
128
128
|
msgstr "{key} doit être un nombre décimal."
|
|
129
129
|
|
|
130
|
-
#: shortcuts.py:
|
|
130
|
+
#: shortcuts.py:100
|
|
131
131
|
#, python-brace-format
|
|
132
132
|
msgid "{key} must be a date."
|
|
133
133
|
msgstr "{key} doit être une date."
|
|
134
134
|
|
|
135
|
-
#: shortcuts.py:
|
|
135
|
+
#: shortcuts.py:121
|
|
136
136
|
#, python-brace-format
|
|
137
137
|
msgid "{key} must be “true”, “false”, “1”, “0” or empty."
|
|
138
138
|
msgstr "{key} doit être « true », « false », « 1 », « 0 » ou vide"
|
|
@@ -286,23 +286,23 @@ msgstr "Le paramètre object est requis pour move={move}."
|
|
|
286
286
|
msgid "object {pk} does not exists in this move context."
|
|
287
287
|
msgstr "object {pk} n'existe pas dans ce contexte de déplacement."
|
|
288
288
|
|
|
289
|
-
#: views/rest_views.py:225 views/rest_views.py:
|
|
289
|
+
#: views/rest_views.py:225 views/rest_views.py:390
|
|
290
290
|
#, python-brace-format
|
|
291
291
|
msgid "{obj} cannot be deleted because it is referenced by other objects."
|
|
292
292
|
msgstr ""
|
|
293
293
|
"{obj} ne peut pas être supprimé car il est référencé par d’autres objets."
|
|
294
294
|
|
|
295
|
-
#: views/rest_views.py:
|
|
295
|
+
#: views/rest_views.py:354
|
|
296
296
|
#, python-brace-format
|
|
297
297
|
msgid "{model} {obj} created."
|
|
298
298
|
msgstr "{model} {obj} créé."
|
|
299
299
|
|
|
300
|
-
#: views/rest_views.py:
|
|
300
|
+
#: views/rest_views.py:355
|
|
301
301
|
#, python-brace-format
|
|
302
302
|
msgid "{model} {obj} updated."
|
|
303
303
|
msgstr "{model} {obj} modifié."
|
|
304
304
|
|
|
305
|
-
#: views/rest_views.py:
|
|
305
|
+
#: views/rest_views.py:1269
|
|
306
306
|
#, python-brace-format
|
|
307
307
|
msgid "{model} {obj} deleted."
|
|
308
308
|
msgstr "{model} {obj} supprimé."
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import logging
|
|
3
3
|
from datetime import date
|
|
4
4
|
from decimal import Decimal as D
|
|
5
|
+
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
from django.core.exceptions import ObjectDoesNotExist
|
|
7
8
|
from django.utils.translation import gettext_lazy as _
|
|
@@ -156,3 +157,13 @@ def permissions(*perms):
|
|
|
156
157
|
def model_permissions(model, *actions):
|
|
157
158
|
meta = model._meta
|
|
158
159
|
return {f"{meta.app_label}.{a}_{meta.model_name}" for a in actions}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def file_extension(filename):
|
|
163
|
+
suffixes = Path(filename).suffixes
|
|
164
|
+
if not suffixes:
|
|
165
|
+
return ''
|
|
166
|
+
elif suffixes[-1] in ['gz', 'bz2'] and len(suffixes) > 1:
|
|
167
|
+
return ''.join(suffixes[-2:])
|
|
168
|
+
else:
|
|
169
|
+
return suffixes[-1]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import hashlib
|
|
2
1
|
import logging
|
|
2
|
+
import uuid
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
|
|
5
5
|
from django.http import FileResponse
|
|
6
6
|
|
|
7
|
-
from pfx.pfxcore.shortcuts import settings
|
|
7
|
+
from pfx.pfxcore.shortcuts import file_extension, settings
|
|
8
8
|
|
|
9
9
|
logger = logging.getLogger(__name__)
|
|
10
10
|
|
|
@@ -24,18 +24,11 @@ class LocalStorage:
|
|
|
24
24
|
relative_path = Path(*key_list[:-1])
|
|
25
25
|
dirname = Path(settings.STORAGE_LOCAL_ROOT, relative_path)
|
|
26
26
|
dirname.mkdir(parents=True, exist_ok=True)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
elif suffixes[-1] in ['gz', 'bz2'] and len(suffixes) > 1:
|
|
31
|
-
ext = ''.join(suffixes[-2:])
|
|
32
|
-
else:
|
|
33
|
-
ext = suffixes[-1]
|
|
34
|
-
hashname = f'{hashlib.sha1(file).hexdigest()}{ext}'
|
|
35
|
-
final_key = str(Path(relative_path, hashname))
|
|
36
|
-
with open(Path(dirname, hashname), 'wb') as f:
|
|
27
|
+
uuidname = f'{uuid.uuid4()}{file_extension(filename)}'
|
|
28
|
+
final_key = str(Path(relative_path, uuidname))
|
|
29
|
+
with open(Path(dirname, uuidname), 'wb') as f:
|
|
37
30
|
f.write(file)
|
|
38
|
-
with open(Path(dirname,
|
|
31
|
+
with open(Path(dirname, uuidname), 'rb') as f:
|
|
39
32
|
response = FileResponse(
|
|
40
33
|
f, as_attachment=True, filename=filename)
|
|
41
34
|
return {
|
|
@@ -2,6 +2,10 @@ import inspect
|
|
|
2
2
|
import logging
|
|
3
3
|
import operator
|
|
4
4
|
|
|
5
|
+
from django.contrib.contenttypes.fields import (
|
|
6
|
+
GenericForeignKey,
|
|
7
|
+
GenericRelation,
|
|
8
|
+
)
|
|
5
9
|
from django.core.exceptions import ValidationError
|
|
6
10
|
from django.db import models
|
|
7
11
|
from django.db.models.constants import LOOKUP_SEP
|
|
@@ -57,6 +61,8 @@ class FieldType:
|
|
|
57
61
|
(models.CharField, CharField),
|
|
58
62
|
(models.URLField, CharField),
|
|
59
63
|
(models.UUIDField, CharField),
|
|
64
|
+
(GenericRelation, ModelObjectList),
|
|
65
|
+
(GenericForeignKey, ModelObject),
|
|
60
66
|
(models.ForeignObject, ModelObject),
|
|
61
67
|
(models.OneToOneRel, ModelObject),
|
|
62
68
|
(models.ForeignObjectRel, ModelObjectList),
|
|
@@ -380,12 +386,16 @@ class ViewModelField(ViewField):
|
|
|
380
386
|
if self.related_model and related_fields:
|
|
381
387
|
self.related_fields = process_fields(
|
|
382
388
|
self.related_model, related_fields)
|
|
383
|
-
|
|
384
|
-
|
|
389
|
+
# Force a prefetch for GenericForeignKey (not valid in select_related)
|
|
390
|
+
is_generic_fk = isinstance(model_field, GenericForeignKey)
|
|
391
|
+
if (not self.select_related and
|
|
392
|
+
self.field_type == FieldType.ModelObject and
|
|
393
|
+
not is_generic_fk):
|
|
385
394
|
# Auto add the field in select_related if select_related
|
|
386
395
|
# is not defined and the field is an object.
|
|
387
396
|
self.select_related = [self.name]
|
|
388
397
|
if not self.prefetch_related and (
|
|
398
|
+
is_generic_fk or
|
|
389
399
|
self.field_type == FieldType.ModelObjectList):
|
|
390
400
|
# Auto add the field in prefetch_related if prefetch_related
|
|
391
401
|
# is not defined and the field is an object list.
|
|
@@ -746,15 +746,12 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
746
746
|
self.assertRC(response, 200)
|
|
747
747
|
self.assertJE(response, 'local_file.content-length', '12')
|
|
748
748
|
self.assertJE(response, 'local_file.content-type', 'text/plain')
|
|
749
|
-
self.
|
|
750
|
-
response, 'local_file.key',
|
|
751
|
-
f"Book/{book_pk}/bca20547e94049e1ffea27223581c567022a5774.txt")
|
|
749
|
+
self.assertJEExists(response, 'local_file.key')
|
|
752
750
|
self.assertJE(response, 'local_file.name', 'test.txt')
|
|
753
751
|
self.assertJE(
|
|
754
752
|
response, 'local_file.url', f"/books/{book_pk}/local_file")
|
|
755
|
-
self.
|
|
756
|
-
|
|
757
|
-
'bca20547e94049e1ffea27223581c567022a5774.txt').exists())
|
|
753
|
+
key1 = self.get_val(response, 'local_file.key')
|
|
754
|
+
self.assertTrue(Path(f'/tmp/django-pfx-filestore/{key1}').exists())
|
|
758
755
|
|
|
759
756
|
# Replace file
|
|
760
757
|
response = self.client.put(f'/api/books/{book_pk}', dict(
|
|
@@ -763,25 +760,18 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
763
760
|
base64='data:text/plain;charset=utf-8;'
|
|
764
761
|
'base64,TmV3IGNvbnRlbnQ=')))
|
|
765
762
|
self.assertRC(response, 200)
|
|
766
|
-
self.
|
|
767
|
-
response, 'local_file.key',
|
|
768
|
-
f"Book/{book_pk}/af9f06b2b3b1546ac44f4a02994d0ef09e074b91.txt")
|
|
763
|
+
self.assertNJE(response, 'local_file.key', key1)
|
|
769
764
|
self.assertJE(response, 'local_file.name', 'test2.txt')
|
|
770
|
-
self.assertFalse(Path(
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
self.assertTrue(Path(
|
|
774
|
-
f'/tmp/django-pfx-filestore/Book/{book_pk}/'
|
|
775
|
-
'af9f06b2b3b1546ac44f4a02994d0ef09e074b91.txt').exists())
|
|
765
|
+
self.assertFalse(Path(f'/tmp/django-pfx-filestore/{key1}').exists())
|
|
766
|
+
key2 = self.get_val(response, 'local_file.key')
|
|
767
|
+
self.assertTrue(Path(f'/tmp/django-pfx-filestore/{key2}').exists())
|
|
776
768
|
|
|
777
769
|
# Delete file
|
|
778
770
|
response = self.client.put(f'/api/books/{book_pk}', dict(
|
|
779
771
|
local_file=None))
|
|
780
772
|
self.assertRC(response, 200)
|
|
781
773
|
self.assertJE(response, 'local_file', None)
|
|
782
|
-
self.assertFalse(Path(
|
|
783
|
-
f'/tmp/django-pfx-filestore/Book/{book_pk}/'
|
|
784
|
-
'af9f06b2b3b1546ac44f4a02994d0ef09e074b91.txt').exists())
|
|
774
|
+
self.assertFalse(Path(f'/tmp/django-pfx-filestore/{key2}').exists())
|
|
785
775
|
|
|
786
776
|
def test_create_null_values(self):
|
|
787
777
|
response = self.client.post(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev174 → django_pfx-1.4.dev178}/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
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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.dev174 → django_pfx-1.4.dev178}/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
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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
|
{django_pfx-1.4.dev174 → django_pfx-1.4.dev178}/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.dev174 → django_pfx-1.4.dev178}/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.dev174 → django_pfx-1.4.dev178}/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.dev174 → django_pfx-1.4.dev178}/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
|