django-pfx 1.4.dev114__tar.gz → 1.4.dev116__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 (197) hide show
  1. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/PKG-INFO +1 -1
  2. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/django_pfx.egg-info/PKG-INFO +1 -1
  3. django_pfx-1.4.dev116/pfx/pfxcore/fields/decimal_field.py +33 -0
  4. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/fields.py +4 -0
  5. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_fields_decimal.py +32 -2
  6. django_pfx-1.4.dev114/pfx/pfxcore/fields/decimal_field.py +0 -15
  7. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/.gitignore +0 -0
  8. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/.gitlab-ci.yml +0 -0
  9. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/.pre-commit-config.yaml +0 -0
  10. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/LICENSE +0 -0
  11. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/MANIFEST.in +0 -0
  12. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/README.md +0 -0
  13. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/django_pfx.egg-info/SOURCES.txt +0 -0
  14. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/django_pfx.egg-info/dependency_links.txt +0 -0
  15. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/django_pfx.egg-info/requires.txt +0 -0
  16. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/django_pfx.egg-info/top_level.txt +0 -0
  17. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/Makefile +0 -0
  18. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/conf.py +0 -0
  19. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/index.rst +0 -0
  20. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/api.views.rst +0 -0
  21. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/authentication.md +0 -0
  22. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/decorator.md +0 -0
  23. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/generate_openapi.md +0 -0
  24. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/getting_started.md +0 -0
  25. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/internationalisation.md +0 -0
  26. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/model.md +0 -0
  27. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/pfx_views.md +0 -0
  28. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/profiling.md +0 -0
  29. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/settings.md +0 -0
  30. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/doc/source/testing.md +0 -0
  31. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/img/pfx.png +0 -0
  32. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/img/pfx.svg +0 -0
  33. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/make_messages +0 -0
  34. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/manage.py +0 -0
  35. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/__init__.py +0 -0
  36. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/__init__.py +0 -0
  37. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/apidoc/__init__.py +0 -0
  38. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/apidoc/parameters.py +0 -0
  39. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/apidoc/schema.py +0 -0
  40. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/apidoc/tags.py +0 -0
  41. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/apps.py +0 -0
  42. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/decorator/__init__.py +0 -0
  43. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/decorator/rest.py +0 -0
  44. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/default_settings.py +0 -0
  45. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/exceptions.py +0 -0
  46. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/fields/__init__.py +0 -0
  47. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/fields/media_field.py +0 -0
  48. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
  49. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/fields/nh3_field.py +0 -0
  50. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/http/__init__.py +0 -0
  51. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/http/json_response.py +0 -0
  52. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
  53. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
  54. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/management/__init__.py +0 -0
  55. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/management/commands/__init__.py +0 -0
  56. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
  57. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/management/commands/profile.py +0 -0
  58. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/middleware/__init__.py +0 -0
  59. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/middleware/authentication.py +0 -0
  60. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/middleware/locale.py +0 -0
  61. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/middleware/profiling.py +0 -0
  62. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/migrations/0001_initial.py +0 -0
  63. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
  64. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
  65. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/migrations/__init__.py +0 -0
  66. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
  67. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
  68. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/__init__.py +0 -0
  69. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
  70. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/cache_mixins.py +0 -0
  71. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/login_ban.py +0 -0
  72. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/not_null_fields.py +0 -0
  73. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
  74. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
  75. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/pfx_models.py +0 -0
  76. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/pfx_user.py +0 -0
  77. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
  78. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/serializers/__init__.py +0 -0
  79. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/serializers/json.py +0 -0
  80. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/settings.py +0 -0
  81. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/shortcuts.py +0 -0
  82. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/storage/__init__.py +0 -0
  83. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/storage/exceptions.py +0 -0
  84. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/storage/local_storage.py +0 -0
  85. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/storage/s3_storage.py +0 -0
  86. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
  87. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
  88. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
  89. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
  90. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
  91. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
  92. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/test.py +0 -0
  93. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/urls.py +0 -0
  94. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/__init__.py +0 -0
  95. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/authentication_views.py +0 -0
  96. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/filters_views.py +0 -0
  97. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/locale_views.py +0 -0
  98. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
  99. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
  100. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/__init__.py +0 -0
  101. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/date_format.py +0 -0
  102. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/groups.py +0 -0
  103. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/list_count.py +0 -0
  104. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/list_items.py +0 -0
  105. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
  106. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/list_order.py +0 -0
  107. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/list_search.py +0 -0
  108. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
  109. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
  110. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
  111. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
  112. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/subset.py +0 -0
  113. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
  114. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
  115. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
  116. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
  117. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
  118. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/pfxcore/views/rest_views.py +0 -0
  119. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/settings/__init__.py +0 -0
  120. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pfx/settings/dev.py +0 -0
  121. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/pyproject.toml +0 -0
  122. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/requirements.txt +0 -0
  123. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/serve-doc +0 -0
  124. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/setup.cfg +0 -0
  125. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/setup.py +0 -0
  126. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/__init__.py +0 -0
  127. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/apps.py +0 -0
  128. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
  129. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/migrations/0001_initial.py +0 -0
  130. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/migrations/0002_alter_book_cover.py +0 -0
  131. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/migrations/0003_book_local_file.py +0 -0
  132. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/migrations/__init__.py +0 -0
  133. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/models.py +0 -0
  134. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/settings/__init__.py +0 -0
  135. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/settings/ci.py +0 -0
  136. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/settings/common.py +0 -0
  137. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/settings/dev.py +0 -0
  138. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/settings/dev_custom_example.py +0 -0
  139. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/settings/dev_default.py +0 -0
  140. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/__init__.py +0 -0
  141. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/basic_api_errors.py +0 -0
  142. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/basic_api_test.py +0 -0
  143. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_api_doc.py +0 -0
  144. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_api_doc_search.py +0 -0
  145. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_auth_api.py +0 -0
  146. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_body_mixin.py +0 -0
  147. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_cache.py +0 -0
  148. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_client.py +0 -0
  149. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_fields_choices.py +0 -0
  150. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_fields_minutes_duration.py +0 -0
  151. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_fields_nh3.py +0 -0
  152. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_filters.py +0 -0
  153. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_locale_api.py +0 -0
  154. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
  155. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_perm_tests.py +0 -0
  156. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_permissions.py +0 -0
  157. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_perms_api.py +0 -0
  158. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_post_migrate_groups_update.py +0 -0
  159. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_profiling_middleware.py +0 -0
  160. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_settings.py +0 -0
  161. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_shortcuts.py +0 -0
  162. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_timezone_middleware.py +0 -0
  163. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_tools.py +0 -0
  164. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_user_queryset.py +0 -0
  165. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_view_decorators.py +0 -0
  166. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/tests/test_view_fields.py +0 -0
  167. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/urls.py +0 -0
  168. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests/views.py +0 -0
  169. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/__init__.py +0 -0
  170. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/migrations/0001_initial.py +0 -0
  171. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/migrations/__init__.py +0 -0
  172. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/settings/__init__.py +0 -0
  173. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/settings/ci.py +0 -0
  174. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/settings/common.py +0 -0
  175. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/settings/dev.py +0 -0
  176. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/settings/dev_custom_example.py +0 -0
  177. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/settings/dev_default.py +0 -0
  178. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/tests/__init__.py +0 -0
  179. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/tests/test_api.py +0 -0
  180. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/tests/test_auth_api.py +0 -0
  181. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/urls.py +0 -0
  182. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_base_user/views.py +0 -0
  183. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/__init__.py +0 -0
  184. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/migrations/0001_initial.py +0 -0
  185. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/migrations/__init__.py +0 -0
  186. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/models.py +0 -0
  187. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/settings/__init__.py +0 -0
  188. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/settings/ci.py +0 -0
  189. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/settings/common.py +0 -0
  190. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/settings/dev.py +0 -0
  191. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/settings/dev_custom_example.py +0 -0
  192. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/settings/dev_default.py +0 -0
  193. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/tests/__init__.py +0 -0
  194. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/tests/test_api.py +0 -0
  195. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/tests/test_auth_api.py +0 -0
  196. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/tests_custom_user/urls.py +0 -0
  197. {django_pfx-1.4.dev114 → django_pfx-1.4.dev116}/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.dev114
