django-pfx 1.7.6.dev27__tar.gz → 1.7.6.dev29__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 (327) hide show
  1. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/PKG-INFO +1 -1
  2. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/PKG-INFO +1 -1
  3. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/scm_version.json +2 -2
  4. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/test.py +10 -0
  5. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +8 -8
  6. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/abstract_pfx_base_user.py +3 -1
  7. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/shortcuts.py +2 -1
  8. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/__init__.py +4 -0
  9. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_auth_api.py +4 -4
  10. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_emails_q_mailjet_email_backend.py +2 -2
  11. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_emails_send_email_message.py +7 -7
  12. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_emails_test_tools.py +4 -1
  13. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/tests/test_auth_api.py +2 -2
  14. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/tests/test_auth_api.py +2 -3
  15. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/tests/test_auth_api.py +4 -4
  16. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/.gitignore +0 -0
  17. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/.gitlab-ci.yml +0 -0
  18. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/.pre-commit-config.yaml +0 -0
  19. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/LICENSE +0 -0
  20. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/MANIFEST.in +0 -0
  21. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/README.md +0 -0
  22. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/SOURCES.txt +0 -0
  23. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/dependency_links.txt +0 -0
  24. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/requires.txt +0 -0
  25. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/scm_file_list.json +0 -0
  26. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/django_pfx.egg-info/top_level.txt +0 -0
  27. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/Makefile +0 -0
  28. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/conf.py +0 -0
  29. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/index.rst +0 -0
  30. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/api.views.rst +0 -0
  31. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/authentication.md +0 -0
  32. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/decorator.md +0 -0
  33. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/generate_openapi.md +0 -0
  34. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/getting_started.md +0 -0
  35. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/internationalisation.md +0 -0
  36. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/model.md +0 -0
  37. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/pfx_views.md +0 -0
  38. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/profiling.md +0 -0
  39. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/settings.md +0 -0
  40. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/testing.md +0 -0
  41. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/doc/source/user_jobs.md +0 -0
  42. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/img/pfx.png +0 -0
  43. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/img/pfx.svg +0 -0
  44. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/make_messages +0 -0
  45. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/manage.py +0 -0
  46. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/__init__.py +0 -0
  47. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/__init__.py +0 -0
  48. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/apps.py +0 -0
  49. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/email_backend/__init__.py +0 -0
  50. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/email_backend/memory_email_backend.py +0 -0
  51. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/email_backend/q_mailjet_email_backend.py +0 -0
  52. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/exceptions.py +0 -0
  53. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/locale/fr/LC_MESSAGES/django.mo +0 -0
  54. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/locale/fr/LC_MESSAGES/django.po +0 -0
  55. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/mailjet/__init__.py +0 -0
  56. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/mailjet/mailjet.py +0 -0
  57. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/mailjet/message_result.py +0 -0
  58. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/0001_initial.py +0 -0
  59. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/0002_alter_email_headers.py +0 -0
  60. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/0003_alter_email_options.py +0 -0
  61. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/0004_alter_email_mail_from.py +0 -0
  62. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/0005_lowercase_verbose_names.py +0 -0
  63. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/0006_alter_email_attachments.py +0 -0
  64. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/migrations/__init__.py +0 -0
  65. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/models/__init__.py +0 -0
  66. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/models/email.py +0 -0
  67. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/providers/__init__.py +0 -0
  68. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/providers/email_django_q_executor.py +0 -0
  69. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/shortcuts.py +0 -0
  70. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/tasks.py +0 -0
  71. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/templates/emails/base_template.html +0 -0
  72. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/templates/emails/base_template.txt +0 -0
  73. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/templates/emails/base_template_subject.txt +0 -0
  74. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/urls.py +0 -0
  75. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/views/__init__.py +0 -0
  76. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/emails/views/email_rest_view.py +0 -0
  77. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/__init__.py +0 -0
  78. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/apidoc/__init__.py +0 -0
  79. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/apidoc/parameters.py +0 -0
  80. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/apidoc/schema.py +0 -0
  81. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/apidoc/tags.py +0 -0
  82. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/apps.py +0 -0
  83. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/decorator/__init__.py +0 -0
  84. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/decorator/rest.py +0 -0
  85. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/default_settings.py +0 -0
  86. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/exceptions.py +0 -0
  87. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/fields/__init__.py +0 -0
  88. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/fields/decimal_field.py +0 -0
  89. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/fields/media_field.py +0 -0
  90. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
  91. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/fields/rich_text_field.py +0 -0
  92. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/http/__init__.py +0 -0
  93. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/http/json_response.py +0 -0
  94. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
  95. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/management/__init__.py +0 -0
  96. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/management/commands/__init__.py +0 -0
  97. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
  98. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/management/commands/profile.py +0 -0
  99. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/mfa/__init__.py +0 -0
  100. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/mfa/authenticator.py +0 -0
  101. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/mfa/base.py +0 -0
  102. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/mfa/email.py +0 -0
  103. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/mfa/legacy.py +0 -0
  104. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/mfa/sms.py +0 -0
  105. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/middleware/__init__.py +0 -0
  106. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/middleware/authentication.py +0 -0
  107. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/middleware/locale.py +0 -0
  108. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/middleware/profiling.py +0 -0
  109. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/middleware/request_too_big_middleware.py +0 -0
  110. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/middleware/ws_cookie_authentication_middleware.py +0 -0
  111. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0001_initial.py +0 -0
  112. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
  113. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
  114. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
  115. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0005_mfadevice_mfadevice_mfa_device_unique_backend.py +0 -0
  116. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0006_alter_pfxuser_managers.py +0 -0
  117. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0007_alter_pfxuser_options.py +0 -0
  118. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/0008_lowercase_verbose_names.py +0 -0
  119. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/__init__.py +0 -0
  120. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
  121. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
  122. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/__init__.py +0 -0
  123. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/attachment_mixin.py +0 -0
  124. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/cache_mixins.py +0 -0
  125. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/login_ban.py +0 -0
  126. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/mfa_device.py +0 -0
  127. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/mfa_user_mixin.py +0 -0
  128. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/not_null_fields.py +0 -0
  129. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
  130. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/pfx_models.py +0 -0
  131. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/pfx_user.py +0 -0
  132. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
  133. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/serializers/__init__.py +0 -0
  134. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/serializers/json.py +0 -0
  135. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/settings.py +0 -0
  136. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/sms/__init__.py +0 -0
  137. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/sms/backends/__init__.py +0 -0
  138. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/sms/backends/base.py +0 -0
  139. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/sms/backends/console.py +0 -0
  140. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/sms/backends/memory.py +0 -0
  141. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/storage/__init__.py +0 -0
  142. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/storage/exceptions.py +0 -0
  143. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/storage/local_storage.py +0 -0
  144. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/storage/s3_storage.py +0 -0
  145. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
  146. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
  147. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
  148. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
  149. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
  150. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
  151. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/test.py +0 -0
  152. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/urls.py +0 -0
  153. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/version_check.py +0 -0
  154. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/__init__.py +0 -0
  155. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/authentication_views.py +0 -0
  156. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/fields.py +0 -0
  157. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/filters_views.py +0 -0
  158. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/locale_views.py +0 -0
  159. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
  160. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/mfa_authentication_views.py +0 -0
  161. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
  162. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/__init__.py +0 -0
  163. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/date_format.py +0 -0
  164. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/groups.py +0 -0
  165. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/list_count.py +0 -0
  166. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/list_items.py +0 -0
  167. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
  168. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/list_order.py +0 -0
  169. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/list_search.py +0 -0
  170. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
  171. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
  172. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
  173. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
  174. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/subset.py +0 -0
  175. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
  176. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
  177. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
  178. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
  179. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
  180. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/views/rest_views.py +0 -0
  181. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/pfxcore/xml_test_runner.py +0 -0
  182. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/settings/__init__.py +0 -0
  183. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/settings/dev.py +0 -0
  184. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/__init__.py +0 -0
  185. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/apps.py +0 -0
  186. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/locale/fr/LC_MESSAGES/django.mo +0 -0
  187. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/locale/fr/LC_MESSAGES/django.po +0 -0
  188. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/0001_initial.py +0 -0
  189. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/0002_alter_userjob_options_alter_userjob_auto_queued_and_more.py +0 -0
  190. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/0003_clean_scheduled_tasks.py +0 -0
  191. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/0004_userjob_summary_url.py +0 -0
  192. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/0005_swappable_user_job.py +0 -0
  193. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/0006_lowercase_verbose_names.py +0 -0
  194. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/migrations/__init__.py +0 -0
  195. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/models/__init__.py +0 -0
  196. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/models/user_job.py +0 -0
  197. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/models/user_job_attachment.py +0 -0
  198. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/providers/__init__.py +0 -0
  199. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/providers/user_job_django_q_executor.py +0 -0
  200. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/providers/user_job_websocket_channel_provider.py +0 -0
  201. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/tasks.py +0 -0
  202. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/urls.py +0 -0
  203. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/views/__init__.py +0 -0
  204. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/views/user_job_attachment_view.py +0 -0
  205. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/views/user_job_view.py +0 -0
  206. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pfx/userjobs/views/user_websocket_consumer.py +0 -0
  207. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/pyproject.toml +0 -0
  208. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/requirements.txt +0 -0
  209. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/serve-doc +0 -0
  210. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/setup.cfg +0 -0
  211. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/setup.py +0 -0
  212. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/__init__.py +0 -0
  213. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/apps.py +0 -0
  214. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/channel_group_send_calls.py +0 -0
  215. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
  216. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/mfa_urls.py +0 -0
  217. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/migrations/0001_initial.py +0 -0
  218. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/migrations/__init__.py +0 -0
  219. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/models.py +0 -0
  220. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/settings/__init__.py +0 -0
  221. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/settings/ci.py +0 -0
  222. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/settings/common.py +0 -0
  223. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/settings/dev.py +0 -0
  224. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/settings/dev_custom_example.py +0 -0
  225. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/settings/dev_default.py +0 -0
  226. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/basic_api_errors.py +0 -0
  227. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/basic_api_test.py +0 -0
  228. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/mfa_test_utils.py +0 -0
  229. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_api_doc.py +0 -0
  230. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_api_doc_search.py +0 -0
  231. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_body_mixin.py +0 -0
  232. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_cache.py +0 -0
  233. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_client.py +0 -0
  234. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_emails_email_api.py +0 -0
  235. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_emails_email_model.py +0 -0
  236. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_choices.py +0 -0
  237. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_date.py +0 -0
  238. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_decimal.py +0 -0
  239. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_help_text.py +0 -0
  240. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_minutes_duration.py +0 -0
  241. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_one2many.py +0 -0
  242. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_rich_text.py +0 -0
  243. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_fields_time.py +0 -0
  244. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_filters.py +0 -0
  245. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_locale_api.py +0 -0
  246. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_mfa_legacy.py +0 -0
  247. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_mfa_login_api.py +0 -0
  248. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_mfa_setup_api.py +0 -0
  249. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
  250. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_perm_tests.py +0 -0
  251. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_permissions.py +0 -0
  252. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_perms_api.py +0 -0
  253. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_post_migrate_groups_update.py +0 -0
  254. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_profiling_middleware.py +0 -0
  255. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_settings.py +0 -0
  256. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_shortcuts.py +0 -0
  257. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_test_runner.py +0 -0
  258. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_timezone_middleware.py +0 -0
  259. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_tools.py +0 -0
  260. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_user_job_api.py +0 -0
  261. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_user_job_messages.py +0 -0
  262. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_user_job_model.py +0 -0
  263. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_user_queryset.py +0 -0
  264. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_user_websocket.py +0 -0
  265. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_verbose_names.py +0 -0
  266. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_version_check.py +0 -0
  267. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_view_decorators.py +0 -0
  268. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_view_fields.py +0 -0
  269. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/tests/test_ws_cookie_middleware.py +0 -0
  270. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/urls.py +0 -0
  271. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests/views.py +0 -0
  272. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/__init__.py +0 -0
  273. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/migrations/__init__.py +0 -0
  274. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/settings/__init__.py +0 -0
  275. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/settings/ci.py +0 -0
  276. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/settings/common.py +0 -0
  277. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/settings/dev.py +0 -0
  278. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/settings/dev_custom_example.py +0 -0
  279. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/settings/dev_default.py +0 -0
  280. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/tests/__init__.py +0 -0
  281. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/tests/test_api.py +0 -0
  282. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/urls.py +0 -0
  283. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_base_user/views.py +0 -0
  284. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/__init__.py +0 -0
  285. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/migrations/0001_initial.py +0 -0
  286. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/migrations/__init__.py +0 -0
  287. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/models.py +0 -0
  288. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/settings/__init__.py +0 -0
  289. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/settings/ci.py +0 -0
  290. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/settings/common.py +0 -0
  291. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/settings/dev.py +0 -0
  292. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/settings/dev_custom_example.py +0 -0
  293. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/settings/dev_default.py +0 -0
  294. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/tests/__init__.py +0 -0
  295. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/tests/test_api.py +0 -0
  296. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/urls.py +0 -0
  297. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user/views.py +0 -0
  298. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/__init__.py +0 -0
  299. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/migrations/0001_initial.py +0 -0
  300. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/migrations/0002_lowercase_verbose_names.py +0 -0
  301. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/migrations/__init__.py +0 -0
  302. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/models.py +0 -0
  303. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/providers.py +0 -0
  304. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/scope.py +0 -0
  305. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/settings/__init__.py +0 -0
  306. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/settings/ci.py +0 -0
  307. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/settings/common.py +0 -0
  308. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/settings/dev.py +0 -0
  309. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/settings/dev_custom_example.py +0 -0
  310. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/settings/dev_default.py +0 -0
  311. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/tests/__init__.py +0 -0
  312. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/tests/test_user_job.py +0 -0
  313. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_custom_user_job/urls.py +0 -0
  314. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/__init__.py +0 -0
  315. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/migrations/0001_initial.py +0 -0
  316. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/migrations/__init__.py +0 -0
  317. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/models.py +0 -0
  318. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/settings/__init__.py +0 -0
  319. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/settings/ci.py +0 -0
  320. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/settings/common.py +0 -0
  321. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/settings/dev.py +0 -0
  322. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/settings/dev_custom_example.py +0 -0
  323. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/settings/dev_default.py +0 -0
  324. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/tests/__init__.py +0 -0
  325. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/tests/test_api.py +0 -0
  326. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/tests_user_email_login/urls.py +0 -0
  327. {django_pfx-1.7.6.dev27 → django_pfx-1.7.6.dev29}/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.dev27
