django-pfx 1.7.2.dev16__tar.gz → 1.7.3.dev2__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.
Files changed (207) hide show
  1. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/PKG-INFO +1 -1
  2. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/django_pfx.egg-info/PKG-INFO +1 -1
  3. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/django_pfx.egg-info/SOURCES.txt +1 -0
  4. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/fields.py +10 -3
  5. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/__init__.py +1 -0
  6. django_pfx-1.7.3.dev2/tests/tests/test_fields_time.py +133 -0
  7. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/.gitignore +0 -0
  8. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/.gitlab-ci.yml +0 -0
  9. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/.pre-commit-config.yaml +0 -0
  10. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/LICENSE +0 -0
  11. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/MANIFEST.in +0 -0
  12. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/README.md +0 -0
  13. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/django_pfx.egg-info/dependency_links.txt +0 -0
  14. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/django_pfx.egg-info/requires.txt +0 -0
  15. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/django_pfx.egg-info/top_level.txt +0 -0
  16. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/Makefile +0 -0
  17. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/conf.py +0 -0
  18. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/index.rst +0 -0
  19. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/api.views.rst +0 -0
  20. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/authentication.md +0 -0
  21. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/decorator.md +0 -0
  22. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/generate_openapi.md +0 -0
  23. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/getting_started.md +0 -0
  24. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/internationalisation.md +0 -0
  25. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/model.md +0 -0
  26. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/pfx_views.md +0 -0
  27. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/profiling.md +0 -0
  28. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/settings.md +0 -0
  29. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/doc/source/testing.md +0 -0
  30. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/img/pfx.png +0 -0
  31. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/img/pfx.svg +0 -0
  32. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/make_messages +0 -0
  33. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/manage.py +0 -0
  34. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/__init__.py +0 -0
  35. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/__init__.py +0 -0
  36. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/apidoc/__init__.py +0 -0
  37. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/apidoc/parameters.py +0 -0
  38. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/apidoc/schema.py +0 -0
  39. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/apidoc/tags.py +0 -0
  40. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/apps.py +0 -0
  41. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/decorator/__init__.py +0 -0
  42. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/decorator/rest.py +0 -0
  43. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/default_settings.py +0 -0
  44. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/exceptions.py +0 -0
  45. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/fields/__init__.py +0 -0
  46. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/fields/decimal_field.py +0 -0
  47. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/fields/media_field.py +0 -0
  48. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
  49. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/fields/rich_text_field.py +0 -0
  50. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/http/__init__.py +0 -0
  51. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/http/json_response.py +0 -0
  52. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
  53. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
  54. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/management/__init__.py +0 -0
  55. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/management/commands/__init__.py +0 -0
  56. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
  57. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/management/commands/profile.py +0 -0
  58. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/middleware/__init__.py +0 -0
  59. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/middleware/authentication.py +0 -0
  60. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/middleware/locale.py +0 -0
  61. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/middleware/profiling.py +0 -0
  62. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/0001_initial.py +0 -0
  63. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
  64. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
  65. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
  66. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/__init__.py +0 -0
  67. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
  68. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
  69. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/__init__.py +0 -0
  70. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
  71. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/cache_mixins.py +0 -0
  72. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/login_ban.py +0 -0
  73. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/mfa_user_mixin.py +0 -0
  74. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/not_null_fields.py +0 -0
  75. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
  76. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/pfx_models.py +0 -0
  77. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/pfx_user.py +0 -0
  78. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
  79. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/serializers/__init__.py +0 -0
  80. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/serializers/json.py +0 -0
  81. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/settings.py +0 -0
  82. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/shortcuts.py +0 -0
  83. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/sms/__init__.py +0 -0
  84. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/sms/backends/__init__.py +0 -0
  85. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/sms/backends/base.py +0 -0
  86. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/sms/backends/console.py +0 -0
  87. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/storage/__init__.py +0 -0
  88. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/storage/exceptions.py +0 -0
  89. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/storage/local_storage.py +0 -0
  90. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/storage/s3_storage.py +0 -0
  91. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
  92. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
  93. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
  94. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
  95. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
  96. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
  97. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/test.py +0 -0
  98. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/urls.py +0 -0
  99. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/__init__.py +0 -0
  100. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/authentication_views.py +0 -0
  101. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/filters_views.py +0 -0
  102. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/locale_views.py +0 -0
  103. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
  104. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
  105. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/__init__.py +0 -0
  106. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/date_format.py +0 -0
  107. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/groups.py +0 -0
  108. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/list_count.py +0 -0
  109. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/list_items.py +0 -0
  110. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
  111. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/list_order.py +0 -0
  112. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/list_search.py +0 -0
  113. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
  114. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
  115. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
  116. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
  117. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/subset.py +0 -0
  118. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
  119. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
  120. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
  121. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
  122. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
  123. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/pfxcore/views/rest_views.py +0 -0
  124. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/settings/__init__.py +0 -0
  125. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pfx/settings/dev.py +0 -0
  126. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/pyproject.toml +0 -0
  127. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/requirements.txt +0 -0
  128. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/serve-doc +0 -0
  129. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/setup.cfg +0 -0
  130. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/setup.py +0 -0
  131. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/__init__.py +0 -0
  132. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/apps.py +0 -0
  133. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
  134. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/0001_initial.py +0 -0
  135. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/0002_alter_book_cover.py +0 -0
  136. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/0003_book_local_file.py +0 -0
  137. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/0004_mfausermixin_fields.py +0 -0
  138. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/0005_mfausermixin_fields_fix.py +0 -0
  139. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/0006_rename_otp_enabled_user_mfa_authenticator_enabled_and_more.py +0 -0
  140. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/migrations/__init__.py +0 -0
  141. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/models.py +0 -0
  142. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/settings/__init__.py +0 -0
  143. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/settings/ci.py +0 -0
  144. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/settings/common.py +0 -0
  145. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/settings/dev.py +0 -0
  146. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/settings/dev_custom_example.py +0 -0
  147. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/settings/dev_default.py +0 -0
  148. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/basic_api_errors.py +0 -0
  149. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/basic_api_test.py +0 -0
  150. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_api_doc.py +0 -0
  151. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_api_doc_search.py +0 -0
  152. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_auth_api.py +0 -0
  153. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_body_mixin.py +0 -0
  154. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_cache.py +0 -0
  155. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_client.py +0 -0
  156. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_fields_choices.py +0 -0
  157. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_fields_date.py +0 -0
  158. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_fields_decimal.py +0 -0
  159. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_fields_minutes_duration.py +0 -0
  160. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_fields_one2many.py +0 -0
  161. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_fields_rich_text.py +0 -0
  162. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_filters.py +0 -0
  163. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_locale_api.py +0 -0
  164. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
  165. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_perm_tests.py +0 -0
  166. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_permissions.py +0 -0
  167. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_perms_api.py +0 -0
  168. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_post_migrate_groups_update.py +0 -0
  169. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_profiling_middleware.py +0 -0
  170. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_settings.py +0 -0
  171. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_shortcuts.py +0 -0
  172. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_timezone_middleware.py +0 -0
  173. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_tools.py +0 -0
  174. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_user_queryset.py +0 -0
  175. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_view_decorators.py +0 -0
  176. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/tests/test_view_fields.py +0 -0
  177. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/urls.py +0 -0
  178. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests/views.py +0 -0
  179. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/__init__.py +0 -0
  180. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/migrations/0001_initial.py +0 -0
  181. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/migrations/__init__.py +0 -0
  182. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/settings/__init__.py +0 -0
  183. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/settings/ci.py +0 -0
  184. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/settings/common.py +0 -0
  185. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/settings/dev.py +0 -0
  186. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/settings/dev_custom_example.py +0 -0
  187. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/settings/dev_default.py +0 -0
  188. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/tests/__init__.py +0 -0
  189. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/tests/test_api.py +0 -0
  190. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/tests/test_auth_api.py +0 -0
  191. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/urls.py +0 -0
  192. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_base_user/views.py +0 -0
  193. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/__init__.py +0 -0
  194. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/migrations/0001_initial.py +0 -0
  195. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/migrations/__init__.py +0 -0
  196. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/models.py +0 -0
  197. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/settings/__init__.py +0 -0
  198. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/settings/ci.py +0 -0
  199. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/settings/common.py +0 -0
  200. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/settings/dev.py +0 -0
  201. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/settings/dev_custom_example.py +0 -0
  202. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/settings/dev_default.py +0 -0
  203. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/tests/__init__.py +0 -0
  204. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/tests/test_api.py +0 -0
  205. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/tests/test_auth_api.py +0 -0
  206. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/urls.py +0 -0
  207. {django_pfx-1.7.2.dev16 → django_pfx-1.7.3.dev2}/tests_custom_user/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-pfx
