django-pfx 1.7.6.dev13__tar.gz → 1.7.6.dev15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/PKG-INFO +1 -1
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/django_pfx.egg-info/SOURCES.txt +1 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/django_pfx.egg-info/scm_file_list.json +1 -0
- django_pfx-1.7.6.dev15/django_pfx.egg-info/scm_version.json +8 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/pfx_views.md +5 -1
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/decorator/rest.py +4 -1
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/fields.py +14 -6
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/migrations/0001_initial.py +1 -1
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/models.py +5 -2
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/basic_api_test.py +7 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_api_doc.py +6 -0
- django_pfx-1.7.6.dev15/tests/tests/test_fields_help_text.py +35 -0
- django_pfx-1.7.6.dev13/django_pfx.egg-info/scm_version.json +0 -8
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/.gitignore +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/.gitlab-ci.yml +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/LICENSE +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/MANIFEST.in +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/README.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/Makefile +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/conf.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/index.rst +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/api.views.rst +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/authentication.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/decorator.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/getting_started.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/model.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/profiling.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/settings.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/testing.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/doc/source/user_jobs.md +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/img/pfx.png +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/img/pfx.svg +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/make_messages +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/manage.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/apps.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/email_backend/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/email_backend/q_mailjet_email_backend.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/exceptions.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/mailjet/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/mailjet/mailjet.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/mailjet/message_result.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/0002_alter_email_headers.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/0003_alter_email_options.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/0004_alter_email_mail_from.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/models/email.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/providers/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/providers/email_django_q_executor.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/shortcuts.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/tasks.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/templates/emails/base_template.html +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/templates/emails/base_template.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/templates/emails/base_template_subject.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/views/email_rest_view.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/fields/rich_text_field.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/mfa/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/mfa/authenticator.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/mfa/base.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/mfa/email.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/mfa/legacy.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/mfa/sms.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/middleware/request_too_big_middleware.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/middleware/ws_cookie_authentication_middleware.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0005_mfadevice_mfadevice_mfa_device_unique_backend.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0006_alter_pfxuser_managers.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0007_alter_pfxuser_options.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/attachment_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/mfa_device.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/mfa_user_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/sms/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/sms/backends/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/sms/backends/base.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/sms/backends/console.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/version_check.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/mfa_authentication_views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/apps.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/migrations/0002_alter_userjob_options_alter_userjob_auto_queued_and_more.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/migrations/0003_clean_scheduled_tasks.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/migrations/0004_userjob_summary_url.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/migrations/0005_swappable_user_job.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/models/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/models/user_job.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/models/user_job_attachment.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/providers/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/providers/user_job_django_q_executor.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/providers/user_job_websocket_channel_provider.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/tasks.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/views/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/views/user_job_attachment_view.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/views/user_job_view.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/userjobs/views/user_websocket_consumer.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pyproject.toml +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/requirements.txt +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/serve-doc +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/setup.cfg +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/setup.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/apps.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/channel_group_send_calls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/mfa_urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/settings/common.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/mfa_test_utils.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_client.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_emails_email_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_emails_email_model.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_emails_q_mailjet_email_backend.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_emails_send_email_message.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_one2many.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_rich_text.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_fields_time.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_mfa_legacy.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_mfa_login_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_mfa_setup_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_user_job_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_user_job_messages.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_user_job_model.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_user_websocket.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_version_check.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/tests/test_ws_cookie_middleware.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests/views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_base_user/views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/models.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user/views.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/models.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/providers.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/scope.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/settings/common.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/tests/test_user_job.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_custom_user_job/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/migrations/0001_initial.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/migrations/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/models.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/settings/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/settings/ci.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/settings/common.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/settings/dev.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/settings/dev_custom_example.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/settings/dev_default.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/tests/__init__.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/tests/test_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/tests/test_auth_api.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/urls.py +0 -0
- {django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/tests_user_email_login/views.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.7.6.
|
|
3
|
+
Version: 1.7.6.dev15
|
|
4
4
|
Summary: Django PFX is a toolkit designed to streamline the development of RESTful APIs using the Django framework.
|
|
5
5
|
Author: Hervé Martinet
|
|
6
6
|
Author-email: herve.martinet@gmail.com
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.7.6.
|
|
3
|
+
Version: 1.7.6.dev15
|
|
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
|
|
@@ -223,6 +223,7 @@ tests/tests/test_emails_send_email_message.py
|
|
|
223
223
|
tests/tests/test_fields_choices.py
|
|
224
224
|
tests/tests/test_fields_date.py
|
|
225
225
|
tests/tests/test_fields_decimal.py
|
|
226
|
+
tests/tests/test_fields_help_text.py
|
|
226
227
|
tests/tests/test_fields_minutes_duration.py
|
|
227
228
|
tests/tests/test_fields_one2many.py
|
|
228
229
|
tests/tests/test_fields_rich_text.py
|
|
@@ -214,6 +214,7 @@
|
|
|
214
214
|
"tests/tests/test_fields_choices.py",
|
|
215
215
|
"tests/tests/test_fields_date.py",
|
|
216
216
|
"tests/tests/test_fields_decimal.py",
|
|
217
|
+
"tests/tests/test_fields_help_text.py",
|
|
217
218
|
"tests/tests/test_fields_minutes_duration.py",
|
|
218
219
|
"tests/tests/test_fields_one2many.py",
|
|
219
220
|
"tests/tests/test_fields_rich_text.py",
|
|
@@ -272,6 +272,10 @@ field = [VF('name')]
|
|
|
272
272
|
```
|
|
273
273
|
You can specify following optional attributes:
|
|
274
274
|
* `verbose_name`
|
|
275
|
+
* `help_text`: defaults to the model field `help_text` (or the `help_text`
|
|
276
|
+
argument of `@rest_property`), use an empty string to disable it.
|
|
277
|
+
It is returned by the `/meta` services and used as the field `description`
|
|
278
|
+
in the generated OpenAPI documentation.
|
|
275
279
|
* `field_type`
|
|
276
280
|
* `alias`
|
|
277
281
|
* `readonly`
|
|
@@ -286,7 +290,7 @@ Refer to method documentation for details.
|
|
|
286
290
|
### Meta
|
|
287
291
|
|
|
288
292
|
The `ModelResponseMixin` (included in every mixin with a service whose response is a simple object),
|
|
289
|
-
exposes a `/meta` service to identify fields (and their characteristics: type, required, readonly, ...),
|
|
293
|
+
exposes a `/meta` service to identify fields (and their characteristics: type, required, readonly, help_text, ...),
|
|
290
294
|
to enable automatic generation of forms.
|
|
291
295
|
|
|
292
296
|
See the generated API documentation for more details.
|
|
@@ -54,9 +54,12 @@ def rest_api(
|
|
|
54
54
|
return decorator
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
def rest_property(
|
|
57
|
+
def rest_property(
|
|
58
|
+
string=None, type="CharField", field=None, order=None,
|
|
59
|
+
help_text=None):
|
|
58
60
|
def decorator(func):
|
|
59
61
|
func.short_description = string
|
|
62
|
+
func.help_text = help_text
|
|
60
63
|
func.field_type = type
|
|
61
64
|
func.field = field
|
|
62
65
|
func.order = order
|
|
@@ -123,12 +123,13 @@ class ViewField:
|
|
|
123
123
|
choices=None, json_repr=None, media_field_api=None,
|
|
124
124
|
related_model=None, related_model_api=None, related_fields=None,
|
|
125
125
|
related_filter=None,
|
|
126
|
-
select_related=None, prefetch_related=None):
|
|
126
|
+
select_related=None, prefetch_related=None, help_text=None):
|
|
127
127
|
self.name = name
|
|
128
128
|
self.alias = alias or name
|
|
129
129
|
self.readonly_create = readonly or readonly_create
|
|
130
130
|
self.readonly_update = readonly or readonly_update
|
|
131
131
|
self.verbose_name = verbose_name or name
|
|
132
|
+
self.help_text = help_text
|
|
132
133
|
self.field_type = field_type
|
|
133
134
|
self.db_type = db_type
|
|
134
135
|
self.order = order
|
|
@@ -151,7 +152,8 @@ class ViewField:
|
|
|
151
152
|
|
|
152
153
|
def meta(self):
|
|
153
154
|
res = dict(
|
|
154
|
-
type=self.field_type, db_type=self.db_type, name=self.verbose_name
|
|
155
|
+
type=self.field_type, db_type=self.db_type, name=self.verbose_name,
|
|
156
|
+
help_text=self.help_text and str(self.help_text) or None)
|
|
155
157
|
if self.choices:
|
|
156
158
|
res['choices'] = [
|
|
157
159
|
dict(label=str(v), value=k) for k, v in self.choices.items()]
|
|
@@ -242,14 +244,17 @@ class ViewField:
|
|
|
242
244
|
return cls.from_model_field(name, field, **kwargs)
|
|
243
245
|
verbose_name = getattr(
|
|
244
246
|
prop.fget, 'short_description', prop.fget.__name__)
|
|
247
|
+
help_text = getattr(prop.fget, 'help_text', None)
|
|
245
248
|
field_type = getattr(prop.fget, 'field_type', None)
|
|
246
249
|
db_type = getattr(prop.fget, 'db_type', None)
|
|
247
250
|
else:
|
|
248
251
|
verbose_name = (
|
|
249
252
|
hasattr(prop, 'name') and prop.name or str(prop))
|
|
253
|
+
help_text = None
|
|
250
254
|
field_type = None
|
|
251
255
|
db_type = None
|
|
252
256
|
setifnone(kwargs, 'verbose_name', verbose_name)
|
|
257
|
+
setifnone(kwargs, 'help_text', help_text)
|
|
253
258
|
setifnone(kwargs, 'field_type', field_type)
|
|
254
259
|
setifnone(kwargs, 'db_type', db_type)
|
|
255
260
|
return ViewField(name, **kwargs)
|
|
@@ -257,6 +262,7 @@ class ViewField:
|
|
|
257
262
|
@classmethod
|
|
258
263
|
def from_model_field(cls, name, field, **kwargs):
|
|
259
264
|
setifnone(kwargs, 'verbose_name', cls._get_model_verbose_name(field))
|
|
265
|
+
setifnone(kwargs, 'help_text', getattr(field, 'help_text', None))
|
|
260
266
|
setifnone(
|
|
261
267
|
kwargs, 'field_type', FieldType.from_model_field(field.__class__))
|
|
262
268
|
setifnone(
|
|
@@ -343,7 +349,7 @@ class ViewField:
|
|
|
343
349
|
else:
|
|
344
350
|
res['properties'] = properties
|
|
345
351
|
elif self.field_type == FieldType.MinutesDurationField:
|
|
346
|
-
res = pfx_fields.MinutesDurationField.schema
|
|
352
|
+
res = dict(pfx_fields.MinutesDurationField.schema)
|
|
347
353
|
elif self.field_type == FieldType.ModelObjectList:
|
|
348
354
|
res['items'] = dict(type='object')
|
|
349
355
|
properties = {}
|
|
@@ -378,6 +384,8 @@ class ViewField:
|
|
|
378
384
|
res['readonly'] = self.readonly_create and self.readonly_update
|
|
379
385
|
if self.choices:
|
|
380
386
|
res['enum'] = list(self.choices)
|
|
387
|
+
if self.help_text:
|
|
388
|
+
res['description'] = str(self.help_text)
|
|
381
389
|
return res
|
|
382
390
|
|
|
383
391
|
|
|
@@ -481,10 +489,10 @@ class VF:
|
|
|
481
489
|
choices=None, select_related=None, prefetch_related=None,
|
|
482
490
|
json_repr=None, related_model=None, related_model_api=None,
|
|
483
491
|
field=None, related_fields=None, related_filter=None,
|
|
484
|
-
media_field_api=None, db_type=None, order=None):
|
|
492
|
+
media_field_api=None, db_type=None, order=None, help_text=None):
|
|
485
493
|
self.kwargs = dict(
|
|
486
|
-
name=name, verbose_name=verbose_name,
|
|
487
|
-
alias=alias,
|
|
494
|
+
name=name, verbose_name=verbose_name, help_text=help_text,
|
|
495
|
+
field_type=field_type, alias=alias,
|
|
488
496
|
readonly=readonly, readonly_create=readonly_create,
|
|
489
497
|
readonly_update=readonly_update, choices=choices,
|
|
490
498
|
select_related=select_related, prefetch_related=prefetch_related,
|
|
@@ -40,7 +40,7 @@ class Migration(migrations.Migration):
|
|
|
40
40
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
41
41
|
('first_name', models.CharField(max_length=30, verbose_name='First Name')),
|
|
42
42
|
('last_name', models.CharField(max_length=30, verbose_name='Last Name')),
|
|
43
|
-
('slug', models.SlugField(unique=True, verbose_name='Slug')),
|
|
43
|
+
('slug', models.SlugField(help_text='Unique identifier used in URLs', unique=True, verbose_name='Slug')),
|
|
44
44
|
('gender', models.CharField(choices=[('male', 'Male'), ('female', 'Female')], default='male', max_length=10, verbose_name='Gender')),
|
|
45
45
|
('science_fiction', models.BooleanField(default=False, verbose_name='Science Fiction')),
|
|
46
46
|
('created_at', models.DateField(auto_now_add=True, verbose_name='Created at')),
|
|
@@ -56,7 +56,8 @@ class Author(CacheableMixin, JSONReprMixin, models.Model):
|
|
|
56
56
|
|
|
57
57
|
first_name = models.CharField(_("First Name"), max_length=30)
|
|
58
58
|
last_name = models.CharField(_("Last Name"), max_length=30)
|
|
59
|
-
slug = models.SlugField(
|
|
59
|
+
slug = models.SlugField(
|
|
60
|
+
"Slug", unique=True, help_text="Unique identifier used in URLs")
|
|
60
61
|
gender = models.CharField("Gender", max_length=10, choices=[
|
|
61
62
|
('male', "Male"), ('female', "Female")], default='male')
|
|
62
63
|
science_fiction = models.BooleanField("Science Fiction", default=False)
|
|
@@ -83,7 +84,9 @@ class Author(CacheableMixin, JSONReprMixin, models.Model):
|
|
|
83
84
|
def __str__(self):
|
|
84
85
|
return f"{self.first_name} {self.last_name}"
|
|
85
86
|
|
|
86
|
-
@rest_property(
|
|
87
|
+
@rest_property(
|
|
88
|
+
"Name Length", "IntegerField",
|
|
89
|
+
help_text="Length of the author's full name")
|
|
87
90
|
def name_length(self):
|
|
88
91
|
return len(str(self))
|
|
89
92
|
|
|
@@ -596,6 +596,13 @@ class BasicAPITest(TestAssertMixin, TestCase):
|
|
|
596
596
|
self.assertJE(response, 'fields.name_length.name', 'Name Length')
|
|
597
597
|
self.assertJE(response, 'fields.types.type', 'ModelObjectList')
|
|
598
598
|
self.assertJE(response, 'fields.types.name', 'Types')
|
|
599
|
+
self.assertJE(response, 'fields.first_name.help_text', None)
|
|
600
|
+
self.assertJE(
|
|
601
|
+
response, 'fields.slug.help_text',
|
|
602
|
+
'Unique identifier used in URLs')
|
|
603
|
+
self.assertJE(
|
|
604
|
+
response, 'fields.name_length.help_text',
|
|
605
|
+
"Length of the author's full name")
|
|
599
606
|
response = self.client.get('/api/books/meta')
|
|
600
607
|
self.assertJE(response, 'fields.author.type', 'ModelObject')
|
|
601
608
|
self.assertJE(response, 'fields.author.model', 'tests.Author')
|
|
@@ -209,9 +209,15 @@ class ApiDocTest(TestAssertMixin, TestCase):
|
|
|
209
209
|
self.assertIn("Author", schema_key)
|
|
210
210
|
props = spec['components']['schemas'][schema_key]['properties']
|
|
211
211
|
self.assertJE(props, 'first_name.type', 'string')
|
|
212
|
+
self.assertJENotExists(props, 'first_name.description')
|
|
213
|
+
self.assertJE(
|
|
214
|
+
props, 'slug.description', 'Unique identifier used in URLs')
|
|
212
215
|
# Check an @rest_property field (readonly)
|
|
213
216
|
self.assertJE(props, 'name_length.type', 'number')
|
|
214
217
|
self.assertJE(props, 'name_length.readonly', True)
|
|
218
|
+
self.assertJE(
|
|
219
|
+
props, 'name_length.description',
|
|
220
|
+
"Length of the author's full name")
|
|
215
221
|
self.assertJE(props, 'gender.type', 'string')
|
|
216
222
|
self.assertJE(props, 'gender.enum', ['male', 'female'])
|
|
217
223
|
self.assertJE(props, 'types.type', 'array')
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from django.test import TestCase
|
|
2
|
+
|
|
3
|
+
from pfx.pfxcore.views.fields import VF, process_fields
|
|
4
|
+
from tests.models import Author
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class FieldsHelpTextTest(TestCase):
|
|
8
|
+
|
|
9
|
+
def test_help_text_from_model(self):
|
|
10
|
+
fields = process_fields(Author, ['first_name', 'slug', 'name_length'])
|
|
11
|
+
self.assertIsNone(fields['first_name'].meta()['help_text'])
|
|
12
|
+
self.assertEqual(
|
|
13
|
+
fields['slug'].meta()['help_text'],
|
|
14
|
+
"Unique identifier used in URLs")
|
|
15
|
+
self.assertEqual(
|
|
16
|
+
fields['name_length'].meta()['help_text'],
|
|
17
|
+
"Length of the author's full name")
|
|
18
|
+
|
|
19
|
+
def test_help_text_override(self):
|
|
20
|
+
fields = process_fields(Author, [
|
|
21
|
+
VF('first_name', help_text="Custom first name help"),
|
|
22
|
+
VF('slug', help_text="Custom slug help"),
|
|
23
|
+
VF('name_length', help_text="Custom length help")])
|
|
24
|
+
self.assertEqual(
|
|
25
|
+
fields['first_name'].meta()['help_text'], "Custom first name help")
|
|
26
|
+
self.assertEqual(
|
|
27
|
+
fields['slug'].meta()['help_text'], "Custom slug help")
|
|
28
|
+
self.assertEqual(
|
|
29
|
+
fields['name_length'].meta()['help_text'], "Custom length help")
|
|
30
|
+
|
|
31
|
+
def test_help_text_disable(self):
|
|
32
|
+
fields = process_fields(Author, [
|
|
33
|
+
VF('slug', help_text=''), VF('name_length', help_text='')])
|
|
34
|
+
self.assertIsNone(fields['slug'].meta()['help_text'])
|
|
35
|
+
self.assertIsNone(fields['name_length'].meta()['help_text'])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/0002_alter_email_headers.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/migrations/0003_alter_email_options.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/providers/email_django_q_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/templates/emails/base_template.html
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/emails/templates/emails/base_template.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/fields/minutes_duration_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/commands/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/commands/makeapidoc.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/management/commands/profile.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
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/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
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.7.6.dev13 → django_pfx-1.7.6.dev15}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|