3
+ Version: 1.7.6.dev29
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.dev27
3
+ Version: 1.7.6.dev29
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,7 +1,7 @@
1
1
  {
2
2
  "tag": "1.7.5",
3
- "distance": 27,
4
- "node": "g805fe3e9400fc8312cc217f4cd37c07c7024a3ef",
3
+ "distance": 29,
4
+ "node": "g3ac4d4252191bd4277a75095572cb9f46018b71f",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-05"
@@ -1,3 +1,5 @@
1
+ from email.utils import formataddr
2
+
1
3
  from django.conf import settings
2
4
  from django.utils.module_loading import import_string
3
5
 
@@ -33,6 +35,14 @@ class EmailTestMixin:
33
35
  """The addresses of the ``To`` of ``email``, without the names."""
34
36
  return [r['Email'] for r in email.mail_to]
35
37
 
38
+ @classmethod
39
+ def email_to_rfc(cls, email):
40
+ """The addresses of the ``To`` of ``email``, with the names."""
41
+ return [
42
+ formataddr((r['Name'], r['Email'])) if r.get('Name')
43
+ else r['Email']
44
+ for r in email.mail_to]
45
+
36
46
  @classmethod
37
47
  def get_email_html(cls, email):
38
48
  if not email.html_part:
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: \n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
- "POT-Creation-Date: 2026-10-01 06:30+0200\n"
10
+ "POT-Creation-Date: 2026-10-05 17:02+0200\n"
11
11
  "PO-Revision-Date: 2021-06-22 23:31+0200\n"
12
12
  "Last-Translator: \n"
13
13
  "Language-Team: \n"
@@ -66,11 +66,11 @@ msgstr ""
66
66
  msgid "Your {site_name} verification code: {otp_code}"
67
67
  msgstr "Votre code pour {site_name} : {otp_code}"
68
68
 
69
- #: models/abstract_pfx_base_user.py:89
69
+ #: models/abstract_pfx_base_user.py:91
70
70
  msgid "User"
71
71
  msgstr "Utilisateur"
72
72
 
73
- #: models/abstract_pfx_base_user.py:90
73
+ #: models/abstract_pfx_base_user.py:92
74
74
  msgid "Users"
75
75
  msgstr "Utilisateurs"
76
76
 
@@ -180,27 +180,27 @@ msgstr "séquence"
180
180
  msgid "%(model_name)s with this %(field_labels)s already exists."
181
181
  msgstr "%(model_name)s avec ce/cette %(field_labels)s existe déjà."
182
182
 
183
- #: shortcuts.py:52
183
+ #: shortcuts.py:53
184
184
  #, python-brace-format
185
185
  msgid "{key} must be an integer number."
186
186
  msgstr "{key} doit être un nombre entier."
187
187
 
188
- #: shortcuts.py:68
188
+ #: shortcuts.py:69
189
189
  #, python-brace-format
190
190
  msgid "{key} must be a number."
191
191
  msgstr "{key} doit être un nombre."
192
192
 
193
- #: shortcuts.py:84
193
+ #: shortcuts.py:85
194
194
  #, python-brace-format
195
195
  msgid "{key} must be a decimal number."
196
196
  msgstr "{key} doit être un nombre décimal."
197
197
 
198
- #: shortcuts.py:100
198
+ #: shortcuts.py:101
199
199
  #, python-brace-format
200
200
  msgid "{key} must be a date."
201
201
  msgstr "{key} doit être une date."
202
202
 
203
- #: shortcuts.py:121
203
+ #: shortcuts.py:122
204
204
  #, python-brace-format
205
205
  msgid "{key} must be “true”, “false”, “1”, “0” or empty."
206
206
  msgstr "{key} doit être « true », « false », « 1 », « 0 » ou vide"
@@ -1,3 +1,5 @@
1
+ from email.utils import formataddr
2
+
1
3
  from django.contrib.auth.models import (
2
4
  AbstractBaseUser,
3
5
  AbstractUser,
@@ -37,7 +39,7 @@ class AbstractPFXBaseUser(PFXModelMixin, AbstractBaseUser):
37
39
  def get_email_rfc(self):
38
40
  name = self.get_email_name()
39
41
  email = getattr(self, self.get_email_field_name())
40
- return f'"{name}" <{email}>'
42
+ return formataddr((name, email))
41
43
 
42
44
  def auth_json_repr(self, **kw):
43
45
  res = self.json_repr(
@@ -2,6 +2,7 @@
2
2
  import logging
3
3
  from datetime import date
4
4
  from decimal import Decimal as D
5
+ from email.utils import formataddr
5
6
  from pathlib import Path
6
7
 
7
8
  from django.core.exceptions import ObjectDoesNotExist
@@ -183,5 +184,5 @@ def default_mail_from():
183
184
  def default_mail_from_rfc():
184
185
  name, email = default_mail_from()
185
186
  if name:
186
- return f'"{name}" <{email}>'
187
+ return formataddr((name, email))
187
188
  return email
@@ -10,6 +10,10 @@ from .test_emails_email_api import TestEmailsEmailApi
10
10
  from .test_emails_email_model import TestEmailsEmailModel
11
11
  from .test_emails_q_mailjet_email_backend import TestEmailsQMailjetEmailBackend
12
12
  from .test_emails_send_email_message import TestEmailsSendEmailMessage
13
+ from .test_emails_test_tools import (
14
+ TestEmailTestMixinWithLocmem,
15
+ TestMemoryEmailBackend,
16
+ )
13
17
  from .test_fields_choices import TestFieldsChoices
14
18
  from .test_fields_date import TestFieldsDate
15
19
  from .test_fields_decimal import TestFieldsDecimal
@@ -758,8 +758,8 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
758
758
 
759
759
  # Must send a welcome email
760
760
  email = mail.outbox[0]
761
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
762
- self.assertEqual(email.to, ['"Isaac Asimov" <isaac.asimov@bu.edu>'])
761
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
762
+ self.assertEqual(email.to, ['Isaac Asimov <isaac.asimov@bu.edu>'])
763
763
  self.assertEqual(email.subject, f'Welcome on {settings.PFX_SITE_NAME}')
764
764
 
765
765
  self.client.logout()
@@ -817,9 +817,9 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
817
817
  # Must send a reset password email
818
818
  self.assertEqual(len(mail.outbox), 1)
819
819
  email = mail.outbox[0]
820
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
820
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
821
821
  self.assertEqual(email.to, [
822
- '"John Ronald Reuel Tolkien" <jrr.tolkien@oxford.com>'])
822
+ 'John Ronald Reuel Tolkien <jrr.tolkien@oxford.com>'])
823
823
  self.assertEqual(
824
824
  email.subject, f'Password reset on {settings.PFX_SITE_NAME}')
825
825
 
@@ -32,8 +32,8 @@ class TestEmailsQMailjetEmailBackend(TestAssertMixin, TestCase):
32
32
  send_mail(
33
33
  'This is a test email',
34
34
  'This is the mail content.',
35
- '"Fred" <from@example.com>',
36
- ['"AL" <to@example.com>'],
35
+ 'Fred <from@example.com>',
36
+ ['AL <to@example.com>'],
37
37
  fail_silently=False)
38
38
  mail = Email.objects.get(subject='This is a test email')
39
39
  self.assertEqual(mail.text_part, 'This is the mail content.')
@@ -62,29 +62,29 @@ class TestEmailsSendEmailMessage(TestAssertMixin, TestCase):
62
62
  'base_template',
63
63
  data={'subject': "Test message"})