3
+ Version: 1.4.dev116
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.dev114
3
+ Version: 1.4.dev116
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
@@ -0,0 +1,33 @@
1
+ from decimal import Decimal
2
+
3
+ from django.db import models
4
+
5
+
6
+ class DecimalField(models.DecimalField):
7
+ def __init__(
8
+ self, *args, percent=False, currency=None,
9
+ json_decimal_places=None, **kw):
10
+ super().__init__(*args, **kw)
11
+ self.percent = percent
12
+ self.currency = currency
13
+ self.json_quantize = Decimal(10) ** -(json_decimal_places or (
14
+ percent and self.decimal_places - 2 or self.decimal_places))
15
+
16
+ def to_json_meta(self, meta):
17
+ meta.update(
18
+ percent=self.percent,
19
+ currency=self.currency)
20
+ return meta
21
+
22
+ def to_json(self, value):
23
+ if value is None:
24
+ return None
25
+ if self.percent:
26
+ value *= Decimal(100)
27
+ return value.quantize(self.json_quantize)
28
+
29
+ def from_json(self, value):
30
+ if value is None:
31
+ return None
32
+ value = Decimal(value)
33
+ return self.percent and value / Decimal(100) or value
@@ -332,6 +332,8 @@ class ViewModelField(ViewField):
332
332
  res['required'] = not (
333
333
  getattr(self.model_field, 'null', False) or
334
334
  getattr(self.model_field, 'blank', False))