3
- Version: 1.7.2.dev16
3
+ Version: 1.7.3.dev2
4
4
  Summary: Django PFX is a toolkit designed to streamline the development of RESTful APIs using the Django framework.
5
5
  Author: Hervé Martinet
6
6
  Author-email: herve.martinet@gmail.com
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-pfx
3
- Version: 1.7.2.dev16
3
+ Version: 1.7.3.dev2
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
@@ -159,6 +159,7 @@ tests/tests/test_fields_decimal.py
159
159
  tests/tests/test_fields_minutes_duration.py
160
160
  tests/tests/test_fields_one2many.py
161
161
  tests/tests/test_fields_rich_text.py
162
+ tests/tests/test_fields_time.py
162
163
  tests/tests/test_filters.py
163
164
  tests/tests/test_locale_api.py
164
165
  tests/tests/test_ordered_rest_view_mixin.py
@@ -39,6 +39,7 @@ class FieldType:
39
39
  FloatField = "FloatField"
40
40
  DecimalField = "DecimalField"
41
41
  DateField = "DateField"
42
+ TimeField = "TimeField"
42
43
  DateTimeField = "DateTimeField"
43
44
  MinutesDurationField = "MinutesDurationField"
44
45
  MediaField = "MediaField"
@@ -57,6 +58,7 @@ class FieldType:
57
58
  (models.DecimalField, DecimalField),