64
64
  m = mail.outbox[0]
65
- self.assertEqual(m.to[0], '"Test User 2" <test2@example.org>')
65
+ self.assertEqual(m.to[0], 'Test User 2 <test2@example.org>')
66
66
 
67
67
  send_email_message(
68
68
  SimpleNamespace(
69
- get_email_rfc=lambda: '"Test 2" <test2@example.org>'),
69
+ get_email_rfc=lambda: 'Test 2 <test2@example.org>'),
70
70
  'base_template',
71
71
  data={'subject': "Test message"})
72
72
  m = mail.outbox[1]
73
- self.assertEqual(m.to[0], '"Test 2" <test2@example.org>')
73
+ self.assertEqual(m.to[0], 'Test 2 <test2@example.org>')
74
74
 
75
75
  send_email_message(
76
- SimpleNamespace(email_rfc='"Test 1" <test1@example.org>'),
76
+ SimpleNamespace(email_rfc='Test 1 <test1@example.org>'),
77
77
  'base_template',
78
78
  data={'subject': "Test message"})
79
79
  m = mail.outbox[2]
80
- self.assertEqual(m.to[0], '"Test 1" <test1@example.org>')
80
+ self.assertEqual(m.to[0], 'Test 1 <test1@example.org>')
81
81
 
