django-pfx 1.4.dev112__tar.gz → 1.4.dev114__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 (196) hide show
  1. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/PKG-INFO +1 -1
  2. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/django_pfx.egg-info/PKG-INFO +1 -1
  3. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/django_pfx.egg-info/SOURCES.txt +2 -0
  4. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/fields/__init__.py +1 -0
  5. django_pfx-1.4.dev114/pfx/pfxcore/fields/decimal_field.py +15 -0
  6. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/fields.py +12 -6
  7. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/__init__.py +1 -0
  8. django_pfx-1.4.dev114/tests/tests/test_fields_decimal.py +59 -0
  9. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/.gitignore +0 -0
  10. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/.gitlab-ci.yml +0 -0
  11. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/.pre-commit-config.yaml +0 -0
  12. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/LICENSE +0 -0
  13. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/MANIFEST.in +0 -0
  14. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/README.md +0 -0
  15. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/django_pfx.egg-info/dependency_links.txt +0 -0
  16. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/django_pfx.egg-info/requires.txt +0 -0
  17. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/django_pfx.egg-info/top_level.txt +0 -0
  18. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/Makefile +0 -0
  19. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/conf.py +0 -0
  20. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/index.rst +0 -0
  21. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/api.views.rst +0 -0
  22. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/authentication.md +0 -0
  23. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/decorator.md +0 -0
  24. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/generate_openapi.md +0 -0
  25. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/getting_started.md +0 -0
  26. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/internationalisation.md +0 -0
  27. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/model.md +0 -0
  28. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/pfx_views.md +0 -0
  29. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/profiling.md +0 -0
  30. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/settings.md +0 -0
  31. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/doc/source/testing.md +0 -0
  32. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/img/pfx.png +0 -0
  33. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/img/pfx.svg +0 -0
  34. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/make_messages +0 -0
  35. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/manage.py +0 -0
  36. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/__init__.py +0 -0
  37. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/__init__.py +0 -0
  38. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/apidoc/__init__.py +0 -0
  39. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/apidoc/parameters.py +0 -0
  40. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/apidoc/schema.py +0 -0
  41. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/apidoc/tags.py +0 -0
  42. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/apps.py +0 -0
  43. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/decorator/__init__.py +0 -0
  44. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/decorator/rest.py +0 -0
  45. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/default_settings.py +0 -0
  46. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/exceptions.py +0 -0
  47. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/fields/media_field.py +0 -0
  48. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
  49. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/fields/nh3_field.py +0 -0
  50. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/http/__init__.py +0 -0
  51. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/http/json_response.py +0 -0
  52. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
  53. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
  54. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/management/__init__.py +0 -0
  55. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/management/commands/__init__.py +0 -0
  56. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
  57. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/management/commands/profile.py +0 -0
  58. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/middleware/__init__.py +0 -0
  59. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/middleware/authentication.py +0 -0
  60. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/middleware/locale.py +0 -0
  61. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/middleware/profiling.py +0 -0
  62. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/migrations/0001_initial.py +0 -0
  63. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
  64. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
  65. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/migrations/__init__.py +0 -0
  66. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
  67. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
  68. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/__init__.py +0 -0
  69. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
  70. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/cache_mixins.py +0 -0
  71. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/login_ban.py +0 -0
  72. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/not_null_fields.py +0 -0
  73. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
  74. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
  75. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/pfx_models.py +0 -0
  76. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/pfx_user.py +0 -0
  77. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
  78. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/serializers/__init__.py +0 -0
  79. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/serializers/json.py +0 -0
  80. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/settings.py +0 -0
  81. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/shortcuts.py +0 -0
  82. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/storage/__init__.py +0 -0
  83. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/storage/exceptions.py +0 -0
  84. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/storage/local_storage.py +0 -0
  85. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/storage/s3_storage.py +0 -0
  86. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
  87. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
  88. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
  89. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
  90. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
  91. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
  92. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/test.py +0 -0
  93. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/urls.py +0 -0
  94. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/__init__.py +0 -0
  95. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/authentication_views.py +0 -0
  96. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/filters_views.py +0 -0
  97. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/locale_views.py +0 -0
  98. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
  99. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
  100. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/__init__.py +0 -0
  101. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/date_format.py +0 -0
  102. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/groups.py +0 -0
  103. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/list_count.py +0 -0
  104. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/list_items.py +0 -0
  105. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
  106. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/list_order.py +0 -0
  107. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/list_search.py +0 -0
  108. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
  109. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
  110. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
  111. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
  112. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/subset.py +0 -0
  113. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
  114. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
  115. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
  116. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
  117. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
  118. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/pfxcore/views/rest_views.py +0 -0
  119. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/settings/__init__.py +0 -0
  120. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pfx/settings/dev.py +0 -0
  121. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/pyproject.toml +0 -0
  122. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/requirements.txt +0 -0
  123. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/serve-doc +0 -0
  124. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/setup.cfg +0 -0
  125. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/setup.py +0 -0
  126. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/__init__.py +0 -0
  127. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/apps.py +0 -0
  128. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
  129. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/migrations/0001_initial.py +0 -0
  130. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/migrations/0002_alter_book_cover.py +0 -0
  131. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/migrations/0003_book_local_file.py +0 -0
  132. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/migrations/__init__.py +0 -0
  133. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/models.py +0 -0
  134. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/settings/__init__.py +0 -0
  135. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/settings/ci.py +0 -0
  136. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/settings/common.py +0 -0
  137. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/settings/dev.py +0 -0
  138. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/settings/dev_custom_example.py +0 -0
  139. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/settings/dev_default.py +0 -0
  140. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/basic_api_errors.py +0 -0
  141. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/basic_api_test.py +0 -0
  142. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_api_doc.py +0 -0
  143. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_api_doc_search.py +0 -0
  144. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_auth_api.py +0 -0
  145. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_body_mixin.py +0 -0
  146. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_cache.py +0 -0
  147. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_client.py +0 -0
  148. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_fields_choices.py +0 -0
  149. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_fields_minutes_duration.py +0 -0
  150. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_fields_nh3.py +0 -0
  151. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_filters.py +0 -0
  152. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_locale_api.py +0 -0
  153. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
  154. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_perm_tests.py +0 -0
  155. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_permissions.py +0 -0
  156. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_perms_api.py +0 -0
  157. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_post_migrate_groups_update.py +0 -0
  158. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_profiling_middleware.py +0 -0
  159. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_settings.py +0 -0
  160. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_shortcuts.py +0 -0
  161. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_timezone_middleware.py +0 -0
  162. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_tools.py +0 -0
  163. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_user_queryset.py +0 -0
  164. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_view_decorators.py +0 -0
  165. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/tests/test_view_fields.py +0 -0
  166. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/urls.py +0 -0
  167. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests/views.py +0 -0
  168. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/__init__.py +0 -0
  169. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/migrations/0001_initial.py +0 -0
  170. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/migrations/__init__.py +0 -0
  171. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/settings/__init__.py +0 -0
  172. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/settings/ci.py +0 -0
  173. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/settings/common.py +0 -0
  174. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/settings/dev.py +0 -0
  175. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/settings/dev_custom_example.py +0 -0
  176. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/settings/dev_default.py +0 -0
  177. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/tests/__init__.py +0 -0
  178. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/tests/test_api.py +0 -0
  179. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/tests/test_auth_api.py +0 -0
  180. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/urls.py +0 -0
  181. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_base_user/views.py +0 -0
  182. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/__init__.py +0 -0
  183. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/migrations/0001_initial.py +0 -0
  184. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/migrations/__init__.py +0 -0
  185. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/models.py +0 -0
  186. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/settings/__init__.py +0 -0
  187. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/settings/ci.py +0 -0
  188. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/settings/common.py +0 -0
  189. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/settings/dev.py +0 -0
  190. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/settings/dev_custom_example.py +0 -0
  191. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/settings/dev_default.py +0 -0
  192. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/tests/__init__.py +0 -0
  193. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/tests/test_api.py +0 -0
  194. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/tests/test_auth_api.py +0 -0
  195. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/tests_custom_user/urls.py +0 -0
  196. {django_pfx-1.4.dev112 → django_pfx-1.4.dev114}/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.dev112