58
59
  (models.DateTimeField, DateTimeField),
59
60
  (models.DateField, DateField),
61
+ (models.TimeField, TimeField),
60
62
  (models.TextField, TextField),
61
63
  (models.CharField, CharField),
62
64
  (models.URLField, CharField),
@@ -78,6 +80,7 @@ class FieldType:
78
80
  FloatField: "number",
79
81
  DecimalField: "string",
80
82
  DateField: "string",
83
+ TimeField: "string",
81
84
  DateTimeField: "string",
82
85
  MinutesDurationField: "object",
83
86
  MediaField: "object",
@@ -305,9 +308,11 @@ class ViewField:
305
308
  def to_apidoc(self, request=False):
306
309
  res = dict(type=FieldType.to_apidoc(self.field_type))
307
310
  if self.field_type == FieldType.DateField:
308
- res['format'] = 'date'
311
+ res['format'] = 'date' # Official specification name.
312
+ elif self.field_type == FieldType.TimeField:
313
+ res['format'] = 'time' # Custom name, does no exists.
309
314
  elif self.field_type == FieldType.DateTimeField:
310
- res['format'] = 'date-time'
315
+ res['format'] = 'date-time' # Official specification name.
311
316
  elif self.field_type == FieldType.ModelObject:
312
317
  properties = {}
313
318
  if self.related_model:
@@ -442,7 +447,9 @@ class ViewModelField(ViewField):
442
447
  value = (value['value']
443
448
  if isinstance(value, dict) and 'value' in value
444
449
  else value)
445
- elif self.field_type in (FieldType.DateField, FieldType.DateTimeField):
450
+ elif self.field_type in (
451
+ FieldType.DateField, FieldType.TimeField,
452
+ FieldType.DateTimeField):
446
453
  try:
447
454
  value = value and field.to_python(value) or None
448
455
  except ValidationError as e:
@@ -12,6 +12,7 @@ from .test_fields_decimal import TestFieldsDecimal
12
12
  from .test_fields_minutes_duration import TestFieldsMinutesDuration
13
13
  from .test_fields_one2many import TestFieldsOne2Many
14
14
  from .test_fields_rich_text import TestFieldsRichText
15
+ from .test_fields_time import TestFieldsTime
15
16
  from .test_filters import FiltersTest
16
17
  from .test_locale_api import LocaleAPITest
17
18
  from .test_ordered_rest_view_mixin import TestOrderedRestViewMixin