82
82
  send_email_message(
83
- SimpleNamespace(email_rfc=lambda: '"Test 1" <test1@example.org>'),
83
+ SimpleNamespace(email_rfc=lambda: 'Test 1 <test1@example.org>'),
84
84
  'base_template',
85
85
  data={'subject': "Test message"})
86
86
  m = mail.outbox[3]
87
- self.assertEqual(m.to[0], '"Test 1" <test1@example.org>')
87
+ self.assertEqual(m.to[0], 'Test 1 <test1@example.org>')
88
88
 
89
89
  send_email_message(
90
90
  SimpleNamespace(email='test3@example.org'),
@@ -30,7 +30,7 @@ class TestMemoryEmailBackend(EmailTestMixin, TestCase):
30
30
  def test_outbox_helpers(self):
31
31
  send_mail(
32
32
  'First', 'Content', 'from@example.com',
33
- ['"Jean Dupont" <jean@example.com>', 'paul@example.com'])
33
+ ['Jean Dupont <jean@example.com>', 'paul@example.com'])
34
34
  message = EmailMultiAlternatives(
35
35
  'Second', 'Text', 'from@example.com', ['marie@example.com'])
36
36
  message.attach_alternative('<p>HTML</p>', 'text/html')
@@ -41,6 +41,9 @@ class TestMemoryEmailBackend(EmailTestMixin, TestCase):
41
41
  [first.subject, second.subject], ['First', 'Second'])
