django-pfx 1.4.dev156__tar.gz → 1.4.dev160__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.dev156 → django_pfx-1.4.dev160}/PKG-INFO +1 -1
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +5 -5
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/rest_views.py +46 -9
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/basic_api_test.py +25 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/.gitignore +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/LICENSE +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/README.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/Makefile +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/conf.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/index.rst +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/img/pfx.png +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/make_messages +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/manage.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/fields.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pyproject.toml +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/requirements.txt +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/serve-doc +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/setup.cfg +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/setup.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/apps.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/models.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/urls.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests/views.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/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.dev160
|
|
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.dev160
|
|
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: 2025-
|
|
10
|
+
"POT-Creation-Date: 2025-10-22 16:49+0200\n"
|
|
11
11
|
"PO-Revision-Date: 2021-06-22 23:31+0200\n"
|
|
12
12
|
"Last-Translator: \n"
|
|
13
13
|
"Language-Team: \n"
|
|
@@ -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:
|
|
289
|
+
#: views/rest_views.py:221 views/rest_views.py:387
|
|
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:351
|
|
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:352
|
|
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:1261
|
|
306
306
|
#, python-brace-format
|
|
307
307
|
msgid "{model} {obj} deleted."
|
|
308
308
|
msgstr "{model} {obj} supprimé."
|
|
@@ -6,9 +6,10 @@ from json import JSONDecodeError
|
|
|
6
6
|
from django.conf import settings
|
|
7
7
|
from django.core.cache import cache
|
|
8
8
|
from django.core.exceptions import FieldError, ValidationError
|
|
9
|
-
from django.db import IntegrityError, transaction
|
|
10
|
-
from django.db.models import ForeignKey, ManyToOneRel, Model, Q
|
|
9
|
+
from django.db import IntegrityError, connection, transaction
|
|
10
|
+
from django.db.models import F, ForeignKey, ManyToOneRel, Model, Q, Window
|
|
11
11
|
from django.db.models.fields import AutoFieldMixin
|
|
12
|
+
from django.db.models.functions import Lag, Lead, RowNumber
|
|
12
13
|
from django.urls import path
|
|
13
14
|
from django.utils.translation import gettext_lazy as _
|
|
14
15
|
from django.views import View
|
|
@@ -280,6 +281,9 @@ class ModelResponseMixin(ModelMixin):
|
|
|
280
281
|
vals.update(fields)
|
|
281
282
|
return vals
|
|
282
283
|
|
|
284
|
+
def get_navigation_meta(self, obj):
|
|
285
|
+
raise APIError("navigation data are only available on list view.")
|
|
286
|
+
|
|
283
287
|
def response(self, o, **meta):
|
|
284
288
|
"""Build a :class:`JsonResponse` from an object instance.
|
|
285
289
|
|
|
@@ -288,6 +292,8 @@ class ModelResponseMixin(ModelMixin):
|
|
|
288
292
|
:returns: The JSON response
|
|
289
293
|
:rtype: :class:`JsonResponse`
|
|
290
294
|
"""
|
|
295
|
+
if get_bool(self.request.GET, 'navigation'):
|
|
296
|
+
meta.update(self.get_navigation_meta(o))
|
|
291
297
|
return JsonResponse(self.serialize_object(o, **{
|
|
292
298
|
_f.alias: _f.to_json(o, self)
|
|
293
299
|
for _f in self.get_fields().values()}, meta=meta))
|
|
@@ -742,6 +748,14 @@ class ListRestViewMixin(ModelResponseMixin):
|
|
|
742
748
|
order = self.request.GET.get('order')
|
|
743
749
|
return order and [apply(o) for o in order.split(',')] or order
|
|
744
750
|
|
|
751
|
+
def get_order(self):
|
|
752
|
+
order = (
|
|
753
|
+
self.get_query_order() or self.default_order or
|
|
754
|
+
self.model._meta.ordering)
|
|
755
|
+
if 'pk' not in order:
|
|
756
|
+
order.append('pk')
|
|
757
|
+
return order
|
|
758
|
+
|
|
745
759
|
def apply_view_order(self, qs):
|
|
746
760
|
"""Apply view order on queryset.
|
|
747
761
|
|
|
@@ -750,13 +764,10 @@ class ListRestViewMixin(ModelResponseMixin):
|
|
|
750
764
|
:returns: The ordered queryset
|
|
751
765
|
:rtype: :class:`django.db.models.QuerySet`
|
|
752
766
|
"""
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
except FieldError as e:
|
|
758
|
-
raise APIError(e.args[0])
|
|
759
|
-
return qs.order_by(*(self.default_order or self.model._meta.ordering))
|
|
767
|
+
try:
|
|
768
|
+
return qs.order_by(*self.get_order())
|
|
769
|
+
except FieldError as e:
|
|
770
|
+
raise APIError(e.args[0])
|
|
760
771
|
|
|
761
772
|
def get_list_queryset(self, select_related=None, prefetch_related=None):
|
|
762
773
|
"""Get list queryset.
|
|
@@ -937,6 +948,32 @@ class ListRestViewMixin(ModelResponseMixin):
|
|
|
937
948
|
|
|
938
949
|
return self._get_list(*args, **kwargs)
|
|
939
950
|
|
|
951
|
+
def get_navigation_meta(self, obj):
|
|
952
|
+
qs = self.get_list_queryset()
|
|
953
|
+
order = qs.query.order_by
|
|
954
|
+
qs_window = qs.annotate(
|
|
955
|
+
prev_id=Window(Lag('id'), order_by=order),
|
|
956
|
+
next_id=Window(Lead('id'), order_by=order),
|
|
957
|
+
index=Window(RowNumber(), order_by=order)).values(
|
|
958
|
+
'prev_id', 'next_id', 'index', obj_id=F('id'))
|
|
959
|
+
compiler = qs_window.query.get_compiler(connection=connection)
|
|
960
|
+
inner_sql, params = compiler.as_sql()
|
|
961
|
+
sql = f"""
|
|
962
|
+
WITH annotated AS ({inner_sql})
|
|
963
|
+
SELECT prev_id, next_id, index
|
|
964
|
+
FROM annotated
|
|
965
|
+
WHERE obj_id = %s;
|
|
966
|
+
"""
|
|
967
|
+
|
|
968
|
+
with connection.cursor() as cursor:
|
|
969
|
+
cursor.execute(sql, list(params) + [obj.pk])
|
|
970
|
+
prev_id, next_id, index = cursor.fetchone() or (None, None)
|
|
971
|
+
return {
|
|
972
|
+
'previous_pk': prev_id or qs.last().pk,
|
|
973
|
+
'next_pk': next_id or qs.first().pk,
|
|
974
|
+
'index': index,
|
|
975
|
+
'count': qs.count()}
|
|
976
|
+
|
|
940
977
|
@classmethod
|
|
941
978
|
def generate_schemas(cls):
|
|
942
979
|
"""Generate schemas for the class.
|
|
@@ -632,6 +632,31 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
632
632
|
self.assertJE(response, 'gender.value', 'male')
|
|
633
633
|
self.assertJE(response, 'gender.label', 'Male')
|
|
634
634
|
|
|
635
|
+
def test_get_detail_navigation_meta(self):
|
|
636
|
+
response = self.client.get(
|
|
637
|
+
f'/api/authors/{self.author3.pk}?navigation=1&order=last_name')
|
|
638
|
+
self.assertRC(response, 200)
|
|
639
|
+
self.assertJE(response, 'meta.previous_pk', self.author1.pk)
|
|
640
|
+
self.assertJE(response, 'meta.next_pk', self.author2.pk)
|
|
641
|
+
self.assertJE(response, 'meta.index', 1)
|
|
642
|
+
self.assertJE(response, 'meta.count', 4)
|
|
643
|
+
|
|
644
|
+
response = self.client.get(
|
|
645
|
+
f'/api/authors/{self.author2.pk}?navigation=1&order=last_name')
|
|
646
|
+
self.assertRC(response, 200)
|
|
647
|
+
self.assertJE(response, 'meta.previous_pk', self.author3.pk)
|
|
648
|
+
self.assertJE(response, 'meta.next_pk', self.author4.pk)
|
|
649
|
+
self.assertJE(response, 'meta.index', 2)
|
|
650
|
+
self.assertJE(response, 'meta.count', 4)
|
|
651
|
+
|
|
652
|
+
response = self.client.get(
|
|
653
|
+
f'/api/authors/{self.author2.pk}?navigation=1&order=-last_name')
|
|
654
|
+
self.assertRC(response, 200)
|
|
655
|
+
self.assertJE(response, 'meta.previous_pk', self.author4.pk)
|
|
656
|
+
self.assertJE(response, 'meta.next_pk', self.author3.pk)
|
|
657
|
+
self.assertJE(response, 'meta.index', 3)
|
|
658
|
+
self.assertJE(response, 'meta.count', 4)
|
|
659
|
+
|
|
635
660
|
def test_get_date_format(self):
|
|
636
661
|
response = self.client.get(f'/api/books/{self.author1_book1.pk}')
|
|
637
662
|
self.assertRC(response, 200)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/models/user_filtered_queryset_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/templates/registration/welcome_email.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/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.dev156 → django_pfx-1.4.dev160}/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
|