3
+ Version: 1.4.dev114
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.dev112
3
+ Version: 1.4.dev114
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
@@ -48,6 +48,7 @@ pfx/pfxcore/apidoc/tags.py
48
48
  pfx/pfxcore/decorator/__init__.py
49
49
  pfx/pfxcore/decorator/rest.py
50
50
  pfx/pfxcore/fields/__init__.py
51
+ pfx/pfxcore/fields/decimal_field.py
51
52
  pfx/pfxcore/fields/media_field.py
52
53
  pfx/pfxcore/fields/minutes_duration_field.py
53
54
  pfx/pfxcore/fields/nh3_field.py
@@ -145,6 +146,7 @@ tests/tests/test_body_mixin.py
145
146
  tests/tests/test_cache.py
146
147
  tests/tests/test_client.py
147
148
  tests/tests/test_fields_choices.py
149
+ tests/tests/test_fields_decimal.py
148
150
  tests/tests/test_fields_minutes_duration.py
149
151
  tests/tests/test_fields_nh3.py
150
152
  tests/tests/test_filters.py
@@ -1,3 +1,4 @@
1
+ from .decimal_field import DecimalField
1
2
  from .media_field import MediaField
2
3
  from .minutes_duration_field import MinutesDurationField
3
4
  from .nh3_field import NH3Field
