django-pfx 1.7.2.dev4__tar.gz → 1.7.2.dev8__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.2.dev4 → django_pfx-1.7.2.dev8}/PKG-INFO +1 -1
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +5 -5
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/ordered_model_mixin.py +3 -1
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/pfx_models.py +1 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/rest_views.py +13 -3
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/basic_api_test.py +51 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_ordered_rest_view_mixin.py +18 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/.gitignore +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/.gitlab-ci.yml +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/LICENSE +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/MANIFEST.in +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/README.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/Makefile +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/conf.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/index.rst +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/api.views.rst +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/authentication.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/decorator.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/getting_started.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/model.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/profiling.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/settings.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/doc/source/testing.md +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/img/pfx.png +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/img/pfx.svg +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/make_messages +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/manage.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/fields.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/settings/dev.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pyproject.toml +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/requirements.txt +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/serve-doc +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/setup.cfg +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/setup.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/apps.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/models.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/settings/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/settings/ci.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/settings/common.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/settings/dev.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_client.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/urls.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests/views.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/urls.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_base_user/views.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/models.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.
|
|
3
|
+
Version: 1.7.2.dev8
|
|
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.2.
|
|
3
|
+
Version: 1.7.2.dev8
|
|
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: 2026-04-
|
|
10
|
+
"POT-Creation-Date: 2026-04-20 13:42+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:228 views/rest_views.py:
|
|
289
|
+
#: views/rest_views.py:228 views/rest_views.py:400
|
|
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:364
|
|
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:365
|
|
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:1299
|
|
306
306
|
#, python-brace-format
|
|
307
307
|
msgid "{model} {obj} deleted."
|
|
308
308
|
msgstr "{model} {obj} supprimé."
|
|
@@ -25,10 +25,12 @@ class OrderedModelMixin(models.Model):
|
|
|
25
25
|
super().clean_fields(exclude=exclude)
|
|
26
26
|
|
|
27
27
|
def save(self, *args, **kwargs):
|
|
28
|
+
created = bool(self.pk)
|
|
28
29
|
if not self.seq:
|
|
29
30
|
self.seq = self._order_default
|
|
30
31
|
super().save(*args, **kwargs)
|
|
31
|
-
if
|
|
32
|
+
if (not created and
|
|
33
|
+
self.__previous_ordered_by_values != self._ordered_by_values):
|
|
32
34
|
if self.ordered_default == 'first':
|
|
33
35
|
self.top()
|
|
34
36
|
else:
|
|
@@ -256,6 +256,8 @@ class ModelMixin():
|
|
|
256
256
|
|
|
257
257
|
class ModelResponseMixin(ModelMixin):
|
|
258
258
|
"""Extension of :class:`ModelMixin` to manage object responses."""
|
|
259
|
+
#: Define if list navigation is looping (None is model default).
|
|
260
|
+
navigation_loop = None
|
|
259
261
|
#: The response schema for meta service.
|
|
260
262
|
meta_schema = None
|
|
261
263
|
#: The model schema.
|
|
@@ -288,6 +290,11 @@ class ModelResponseMixin(ModelMixin):
|
|
|
288
290
|
vals.update(fields)
|
|
289
291
|
return vals
|
|
290
292
|
|
|
293
|
+
def is_navigation_loop(self):
|
|
294
|
+
if self.navigation_loop is None:
|
|
295
|
+
return getattr(self.model, 'api_navigation_loop', True)
|
|
296
|
+
return self.navigation_loop
|
|
297
|
+
|
|
291
298
|
def get_navigation_meta(self, obj):
|
|
292
299
|
return {}
|
|
293
300
|
|
|
@@ -995,10 +1002,13 @@ class ListRestViewMixin(ModelResponseMixin):
|
|
|
995
1002
|
if not row:
|
|
996
1003
|
return {}
|
|
997
1004
|
|
|
998
|
-
|
|
1005
|
+
prev_pk, next_pk, index = row
|
|
1006
|
+
if self.is_navigation_loop():
|
|
1007
|
+
prev_pk = prev_pk or qs.last().pk
|
|
1008
|
+
next_pk = next_pk or qs.first().pk
|
|
999
1009
|
return {
|
|
1000
|
-
'previous_pk':
|
|
1001
|
-
'next_pk':
|
|
1010
|
+
'previous_pk': prev_pk,
|
|
1011
|
+
'next_pk': next_pk,
|
|
1002
1012
|
'index': index,
|
|
1003
1013
|
'count': qs.count()}
|
|
1004
1014
|
|
|
@@ -6,6 +6,7 @@ from django.db import connection
|
|
|
6
6
|
from django.test import TestCase, override_settings
|
|
7
7
|
|
|
8
8
|
from pfx.pfxcore.test import APIClient, MockBoto3Client, TestAssertMixin
|
|
9
|
+
from tests import views
|
|
9
10
|
from tests.models import Author, Book, BookType
|
|
10
11
|
|
|
11
12
|
|
|
@@ -657,6 +658,56 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
657
658
|
self.assertJE(response, 'meta.index', 3)
|
|
658
659
|
self.assertJE(response, 'meta.count', 4)
|
|
659
660
|
|
|
661
|
+
# Check looping by default
|
|
662
|
+
response = self.client.get(
|
|
663
|
+
f'/api/authors/{self.author1.pk}?navigation=1&order=last_name')
|
|
664
|
+
self.assertRC(response, 200)
|
|
665
|
+
self.assertJE(response, 'meta.previous_pk', self.author4.pk)
|
|
666
|
+
self.assertJE(response, 'meta.next_pk', self.author3.pk)
|
|
667
|
+
self.assertJE(response, 'meta.index', 4)
|
|
668
|
+
self.assertJE(response, 'meta.count', 4)
|
|
669
|
+
response = self.client.get(
|
|
670
|
+
f'/api/authors/{self.author3.pk}?navigation=1&order=last_name')
|
|
671
|
+
self.assertRC(response, 200)
|
|
672
|
+
self.assertJE(response, 'meta.previous_pk', self.author1.pk)
|
|
673
|
+
self.assertJE(response, 'meta.next_pk', self.author2.pk)
|
|
674
|
+
self.assertJE(response, 'meta.index', 1)
|
|
675
|
+
self.assertJE(response, 'meta.count', 4)
|
|
676
|
+
|
|
677
|
+
# Check looping disabled by model
|
|
678
|
+
with patch.object(views.Author, "api_navigation_loop", False):
|
|
679
|
+
response = self.client.get(
|
|
680
|
+
f'/api/authors/{self.author1.pk}?navigation=1&order=last_name')
|
|
681
|
+
self.assertRC(response, 200)
|
|
682
|
+
self.assertJE(response, 'meta.previous_pk', self.author4.pk)
|
|
683
|
+
self.assertJE(response, 'meta.next_pk', None)
|
|
684
|
+
self.assertJE(response, 'meta.index', 4)
|
|
685
|
+
self.assertJE(response, 'meta.count', 4)
|
|
686
|
+
response = self.client.get(
|
|
687
|
+
f'/api/authors/{self.author3.pk}?navigation=1&order=last_name')
|
|
688
|
+
self.assertRC(response, 200)
|
|
689
|
+
self.assertJE(response, 'meta.previous_pk', None)
|
|
690
|
+
self.assertJE(response, 'meta.next_pk', self.author2.pk)
|
|
691
|
+
self.assertJE(response, 'meta.index', 1)
|
|
692
|
+
self.assertJE(response, 'meta.count', 4)
|
|
693
|
+
|
|
694
|
+
# Check looping disabled by view
|
|
695
|
+
with patch.object(views.AuthorRestView, "navigation_loop", False):
|
|
696
|
+
response = self.client.get(
|
|
697
|
+
f'/api/authors/{self.author1.pk}?navigation=1&order=last_name')
|
|
698
|
+
self.assertRC(response, 200)
|
|
699
|
+
self.assertJE(response, 'meta.previous_pk', self.author4.pk)
|
|
700
|
+
self.assertJE(response, 'meta.next_pk', None)
|
|
701
|
+
self.assertJE(response, 'meta.index', 4)
|
|
702
|
+
self.assertJE(response, 'meta.count', 4)
|
|
703
|
+
response = self.client.get(
|
|
704
|
+
f'/api/authors/{self.author3.pk}?navigation=1&order=last_name')
|
|
705
|
+
self.assertRC(response, 200)
|
|
706
|
+
self.assertJE(response, 'meta.previous_pk', None)
|
|
707
|
+
self.assertJE(response, 'meta.next_pk', self.author2.pk)
|
|
708
|
+
self.assertJE(response, 'meta.index', 1)
|
|
709
|
+
self.assertJE(response, 'meta.count', 4)
|
|
710
|
+
|
|
660
711
|
def test_get_date_format(self):
|
|
661
712
|
response = self.client.get(f'/api/books/{self.author1_book1.pk}')
|
|
662
713
|
self.assertRC(response, 200)
|
|
@@ -316,6 +316,15 @@ class TestOrderedRestViewMixin(TestAssertMixin, TestCase):
|
|
|
316
316
|
order(OrderedModel),
|
|
317
317
|
[self.o3.pk, self.o1.pk, self.o2.pk])
|
|
318
318
|
|
|
319
|
+
response = self.client.post(
|
|
320
|
+
'/api/ordered?move=top', {'name': "Test"})
|
|
321
|
+
self.assertRC(response, 200)
|
|
322
|
+
o4_pk = self.get_val(response, 'pk')
|
|
323
|
+
|
|
324
|
+
self.assertEqual(
|
|
325
|
+
order(OrderedModel),
|
|
326
|
+
[o4_pk, self.o3.pk, self.o1.pk, self.o2.pk])
|
|
327
|
+
|
|
319
328
|
def test_top_by_name(self):
|
|
320
329
|
response = self.client.put(
|
|
321
330
|
f'/api/ordered-by-name/{self.obn3.pk}?move=top', {})
|
|
@@ -370,6 +379,15 @@ class TestOrderedRestViewMixin(TestAssertMixin, TestCase):
|
|
|
370
379
|
order(OrderedModel),
|
|
371
380
|
[self.o2.pk, self.o3.pk, self.o1.pk])
|
|
372
381
|
|
|
382
|
+
response = self.client.post(
|
|
383
|
+
'/api/ordered?move=bottom', {'name': "Test"})
|
|
384
|
+
self.assertRC(response, 200)
|
|
385
|
+
o4_pk = self.get_val(response, 'pk')
|
|
386
|
+
|
|
387
|
+
self.assertEqual(
|
|
388
|
+
order(OrderedModel),
|
|
389
|
+
[self.o2.pk, self.o3.pk, self.o1.pk, o4_pk])
|
|
390
|
+
|
|
373
391
|
def test_bottom_by_name(self):
|
|
374
392
|
response = self.client.put(
|
|
375
393
|
f'/api/ordered-by-name/{self.obn2.pk}?move=bottom', {})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/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
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/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
|
{django_pfx-1.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/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.7.2.dev4 → django_pfx-1.7.2.dev8}/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
|