@@ -0,0 +1,133 @@
1
+ from datetime import time
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.models import JSONReprMixin
11
+ from pfx.pfxcore.test import APIClient, TestAssertMixin
12
+ from pfx.pfxcore.views import ModelFilter, RestView
13
+ from tests.views import FakeViewMixin
14
+
15
+
16
+ class TestTimeModel(JSONReprMixin, models.Model):
17
+ test_time = models.TimeField("Test Time Field", blank=True, null=True)
18
+
19
+ class Meta:
20
+ verbose_name = "TestModel"
21
+ verbose_name_plural = "TestModels"
22
+ ordering = ['pk']
23
+
24
+
25
+ @rest_view("/test")
26
+ class TestTimeRestView(FakeViewMixin, RestView):
27
+ default_public = True
28
+ model = TestTimeModel
29
+
30
+ filters = [ModelFilter(TestTimeModel, 'test_time')]
31
+
32
+
33
+ urlpatterns = [
34
+ path('api/', include(register_views(TestTimeRestView))),
35
+ path('api/', include('pfx.pfxcore.urls'))
36
+ ]
37
+
38
+
39
+ @override_settings(ROOT_URLCONF=__name__)
40
+ class TestFieldsTime(TestAssertMixin, TestCase):
41
+
42
+ def setUp(self):
43
+ self.client = APIClient(default_locale='en')
44
+
45
+ @classmethod
46
+ def setUpTestData(cls):
47
+ with connection.schema_editor() as schema_editor:
48
+ schema_editor.create_model(TestTimeModel)
49
+
50
+ def test_meta(self):
51
+ res = self.client.get('/api/test/meta')
52
+ self.assertJE(res, 'fields.test_time.type', 'TimeField')
53
+ self.assertJE(res, 'fields.test_time.db_type', 'TimeField')
54
+ self.assertJE(res, 'fields.test_time.name', 'Test Time Field')
55
+
56
+ def test_get(self):
57
+ c1 = TestTimeModel.objects.create(test_time=time(14, 20))
58
+
59
+ res = self.client.get(f'/api/test/{c1.pk}')
60
+ self.assertRC(res, 200)
61
+ self.assertJE(res, 'test_time', '14:20:00')
62
+
63
+ def test_create(self):
64
+ res = self.client.post('/api/test', dict(
65
+ test_time='14:20'))
66
+ self.assertRC(res, 200)
67
+ self.assertJE(res, 'test_time', '14:20:00')
68
+
69
+ def test_create_null(self):
70
+ res = self.client.post('/api/test', dict(
71
+ test_time=None))
72
+ self.assertRC(res, 200)
73
+ self.assertJE(res, 'test_time', None)
74
+
75
+ def test_create_invalid(self):
76
+ res = self.client.post('/api/test', dict(
77
+ test_time='invalid'))
78
+ self.assertRC(res, 422)
79
+ self.assertJE(res, 'test_time', [
80
+ "“invalid” value has an invalid format. "
81
+ "It must be in HH:MM[:ss[.uuuuuu]] format."])
82
+
83
+ def test_update(self):
84
+ c1 = TestTimeModel.objects.create(test_time=time(14, 20))
85
+
86
+ res = self.client.put(f'/api/test/{c1.pk}', dict(
87
+ test_time='15:32'))
88
+ self.assertRC(res, 200)
89
+ self.assertJE(res, 'test_time', '15:32:00')
90
+
91
+ def test_update_null(self):
92
+ c1 = TestTimeModel.objects.create(test_time=time(14, 20))
93
+
94
+ res = self.client.put(f'/api/test/{c1.pk}', dict(
95
+ test_time=None))
96
+ self.assertRC(res, 200)
97
+ self.assertJE(res, 'test_time', None)
98
+
99
+ def test_list_order(self):
100
+ c1 = TestTimeModel.objects.create(test_time=time(14, 20))
101
+ c2 = TestTimeModel.objects.create(test_time=time(14, 21))
102
+ c3 = TestTimeModel.objects.create(test_time=time(22, 1))
103
+
104
+ res = self.client.get('/api/test?order=test_time')
105
+ self.assertRC(res, 200)
106
+ self.assertEqual(
107
+ [self.get_val(c, 'pk') for c in self.get_val(res, 'items')],
108
+ [c1.pk, c2.pk, c3.pk])
109
+
110
+ res = self.client.get('/api/test?order=-test_time')
111
+ self.assertRC(res, 200)
112
+ self.assertEqual(
113
+ [self.get_val(c, 'pk') for c in self.get_val(res, 'items')],
114
+ [c3.pk, c2.pk, c1.pk])
115
+
116
+ def test_list_filter(self):
117
+ TestTimeModel.objects.create(test_time=time(14, 20))
118
+ c2 = TestTimeModel.objects.create(test_time=time(14, 21))
119
+ c3 = TestTimeModel.objects.create(test_time=time(22, 1))
120
+
121
+ res = self.client.get('/api/test', dict(test_time='14:21:00'))
122
+ self.assertRC(res, 200)
123
+ self.assertSize(res, 'items', 1)
124
+ self.assertJE(res, 'items.@0.pk', c2.pk)
125
+
126
+ res = self.client.get('/api/test', dict(test_time='22:01'))
127
+ self.assertRC(res, 200)
128
+ self.assertSize(res, 'items', 1)
129
+ self.assertJE(res, 'items.@0.pk', c3.pk)
130
+
131
+ res = self.client.get('/api/test', dict(test_time='10:01'))
132
+ self.assertRC(res, 200)
133
+ self.assertSize(res, 'items', 0)