django-pfx 1.4.dev114__tar.gz → 1.4.dev118__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.dev114 → django_pfx-1.4.dev118}/PKG-INFO +1 -1
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/decorator/rest.py +2 -1
- django_pfx-1.4.dev118/pfx/pfxcore/fields/decimal_field.py +33 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/fields.py +15 -0
- django_pfx-1.4.dev118/tests/tests/test_fields_decimal.py +99 -0
- django_pfx-1.4.dev114/pfx/pfxcore/fields/decimal_field.py +0 -15
- django_pfx-1.4.dev114/tests/tests/test_fields_decimal.py +0 -59
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/.gitignore +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/LICENSE +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/README.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/Makefile +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/conf.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/index.rst +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/img/pfx.png +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/make_messages +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/manage.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/fields/nh3_field.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pyproject.toml +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/requirements.txt +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/serve-doc +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/setup.cfg +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/setup.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/apps.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/models.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/basic_api_test.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_fields_nh3.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/urls.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests/views.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/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.dev118
|
|
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.dev118
|
|
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
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from decimal import Decimal
|
|
2
|
+
|
|
3
|
+
from django.db import models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class DecimalField(models.DecimalField):
|
|
7
|
+
def __init__(
|
|
8
|
+
self, *args, percent=False, currency=None,
|
|
9
|
+
json_decimal_places=None, **kw):
|
|
10
|
+
super().__init__(*args, **kw)
|
|
11
|
+
self.percent = percent
|
|
12
|
+
self.currency = currency
|
|
13
|
+
self.json_quantize = Decimal(10) ** -(json_decimal_places or (
|
|
14
|
+
percent and self.decimal_places - 2 or self.decimal_places))
|
|
15
|
+
|
|
16
|
+
def to_json_meta(self, meta):
|
|
17
|
+
meta.update(
|
|
18
|
+
percent=self.percent,
|
|
19
|
+
currency=self.currency)
|
|
20
|
+
return meta
|
|
21
|
+
|
|
22
|
+
def to_json(self, value):
|
|
23
|
+
if value is None:
|
|
24
|
+
return None
|
|
25
|
+
if self.percent:
|
|
26
|
+
value *= Decimal(100)
|
|
27
|
+
return value.quantize(self.json_quantize)
|
|
28
|
+
|
|
29
|
+
def from_json(self, value):
|
|
30
|
+
if value is None:
|
|
31
|
+
return None
|
|
32
|
+
value = Decimal(value)
|
|
33
|
+
return self.percent and value / Decimal(100) or value
|
|
@@ -173,6 +173,17 @@ class ViewField:
|
|
|
173
173
|
@classmethod
|
|
174
174
|
def from_property(cls, name, prop, **kwargs):
|
|
175
175
|
if hasattr(prop, 'fget'):
|
|
176
|
+
field = getattr(prop.fget, 'field', None)
|
|
177
|
+
if field:
|
|
178
|
+
setifnone(
|
|
179
|
+
kwargs, 'verbose_name',
|
|
180
|
+
cls._get_model_verbose_name(field))
|
|
181
|
+
setifnone(
|
|
182
|
+
kwargs, 'field_type',
|
|
183
|
+
FieldType.from_model_field(field.__class__))
|
|
184
|
+
kwargs['readonly'] = True
|
|
185
|
+
return ViewModelField(
|
|
186
|
+
name, model_field=field, **kwargs)
|
|
176
187
|
verbose_name = getattr(
|
|
177
188
|
prop.fget, 'short_description', prop.fget.__name__)
|
|
178
189
|
field_type = getattr(prop.fget, 'field_type', None)
|
|
@@ -332,6 +343,8 @@ class ViewModelField(ViewField):
|
|
|
332
343
|
res['required'] = not (
|
|
333
344
|
getattr(self.model_field, 'null', False) or
|
|
334
345
|
getattr(self.model_field, 'blank', False))
|
|
346
|
+
if hasattr(self.model_field, 'to_json_meta'):
|
|
347
|
+
res = self.model_field.to_json_meta(res)
|
|
335
348
|
return res
|
|
336
349
|
|
|
337
350
|
def to_model_value(self, value, get_related_queryset):
|
|
@@ -346,6 +359,8 @@ class ViewModelField(ViewField):
|
|
|
346
359
|
value = _get_obj(value)
|
|
347
360
|
elif self.field_type == FieldType.ModelObjectList:
|
|
348
361
|
value = ModelList(_get_obj(v) for v in value)
|
|
362
|
+
elif hasattr(field, 'from_json'):
|
|
363
|
+
value = field.from_json(value)
|
|
349
364
|
elif hasattr(field, 'choices') and field.choices:
|
|
350
365
|
value = (value['value']
|
|
351
366
|
if isinstance(value, dict) and 'value' in value
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
from decimal import Decimal
|
|
2
|
+
|
|
3
|
+
from django.db import connection, models
|
|
4
|
+
from django.test import TestCase
|
|
5
|
+
from django.test.utils import override_settings
|
|
6
|
+
from django.urls import include, path
|
|
7
|
+
|
|
8
|
+
from pfx.pfxcore import register_views
|
|
9
|
+
from pfx.pfxcore.decorator import rest_property, rest_view
|
|
10
|
+
from pfx.pfxcore.fields import DecimalField
|
|
11
|
+
from pfx.pfxcore.models import JSONReprMixin
|
|
12
|
+
from pfx.pfxcore.test import APIClient, TestAssertMixin
|
|
13
|
+
from pfx.pfxcore.views import RestView
|
|
14
|
+
from tests.views import FakeViewMixin
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TestDecimalModel(JSONReprMixin, models.Model):
|
|
18
|
+
decimal = DecimalField(
|
|
19
|
+
max_digits=10, decimal_places=5, json_decimal_places=2)
|
|
20
|
+
percent = DecimalField(
|
|
21
|
+
max_digits=10, decimal_places=4, percent=True)
|
|
22
|
+
monetary = DecimalField(
|
|
23
|
+
max_digits=10, decimal_places=5, json_decimal_places=2,
|
|
24
|
+
currency="CHF")
|
|
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
|
+
|
|
32
|
+
class Meta:
|
|
33
|
+
verbose_name = "TestModel"
|
|
34
|
+
verbose_name_plural = "TestModels"
|
|
35
|
+
ordering = ['pk']
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@rest_view("/test-decimal-model")
|
|
39
|
+
class DecimalModelRestView(FakeViewMixin, RestView):
|
|
40
|
+
default_public = True
|
|
41
|
+
model = TestDecimalModel
|
|
42
|
+
fields = ['decimal', 'percent', 'monetary', 'price_double']
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
urlpatterns = [
|
|
46
|
+
path('api/', include(register_views(DecimalModelRestView))),
|
|
47
|
+
path('api/', include('pfx.pfxcore.urls'))
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@override_settings(ROOT_URLCONF=__name__)
|
|
52
|
+
class TestFieldsDecimal(TestAssertMixin, TestCase):
|
|
53
|
+
|
|
54
|
+
def setUp(self):
|
|
55
|
+
self.client = APIClient(default_locale='en')
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def setUpTestData(cls):
|
|
59
|
+
with connection.schema_editor() as schema_editor:
|
|
60
|
+
schema_editor.create_model(TestDecimalModel)
|
|
61
|
+
|
|
62
|
+
def test_decimal_meta(self):
|
|
63
|
+
response = self.client.get('/api/test-decimal-model/meta')
|
|
64
|
+
self.assertRC(response, 200)
|
|
65
|
+
self.assertJE(response, 'fields.decimal.percent', False)
|
|
66
|
+
self.assertJE(response, 'fields.decimal.currency', None)
|
|
67
|
+
self.assertJE(response, 'fields.percent.percent', True)
|
|
68
|
+
self.assertJE(response, 'fields.percent.currency', None)
|
|
69
|
+
self.assertJE(response, 'fields.monetary.percent', False)
|
|
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")
|
|
73
|
+
|
|
74
|
+
def test_decimal(self):
|
|
75
|
+
t = TestDecimalModel.objects.create(
|
|
76
|
+
decimal=3.14, percent=0.0810, monetary=100)
|
|
77
|
+
t.save()
|
|
78
|
+
t.refresh_from_db()
|
|
79
|
+
self.assertEqual(t.decimal, Decimal('3.14000'))
|
|
80
|
+
self.assertEqual(t.percent, Decimal('0.0810'))
|
|
81
|
+
|
|
82
|
+
response = self.client.get(f'/api/test-decimal-model/{t.pk}')
|
|
83
|
+
self.assertRC(response, 200)
|
|
84
|
+
self.assertJE(response, 'decimal', "3.14")
|
|
85
|
+
self.assertJE(response, 'percent', "8.10")
|
|
86
|
+
self.assertJE(response, 'monetary', "100.00")
|
|
87
|
+
self.assertJE(response, 'price_double', "200.00")
|
|
88
|
+
|
|
89
|
+
response = self.client.put(f'/api/test-decimal-model/{t.pk}', dict(
|
|
90
|
+
decimal="3.12121",
|
|
91
|
+
percent="7.7",
|
|
92
|
+
))
|
|
93
|
+
self.assertRC(response, 200)
|
|
94
|
+
self.assertJE(response, 'decimal', "3.12")
|
|
95
|
+
self.assertJE(response, 'percent', "7.70")
|
|
96
|
+
|
|
97
|
+
t.refresh_from_db()
|
|
98
|
+
self.assertEqual(t.decimal, Decimal('3.12121'))
|
|
99
|
+
self.assertEqual(t.percent, Decimal('0.0770'))
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from decimal import Decimal
|
|
2
|
-
|
|
3
|
-
from django.db import models
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class DecimalField(models.DecimalField):
|
|
7
|
-
def __init__(self, *args, json_decimal_places=None, **kw):
|
|
8
|
-
super().__init__(*args, **kw)
|
|
9
|
-
self.json_quantize = Decimal(10) ** -(
|
|
10
|
-
json_decimal_places or self.decimal_places)
|
|
11
|
-
|
|
12
|
-
def to_json(self, value):
|
|
13
|
-
if value is None:
|
|
14
|
-
return None
|
|
15
|
-
return value.quantize(self.json_quantize)
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
from decimal import Decimal
|
|
2
|
-
|
|
3
|
-
from django.db import connection, models
|
|
4
|
-
from django.test import TestCase
|
|
5
|
-
from django.test.utils import override_settings
|
|
6
|
-
from django.urls import include, path
|
|
7
|
-
|
|
8
|
-
from pfx.pfxcore import register_views
|
|
9
|
-
from pfx.pfxcore.decorator import rest_view
|
|
10
|
-
from pfx.pfxcore.fields import DecimalField
|
|
11
|
-
from pfx.pfxcore.models import JSONReprMixin
|
|
12
|
-
from pfx.pfxcore.test import APIClient, TestAssertMixin
|
|
13
|
-
from pfx.pfxcore.views import RestView
|
|
14
|
-
from tests.views import FakeViewMixin
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class TestDecimalModel(JSONReprMixin, models.Model):
|
|
18
|
-
decimal = DecimalField(
|
|
19
|
-
max_digits=10, decimal_places=5, json_decimal_places=2)
|
|
20
|
-
|
|
21
|
-
class Meta:
|
|
22
|
-
verbose_name = "TestModel"
|
|
23
|
-
verbose_name_plural = "TestModels"
|
|
24
|
-
ordering = ['pk']
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@rest_view("/test-decimal-model")
|
|
28
|
-
class DecimalModelRestView(FakeViewMixin, RestView):
|
|
29
|
-
default_public = True
|
|
30
|
-
model = TestDecimalModel
|
|
31
|
-
fields = ['decimal']
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
urlpatterns = [
|
|
35
|
-
path('api/', include(register_views(DecimalModelRestView))),
|
|
36
|
-
path('api/', include('pfx.pfxcore.urls'))
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
@override_settings(ROOT_URLCONF=__name__)
|
|
41
|
-
class TestFieldsDecimal(TestAssertMixin, TestCase):
|
|
42
|
-
|
|
43
|
-
def setUp(self):
|
|
44
|
-
self.client = APIClient(default_locale='en')
|
|
45
|
-
|
|
46
|
-
@classmethod
|
|
47
|
-
def setUpTestData(cls):
|
|
48
|
-
with connection.schema_editor() as schema_editor:
|
|
49
|
-
schema_editor.create_model(TestDecimalModel)
|
|
50
|
-
|
|
51
|
-
def test_decimal(self):
|
|
52
|
-
t = TestDecimalModel.objects.create(decimal=3.14)
|
|
53
|
-
t.save()
|
|
54
|
-
t.refresh_from_db()
|
|
55
|
-
self.assertEqual(t.decimal, Decimal('3.14000'))
|
|
56
|
-
|
|
57
|
-
response = self.client.get(f'/api/test-decimal-model/{t.pk}')
|
|
58
|
-
self.assertRC(response, 200)
|
|
59
|
-
self.assertJE(response, 'decimal', "3.14")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/models/abstract_pfx_base_user.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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.dev114 → django_pfx-1.4.dev118}/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
|