@@ -0,0 +1,15 @@
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)
@@ -44,6 +44,7 @@ class FieldType:
44
44
  MODEL_FIELD_BINDING = [
45
45
  (pfx_fields.MinutesDurationField, MinutesDurationField),
46
46
  (pfx_fields.MediaField, MediaField),
47
+ (pfx_fields.DecimalField, DecimalField),
47
48
  (models.BooleanField, BooleanField),
48
49
  (models.IntegerField, IntegerField),
49
50
  (models.FloatField, FloatField),
@@ -146,8 +147,15 @@ class ViewField:
146
147
 
147
148
  def to_json(self, view, obj):
148
149
  value = self.get_value(obj)
149
- if self.field_type == FieldType.MinutesDurationField:
150
- return pfx_fields.MinutesDurationField.to_json(value)
150
+
151
+ if self.field_type == FieldType.ModelObject:
152
+ return self._json_repr(value)
153
+ if self.field_type == FieldType.ModelObjectList:
154
+ return [self._json_repr(o) for o in value.all()]
155
+
156
+ if self.json_repr:
157
+ return self.json_repr(value)
158
+
151
159
  if self.field_type == FieldType.MediaField:
152
160
  if value:
153
161
  api_url = view._rest_view_path
@@ -155,10 +163,6 @@ class ViewField:
155
163
  return value
156
164
  else:
157
165
  return None
158
- if self.field_type == FieldType.ModelObject:
159
- return self._json_repr(value)
160
- if self.field_type == FieldType.ModelObjectList:
161
- return [self._json_repr(o) for o in value.all()]
162
166
  if self.choices:
163
167
  if value in self.choices:
164
168
  return dict(value=value, label=str(self.choices[value]))
@@ -303,6 +307,8 @@ class ViewModelField(ViewField):
303
307
  self, name, model_field=None, **kwargs):
304
308
  super().__init__(name, **kwargs)
305
309
  self.model_field = model_field
310
+ if hasattr(model_field, 'to_json'):
311
+ self.json_repr = model_field.to_json
306
312
  if (hasattr(self.model_field, 'related_model') and
307
313
  self.model_field.related_model and not self.related_model):
308
314
  self.related_model = self.model_field.related_model
@@ -7,6 +7,7 @@ from .test_body_mixin import TestBodyMixin
7
7
  from .test_cache import TestCache
8
8
  from .test_client import TestApiClient
9
9
  from .test_fields_choices import TestFieldsChoices
10
+ from .test_fields_decimal import TestFieldsDecimal
10
11
  from .test_fields_minutes_duration import TestFieldsMinutesDuration
11
12
  from .test_fields_nh3 import TestFieldsNh3
12
13
  from .test_filters import FiltersTest
@@ -0,0 +1,59 @@
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