42
42
  self.assertEqual(
43
43
  self.email_to(first), ['jean@example.com', 'paul@example.com'])
44
+ self.assertEqual(
45
+ self.email_to_rfc(first),
46
+ ['Jean Dupont <jean@example.com>', 'paul@example.com'])
44
47
  self.assertEqual(self.get_email_html(second), '<p>HTML</p>')
45
48
  with self.assertRaises(AssertionError):
46
49
  self.get_email_html(first)
@@ -159,9 +159,9 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
159
159
  # Must send a reset password email
160
160
  self.assertEqual(len(mail.outbox), 1)
161
161
  email = mail.outbox[0]
162
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
162
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
163
163
  self.assertEqual(email.to, [
164
- '"John Ronald Reuel Tolkien" <jrr.tolkien@oxford.com>'])
164
+ 'John Ronald Reuel Tolkien <jrr.tolkien@oxford.com>'])
165
165
  self.assertEqual(
166
166
  email.subject, f'Password reset on {settings.PFX_SITE_NAME}')
167
167
 
@@ -6,7 +6,6 @@ from datetime import timedelta as td
6
6
  from django.conf import settings
7
7
  from django.contrib.auth.hashers import make_password
8
8
  from django.core import mail
9
- # from django.core import mail
10
9
  from django.test import TransactionTestCase, override_settings
