django-pfx 1.4.dev116__tar.gz → 1.4.dev120__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.dev116 → django_pfx-1.4.dev120}/PKG-INFO +1 -1
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/decorator/rest.py +2 -1
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/pfx_models.py +3 -1
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/fields.py +17 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_fields_decimal.py +12 -2
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/.gitignore +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/LICENSE +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/README.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/Makefile +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/conf.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/index.rst +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/img/pfx.png +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/make_messages +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/manage.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/fields/nh3_field.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pyproject.toml +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/requirements.txt +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/serve-doc +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/setup.cfg +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/setup.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/apps.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/models.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/basic_api_test.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_fields_nh3.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/urls.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests/views.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/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.dev120
|
|
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.dev120
|
|
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
|
|
@@ -54,10 +54,11 @@ def rest_api(
|
|
|
54
54
|
return decorator
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
def rest_property(string=None, type="CharField"):
|
|
57
|
+
def rest_property(string=None, type="CharField", field=None):
|
|
58
58
|
def decorator(func):
|
|
59
59
|
func.short_description = string
|
|
60
60
|
func.field_type = type
|
|
61
|
+
func.field = field
|
|
61
62
|
return property(func)
|
|
62
63
|
return decorator
|
|
63
64
|
|
|
@@ -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
|
|
|
@@ -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):
|
|
@@ -173,6 +179,17 @@ class ViewField:
|
|
|
173
179
|
@classmethod
|
|
174
180
|
def from_property(cls, name, prop, **kwargs):
|
|
175
181
|
if hasattr(prop, 'fget'):
|
|
182
|
+
field = getattr(prop.fget, 'field', None)
|
|
183
|
+
if field:
|
|
184
|
+
setifnone(
|
|
185
|
+
kwargs, 'verbose_name',
|
|
186
|
+
cls._get_model_verbose_name(field))
|
|
187
|
+
setifnone(
|
|
188
|
+
kwargs, 'field_type',
|
|
189
|
+
FieldType.from_model_field(field.__class__))
|
|
190
|
+
kwargs['readonly'] = True
|
|
191
|
+
return ViewModelField(
|
|
192
|
+
name, model_field=field, **kwargs)
|
|
176
193
|
verbose_name = getattr(
|
|
177
194
|
prop.fget, 'short_description', prop.fget.__name__)
|
|
178
195
|
field_type = getattr(prop.fget, 'field_type', None)
|
|
@@ -6,7 +6,7 @@ from django.test.utils import override_settings
|
|
|
6
6
|
from django.urls import include, path
|
|
7
7
|
|
|
8
8
|
from pfx.pfxcore import register_views
|
|
9
|
-
from pfx.pfxcore.decorator import rest_view
|
|
9
|
+
from pfx.pfxcore.decorator import rest_property, rest_view
|
|
10
10
|
from pfx.pfxcore.fields import DecimalField
|
|
11
11
|
from pfx.pfxcore.models import JSONReprMixin
|
|
12
12
|
from pfx.pfxcore.test import APIClient, TestAssertMixin
|
|
@@ -23,6 +23,12 @@ class TestDecimalModel(JSONReprMixin, models.Model):
|
|
|
23
23
|
max_digits=10, decimal_places=5, json_decimal_places=2,
|
|
24
24
|
currency="CHF")
|
|
25
25
|
|
|
26
|
+
@rest_property(field=DecimalField(
|
|
27
|
+
max_digits=10, decimal_places=5, json_decimal_places=2,
|
|
28
|
+
currency="CHF"))
|
|
29
|
+
def price_double(self):
|
|
30
|
+
return Decimal(self.monetary * 2)
|
|
31
|
+
|
|
26
32
|
class Meta:
|
|
27
33
|
verbose_name = "TestModel"
|
|
28
34
|
verbose_name_plural = "TestModels"
|
|
@@ -33,7 +39,7 @@ class TestDecimalModel(JSONReprMixin, models.Model):
|
|
|
33
39
|
class DecimalModelRestView(FakeViewMixin, RestView):
|
|
34
40
|
default_public = True
|
|
35
41
|
model = TestDecimalModel
|
|
36
|
-
fields = ['decimal', 'percent', 'monetary']
|
|
42
|
+
fields = ['decimal', 'percent', 'monetary', 'price_double']
|
|
37
43
|
|
|
38
44
|
|
|
39
45
|
urlpatterns = [
|
|
@@ -62,6 +68,8 @@ class TestFieldsDecimal(TestAssertMixin, TestCase):
|
|
|
62
68
|
self.assertJE(response, 'fields.percent.currency', None)
|
|
63
69
|
self.assertJE(response, 'fields.monetary.percent', False)
|
|
64
70
|
self.assertJE(response, 'fields.monetary.currency', "CHF")
|
|
71
|
+
self.assertJE(response, 'fields.price_double.percent', False)
|
|
72
|
+
self.assertJE(response, 'fields.price_double.currency', "CHF")
|
|
65
73
|
|
|
66
74
|
def test_decimal(self):
|
|
67
75
|
t = TestDecimalModel.objects.create(
|
|
@@ -75,6 +83,8 @@ class TestFieldsDecimal(TestAssertMixin, TestCase):
|
|
|
75
83
|
self.assertRC(response, 200)
|
|
76
84
|
self.assertJE(response, 'decimal', "3.14")
|
|
77
85
|
self.assertJE(response, 'percent', "8.10")
|
|
86
|
+
self.assertJE(response, 'monetary', "100.00")
|
|
87
|
+
self.assertJE(response, 'price_double', "200.00")
|
|
78
88
|
|
|
79
89
|
response = self.client.put(f'/api/test-decimal-model/{t.pk}', dict(
|
|
80
90
|
decimal="3.12121",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev116 → django_pfx-1.4.dev120}/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
|
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev116 → django_pfx-1.4.dev120}/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.4.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/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.dev116 → django_pfx-1.4.dev120}/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
|