django-pfx 1.4.dev118__tar.gz → 1.4.dev122__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.dev118 → django_pfx-1.4.dev122}/PKG-INFO +1 -1
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +10 -5
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/pfx_models.py +3 -1
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/shortcuts.py +17 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/fields.py +6 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_shortcuts.py +28 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/.gitignore +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/LICENSE +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/README.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/Makefile +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/conf.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/index.rst +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/img/pfx.png +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/make_messages +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/manage.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/fields/nh3_field.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pyproject.toml +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/requirements.txt +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/serve-doc +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/setup.cfg +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/setup.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/apps.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/models.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/basic_api_test.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_fields_nh3.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/urls.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests/views.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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.dev122
|
|
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.dev122
|
|
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
|
|
Binary file
|
|
@@ -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-04-
|
|
10
|
+
"POT-Creation-Date: 2025-04-16 11:28+0200\n"
|
|
11
11
|
"PO-Revision-Date: 2021-06-22 23:31+0200\n"
|
|
12
12
|
"Last-Translator: \n"
|
|
13
13
|
"Language-Team: \n"
|
|
@@ -112,22 +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:51
|
|
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:67
|
|
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:83
|
|
126
|
+
#, python-brace-format
|
|
127
|
+
msgid "{key} must be a decimal number."
|
|
128
|
+
msgstr "{key} doit être un nombre décimal."
|
|
129
|
+
|
|
130
|
+
#: shortcuts.py:99
|
|
126
131
|
#, python-brace-format
|
|
127
132
|
msgid "{key} must be a date."
|
|
128
133
|
msgstr "{key} doit être une date."
|
|
129
134
|
|
|
130
|
-
#: shortcuts.py:
|
|
135
|
+
#: shortcuts.py:120
|
|
131
136
|
#, python-brace-format
|
|
132
137
|
msgid "{key} must be “true”, “false”, “1”, “0” or empty."
|
|
133
138
|
msgstr "{key} doit être « true », « false », « 1 », « 0 » ou vide"
|
|
@@ -24,6 +24,7 @@ class JSONReprMixin():
|
|
|
24
24
|
"""A model mixin to manage JSON representation."""
|
|
25
25
|
api = None
|
|
26
26
|
url = None
|
|
27
|
+
URL_AUTO_PK = True
|
|
27
28
|
apidoc = {}
|
|
28
29
|
|
|
29
30
|
def __init__(self, *args, **kw):
|
|
@@ -51,7 +52,8 @@ class JSONReprMixin():
|
|
|
51
52
|
res['resource_api'] = f"{self.api}/{self.pk}"
|
|
52
53
|
url = self.get_url()
|
|
53
54
|
if url:
|
|
54
|
-
res['resource_url'] =
|
|
55
|
+
res['resource_url'] = (
|
|
56
|
+
self.URL_AUTO_PK and f"{url}/{self.pk}" or url)
|
|
55
57
|
res.update(**values)
|
|
56
58
|
return res
|
|
57
59
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import logging
|
|
3
3
|
from datetime import date
|
|
4
|
+
from decimal import Decimal as D
|
|
4
5
|
|
|
5
6
|
from django.core.exceptions import ObjectDoesNotExist
|
|
6
7
|
from django.utils.translation import gettext_lazy as _
|
|
@@ -66,6 +67,22 @@ def get_float(data, key, default=None):
|
|
|
66
67
|
raise APIError(f(_("{key} must be a number."), key=key))
|
|
67
68
|
|
|
68
69
|
|
|
70
|
+
def parse_decimal(value):
|
|
71
|
+
if is_null(value):
|
|
72
|
+
return None
|
|
73
|
+
return D(value)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def get_decimal(data, key, default=None):
|
|
77
|
+
if key not in data:
|
|
78
|
+
return default
|
|
79
|
+
try:
|
|
80
|
+
return parse_decimal(data.get(key))
|
|
81
|
+
except Exception:
|
|
82
|
+
from pfx.pfxcore.exceptions import APIError
|
|
83
|
+
raise APIError(f(_("{key} must be a decimal number."), key=key))
|
|
84
|
+
|
|
85
|
+
|
|
69
86
|
def parse_date(value):
|
|
70
87
|
if is_null(value):
|
|
71
88
|
return None
|
|
@@ -56,6 +56,7 @@ class FieldType:
|
|
|
56
56
|
(models.URLField, CharField),
|
|
57
57
|
(models.UUIDField, CharField),
|
|
58
58
|
(models.ForeignObject, ModelObject),
|
|
59
|
+
(models.OneToOneRel, ModelObject),
|
|
59
60
|
(models.ForeignObjectRel, ModelObjectList),
|
|
60
61
|
(models.ManyToManyField, ModelObjectList),
|
|
61
62
|
(models.JSONField, JsonObject),
|
|
@@ -111,6 +112,7 @@ class ViewField:
|
|
|
111
112
|
self.related_model_api = related_model_api
|
|
112
113
|
self.select_related = select_related or []
|
|
113
114
|
self.prefetch_related = prefetch_related or []
|
|
115
|
+
self.model_field = None
|
|
114
116
|
|
|
115
117
|
def is_readonly(self, created=False):
|
|
116
118
|
return self.readonly_create if created else self.readonly_update
|
|
@@ -136,6 +138,10 @@ class ViewField:
|
|
|
136
138
|
obj = operator.attrgetter(path)(obj)
|
|
137
139
|
else:
|
|
138
140
|
name = self.name
|
|
141
|
+
if (self.model_field and
|
|
142
|
+
'reverse_related' in str(type(self.model_field)) and
|
|
143
|
+
not hasattr(obj, name)):
|
|
144
|
+
return None
|
|
139
145
|
return getattr(obj, name)
|
|
140
146
|
|
|
141
147
|
def _json_repr(self, value):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from datetime import date
|
|
2
|
+
from decimal import Decimal as D
|
|
2
3
|
|
|
3
4
|
from django.test import TestCase
|
|
4
5
|
|
|
@@ -7,6 +8,7 @@ from pfx.pfxcore.shortcuts import (
|
|
|
7
8
|
f,
|
|
8
9
|
get_bool,
|
|
9
10
|
get_date,
|
|
11
|
+
get_decimal,
|
|
10
12
|
get_float,
|
|
11
13
|
get_int,
|
|
12
14
|
get_object,
|
|
@@ -157,6 +159,32 @@ class ShortcutTest(TestAssertMixin, TestCase):
|
|
|
157
159
|
self.assertEqual(get_float(
|
|
158
160
|
vals, 'does_not_exists', default=3.14159265359), 3.14159265359)
|
|
159
161
|
|
|
162
|
+
def test_get_decimal(self):
|
|
163
|
+
vals = dict(
|
|
164
|
+
none=None,
|
|
165
|
+
empty='',
|
|
166
|
+
null='null',
|
|
167
|
+
undefined='undefined',
|
|
168
|
+
zero='0',
|
|
169
|
+
integer='3',
|
|
170
|
+
negative='-7.45',
|
|
171
|
+
positive='13.57',
|
|
172
|
+
invalid='INVALID')
|
|
173
|
+
self.assertIsNone(get_decimal(vals, 'none'))
|
|
174
|
+
self.assertIsNone(get_decimal(vals, 'empty'))
|
|
175
|
+
self.assertIsNone(get_decimal(vals, 'null'))
|
|
176
|
+
self.assertIsNone(get_decimal(vals, 'undefined'))
|
|
177
|
+
self.assertEqual(get_decimal(vals, 'zero'), D('0'))
|
|
178
|
+
self.assertEqual(get_decimal(vals, 'integer'), D('3'))
|
|
179
|
+
self.assertEqual(get_decimal(vals, 'negative'), D('-7.45'))
|
|
180
|
+
self.assertEqual(get_decimal(vals, 'positive'), D('13.57'))
|
|
181
|
+
with self.assertRaises(APIError):
|
|
182
|
+
get_decimal(vals, 'invalid')
|
|
183
|
+
self.assertIs(get_decimal(vals, 'does_not_exists'), None)
|
|
184
|
+
self.assertEqual(get_decimal(
|
|
185
|
+
vals, 'does_not_exists',
|
|
186
|
+
default=D('3.14159265359')), D('3.14159265359'))
|
|
187
|
+
|
|
160
188
|
def test_parse_date(self):
|
|
161
189
|
self.assertIsNone(parse_date(None))
|
|
162
190
|
self.assertIsNone(parse_date(''))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev118 → django_pfx-1.4.dev122}/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
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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.dev118 → django_pfx-1.4.dev122}/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.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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.dev118 → django_pfx-1.4.dev122}/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
|
{django_pfx-1.4.dev118 → django_pfx-1.4.dev122}/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.dev118 → django_pfx-1.4.dev122}/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.dev118 → django_pfx-1.4.dev122}/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
|