11
10
  from django.utils import timezone as tz
12
11
 
@@ -136,7 +135,7 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
136
135
  # Must send a reset password email
137
136
  self.assertEqual(len(mail.outbox), 1)
138
137
  email = mail.outbox[0]
139
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
138
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
140
139
  self.assertEqual(email.to, ['"jrr.tolkien" <jrr.tolkien@oxford.com>'])
141
140
  self.assertEqual(
142
141
  email.subject, f'Password reset on {settings.PFX_SITE_NAME}')
@@ -175,7 +174,7 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
175
174
  # Must send a reset password email
176
175
  self.assertEqual(len(mail.outbox), 1)
177
176
  email = mail.outbox[0]
178
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
177
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
179
178
  self.assertEqual(email.to, ['"jrr.tolkien" <jrr.tolkien@oxford.com>'])
180
179
  self.assertEqual(
181
180
  email.subject, f'Password reset on {settings.PFX_SITE_NAME}')
@@ -136,8 +136,8 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
136
136
  # Must send a reset password email
137
137
  self.assertEqual(len(mail.outbox), 1)
138
138
  email = mail.outbox[0]
139
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
140
- self.assertEqual(email.to, ['"JRR Tolkien" <jrr.tolkien@oxford.com>'])
139
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
140
+ self.assertEqual(email.to, ['JRR Tolkien <jrr.tolkien@oxford.com>'])
141
141
  self.assertEqual(
142
142
  email.subject, f'Password reset on {settings.PFX_SITE_NAME}')
143
143
 
@@ -175,8 +175,8 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
175
175
  # Must send a reset password email
176
176
  self.assertEqual(len(mail.outbox), 1)
177
177
  email = mail.outbox[0]
178
- self.assertEqual(email.from_email, '"PFX" <pfx@example.com>')
179
- self.assertEqual(email.to, ['"JRR Tolkien" <jrr.tolkien@oxford.com>'])
178
+ self.assertEqual(email.from_email, 'PFX <pfx@example.com>')
179
+ self.assertEqual(email.to, ['JRR Tolkien <jrr.tolkien@oxford.com>'])
180
180
  self.assertEqual(
181
181
  email.subject, f'Password reset on {settings.PFX_SITE_NAME}')
182
182