335
+ if hasattr(self.model_field, 'to_json_meta'):
336
+ res = self.model_field.to_json_meta(res)
335
337
  return res
336
338
 
337
339
  def to_model_value(self, value, get_related_queryset):
@@ -346,6 +348,8 @@ class ViewModelField(ViewField):
346
348
  value = _get_obj(value)
347
349
  elif self.field_type == FieldType.ModelObjectList:
348
350
  value = ModelList(_get_obj(v) for v in value)
351
+ elif hasattr(field, 'from_json'):
352
+ value = field.from_json(value)
349
353
  elif hasattr(field, 'choices') and field.choices:
350
354
  value = (value['value']
351
355
  if isinstance(value, dict) and 'value' in value
@@ -17,6 +17,11 @@ from tests.views import FakeViewMixin
17
17
  class TestDecimalModel(JSONReprMixin, models.Model):
18
18
  decimal = DecimalField(
19
19
  max_digits=10, decimal_places=5, json_decimal_places=2)
20
+ percent = DecimalField(
21
+ max_digits=10, decimal_places=4, percent=True)
22
+ monetary = DecimalField(
23
+ max_digits=10, decimal_places=5, json_decimal_places=2,
24
+ currency="CHF")
20
25
 
21
26
  class Meta:
22
27
  verbose_name = "TestModel"
@@ -28,7 +33,7 @@ class TestDecimalModel(JSONReprMixin, models.Model):
28
33
  class DecimalModelRestView(FakeViewMixin, RestView):
29
34
  default_public = True
30
35
  model = TestDecimalModel
31
- fields = ['decimal']
36
+ fields = ['decimal', 'percent', 'monetary']
32
37
 
33
38
 
34
39
  urlpatterns = [
@@ -48,12 +53,37 @@ class TestFieldsDecimal(TestAssertMixin, TestCase):
48
53
  with connection.schema_editor() as schema_editor:
49
54
  schema_editor.create_model(TestDecimalModel)
50
55
 
56
+ def test_decimal_meta(self):
57
+ response = self.client.get('/api/test-decimal-model/meta')
58
+ self.assertRC(response, 200)
59
+ self.assertJE(response, 'fields.decimal.percent', False)
60
+ self.assertJE(response, 'fields.decimal.currency', None)
61
+ self.assertJE(response, 'fields.percent.percent', True)
62
+ self.assertJE(response, 'fields.percent.currency', None)
63
+ self.assertJE(response, 'fields.monetary.percent', False)
64
+ self.assertJE(response, 'fields.monetary.currency', "CHF")
65
+
51
66
  def test_decimal(self):
52
- t = TestDecimalModel.objects.create(decimal=3.14)
67
+ t = TestDecimalModel.objects.create(
68
+ decimal=3.14, percent=0.0810, monetary=100)
53
69
  t.save()
54
70
  t.refresh_from_db()
55
71
  self.assertEqual(t.decimal, Decimal('3.14000'))
72
+ self.assertEqual(t.percent, Decimal('0.0810'))
56
73
 
57
74
  response = self.client.get(f'/api/test-decimal-model/{t.pk}')
58
75
  self.assertRC(response, 200)
59
76
  self.assertJE(response, 'decimal', "3.14")
77
+ self.assertJE(response, 'percent', "8.10")
78
+
79
+ response = self.client.put(f'/api/test-decimal-model/{t.pk}', dict(
80
+ decimal="3.12121",
81
+ percent="7.7",
82
+ ))
83
+ self.assertRC(response, 200)
84
+ self.assertJE(response, 'decimal', "3.12")
85
+ self.assertJE(response, 'percent', "7.70")
86
+
87
+ t.refresh_from_db()
88
+ self.assertEqual(t.decimal, Decimal('3.12121'))
89
+ self.assertEqual(t.percent, Decimal('0.0770'))
@@ -1,15 +0,0 @@
1
- from decimal import Decimal
2
-
3
- from django.db import models
4
-
5
-
6
- class DecimalField(models.DecimalField):
7
- def __init__(self, *args, json_decimal_places=None, **kw):
8
- super().__init__(*args, **kw)
9
- self.json_quantize = Decimal(10) ** -(
10
- json_decimal_places or self.decimal_places)
11
-
12
- def to_json(self, value):
13
- if value is None:
14
- return None
15
- return value.quantize(self.json_quantize)
File without changes