django-pfx 1.7.3.dev10__tar.gz → 1.7.3.dev14__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 (263) hide show
  1. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/PKG-INFO +1 -1
  2. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/django_pfx.egg-info/PKG-INFO +1 -1
  3. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/django_pfx.egg-info/SOURCES.txt +3 -0
  4. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/middleware/__init__.py +4 -0
  5. django_pfx-1.7.3.dev14/pfx/pfxcore/middleware/request_too_big_middleware.py +25 -0
  6. django_pfx-1.7.3.dev14/pfx/pfxcore/middleware/ws_cookie_authentication_middleware.py +45 -0
  7. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/__init__.py +1 -0
  8. django_pfx-1.7.3.dev14/tests/tests/test_user_websocket.py +79 -0
  9. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/.gitignore +0 -0
  10. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/.gitlab-ci.yml +0 -0
  11. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/.pre-commit-config.yaml +0 -0
  12. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/LICENSE +0 -0
  13. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/MANIFEST.in +0 -0
  14. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/README.md +0 -0
  15. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/django_pfx.egg-info/dependency_links.txt +0 -0
  16. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/django_pfx.egg-info/requires.txt +0 -0
  17. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/django_pfx.egg-info/top_level.txt +0 -0
  18. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/Makefile +0 -0
  19. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/conf.py +0 -0
  20. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/index.rst +0 -0
  21. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/api.views.rst +0 -0
  22. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/authentication.md +0 -0
  23. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/decorator.md +0 -0
  24. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/generate_openapi.md +0 -0
  25. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/getting_started.md +0 -0
  26. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/internationalisation.md +0 -0
  27. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/model.md +0 -0
  28. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/pfx_views.md +0 -0
  29. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/profiling.md +0 -0
  30. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/settings.md +0 -0
  31. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/doc/source/testing.md +0 -0
  32. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/img/pfx.png +0 -0
  33. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/img/pfx.svg +0 -0
  34. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/make_messages +0 -0
  35. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/manage.py +0 -0
  36. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/__init__.py +0 -0
  37. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/__init__.py +0 -0
  38. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/apps.py +0 -0
  39. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/email_backend/__init__.py +0 -0
  40. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/email_backend/q_mailjet_email_backend.py +0 -0
  41. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/exceptions.py +0 -0
  42. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/mailjet/__init__.py +0 -0
  43. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/mailjet/mailjet.py +0 -0
  44. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/mailjet/message_result.py +0 -0
  45. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/migrations/0001_initial.py +0 -0
  46. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/migrations/0002_alter_email_headers.py +0 -0
  47. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/migrations/0003_alter_email_options.py +0 -0
  48. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/migrations/__init__.py +0 -0
  49. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/models/__init__.py +0 -0
  50. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/models/email.py +0 -0
  51. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/providers/__init__.py +0 -0
  52. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/providers/email_django_q_executor.py +0 -0
  53. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/shortcuts.py +0 -0
  54. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/tasks.py +0 -0
  55. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/templates/emails/base_template.html +0 -0
  56. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/templates/emails/base_template.txt +0 -0
  57. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/templates/emails/base_template_subject.txt +0 -0
  58. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/urls.py +0 -0
  59. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/views/__init__.py +0 -0
  60. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/emails/views/email_rest_view.py +0 -0
  61. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/__init__.py +0 -0
  62. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/apidoc/__init__.py +0 -0
  63. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/apidoc/parameters.py +0 -0
  64. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/apidoc/schema.py +0 -0
  65. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/apidoc/tags.py +0 -0
  66. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/apps.py +0 -0
  67. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/decorator/__init__.py +0 -0
  68. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/decorator/rest.py +0 -0
  69. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/default_settings.py +0 -0
  70. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/exceptions.py +0 -0
  71. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/fields/__init__.py +0 -0
  72. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/fields/decimal_field.py +0 -0
  73. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/fields/media_field.py +0 -0
  74. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
  75. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/fields/rich_text_field.py +0 -0
  76. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/http/__init__.py +0 -0
  77. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/http/json_response.py +0 -0
  78. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
  79. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
  80. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/management/__init__.py +0 -0
  81. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/management/commands/__init__.py +0 -0
  82. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
  83. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/management/commands/profile.py +0 -0
  84. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/middleware/authentication.py +0 -0
  85. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/middleware/locale.py +0 -0
  86. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/middleware/profiling.py +0 -0
  87. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/0001_initial.py +0 -0
  88. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
  89. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
  90. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/0004_alter_loginban_failed_counter_and_more.py +0 -0
  91. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/__init__.py +0 -0
  92. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
  93. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
  94. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/__init__.py +0 -0
  95. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
  96. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/attachment_mixin.py +0 -0
  97. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/cache_mixins.py +0 -0
  98. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/login_ban.py +0 -0
  99. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/mfa_user_mixin.py +0 -0
  100. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/not_null_fields.py +0 -0
  101. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
  102. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/pfx_models.py +0 -0
  103. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/pfx_user.py +0 -0
  104. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
  105. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/serializers/__init__.py +0 -0
  106. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/serializers/json.py +0 -0
  107. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/settings.py +0 -0
  108. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/shortcuts.py +0 -0
  109. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/sms/__init__.py +0 -0
  110. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/sms/backends/__init__.py +0 -0
  111. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/sms/backends/base.py +0 -0
  112. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/sms/backends/console.py +0 -0
  113. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/storage/__init__.py +0 -0
  114. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/storage/exceptions.py +0 -0
  115. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/storage/local_storage.py +0 -0
  116. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/storage/s3_storage.py +0 -0
  117. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
  118. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
  119. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
  120. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
  121. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
  122. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
  123. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/test.py +0 -0
  124. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/urls.py +0 -0
  125. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/__init__.py +0 -0
  126. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/authentication_views.py +0 -0
  127. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/fields.py +0 -0
  128. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/filters_views.py +0 -0
  129. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/locale_views.py +0 -0
  130. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
  131. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
  132. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/__init__.py +0 -0
  133. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/date_format.py +0 -0
  134. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/groups.py +0 -0
  135. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/list_count.py +0 -0
  136. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/list_items.py +0 -0
  137. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
  138. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/list_order.py +0 -0
  139. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/list_search.py +0 -0
  140. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
  141. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
  142. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
  143. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
  144. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/subset.py +0 -0
  145. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
  146. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
  147. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
  148. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
  149. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
  150. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/pfxcore/views/rest_views.py +0 -0
  151. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/settings/__init__.py +0 -0
  152. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/settings/dev.py +0 -0
  153. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/__init__.py +0 -0
  154. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/apps.py +0 -0
  155. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/locale/fr/LC_MESSAGES/django.mo +0 -0
  156. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/locale/fr/LC_MESSAGES/django.po +0 -0
  157. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/migrations/0001_initial.py +0 -0
  158. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/migrations/0002_alter_userjob_options_alter_userjob_auto_queued_and_more.py +0 -0
  159. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/migrations/__init__.py +0 -0
  160. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/models/__init__.py +0 -0
  161. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/models/user_job.py +0 -0
  162. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/models/user_job_attachment.py +0 -0
  163. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/providers/__init__.py +0 -0
  164. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/providers/user_job_django_q_executor.py +0 -0
  165. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/providers/user_job_websocket_channel_provider.py +0 -0
  166. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/tasks.py +0 -0
  167. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/urls.py +0 -0
  168. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/views/__init__.py +0 -0
  169. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/views/user_job_attachment_view.py +0 -0
  170. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/views/user_job_view.py +0 -0
  171. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pfx/userjobs/views/user_websocket_consumer.py +0 -0
  172. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/pyproject.toml +0 -0
  173. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/requirements.txt +0 -0
  174. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/serve-doc +0 -0
  175. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/setup.cfg +0 -0
  176. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/setup.py +0 -0
  177. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/__init__.py +0 -0
  178. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/apps.py +0 -0
  179. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/channel_group_send_calls.py +0 -0
  180. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
  181. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0001_initial.py +0 -0
  182. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0002_alter_book_cover.py +0 -0
  183. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0003_book_local_file.py +0 -0
  184. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0004_mfausermixin_fields.py +0 -0
  185. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0005_mfausermixin_fields_fix.py +0 -0
  186. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0006_rename_otp_enabled_user_mfa_authenticator_enabled_and_more.py +0 -0
  187. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/0007_attachment.py +0 -0
  188. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/migrations/__init__.py +0 -0
  189. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/models.py +0 -0
  190. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/settings/__init__.py +0 -0
  191. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/settings/ci.py +0 -0
  192. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/settings/common.py +0 -0
  193. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/settings/dev.py +0 -0
  194. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/settings/dev_custom_example.py +0 -0
  195. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/settings/dev_default.py +0 -0
  196. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/basic_api_errors.py +0 -0
  197. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/basic_api_test.py +0 -0
  198. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_api_doc.py +0 -0
  199. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_api_doc_search.py +0 -0
  200. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_auth_api.py +0 -0
  201. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_body_mixin.py +0 -0
  202. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_cache.py +0 -0
  203. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_client.py +0 -0
  204. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_emails_email_api.py +0 -0
  205. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_emails_email_model.py +0 -0
  206. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_emails_q_mailjet_email_backend.py +0 -0
  207. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_emails_send_email_message.py +0 -0
  208. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_choices.py +0 -0
  209. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_date.py +0 -0
  210. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_decimal.py +0 -0
  211. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_minutes_duration.py +0 -0
  212. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_one2many.py +0 -0
  213. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_rich_text.py +0 -0
  214. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_fields_time.py +0 -0
  215. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_filters.py +0 -0
  216. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_locale_api.py +0 -0
  217. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
  218. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_perm_tests.py +0 -0
  219. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_permissions.py +0 -0
  220. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_perms_api.py +0 -0
  221. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_post_migrate_groups_update.py +0 -0
  222. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_profiling_middleware.py +0 -0
  223. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_settings.py +0 -0
  224. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_shortcuts.py +0 -0
  225. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_timezone_middleware.py +0 -0
  226. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_tools.py +0 -0
  227. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_user_job_api.py +0 -0
  228. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_user_job_messages.py +0 -0
  229. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_user_job_model.py +0 -0
  230. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_user_queryset.py +0 -0
  231. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_view_decorators.py +0 -0
  232. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/tests/test_view_fields.py +0 -0
  233. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/urls.py +0 -0
  234. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests/views.py +0 -0
  235. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/__init__.py +0 -0
  236. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/migrations/0001_initial.py +0 -0
  237. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/migrations/__init__.py +0 -0
  238. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/settings/__init__.py +0 -0
  239. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/settings/ci.py +0 -0
  240. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/settings/common.py +0 -0
  241. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/settings/dev.py +0 -0
  242. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/settings/dev_custom_example.py +0 -0
  243. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/settings/dev_default.py +0 -0
  244. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/tests/__init__.py +0 -0
  245. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/tests/test_api.py +0 -0
  246. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/tests/test_auth_api.py +0 -0
  247. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/urls.py +0 -0
  248. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_base_user/views.py +0 -0
  249. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/__init__.py +0 -0
  250. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/migrations/0001_initial.py +0 -0
  251. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/migrations/__init__.py +0 -0
  252. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/models.py +0 -0
  253. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/settings/__init__.py +0 -0
  254. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/settings/ci.py +0 -0
  255. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/settings/common.py +0 -0
  256. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/settings/dev.py +0 -0
  257. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/settings/dev_custom_example.py +0 -0
  258. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/settings/dev_default.py +0 -0
  259. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/tests/__init__.py +0 -0
  260. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/tests/test_api.py +0 -0
  261. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/tests/test_auth_api.py +0 -0
  262. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/urls.py +0 -0
  263. {django_pfx-1.7.3.dev10 → django_pfx-1.7.3.dev14}/tests_custom_user/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-pfx
3
- Version: 1.7.3.dev10
3
+ Version: 1.7.3.dev14
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.3.dev10
3
+ Version: 1.7.3.dev14
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
@@ -88,6 +88,8 @@ pfx/pfxcore/middleware/__init__.py
88
88
  pfx/pfxcore/middleware/authentication.py
89
89
  pfx/pfxcore/middleware/locale.py
90
90
  pfx/pfxcore/middleware/profiling.py
91
+ pfx/pfxcore/middleware/request_too_big_middleware.py
92
+ pfx/pfxcore/middleware/ws_cookie_authentication_middleware.py
91
93
  pfx/pfxcore/migrations/0001_initial.py
92
94
  pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
93
95
  pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py
@@ -226,6 +228,7 @@ tests/tests/test_user_job_api.py
226
228
  tests/tests/test_user_job_messages.py
227
229
  tests/tests/test_user_job_model.py
228
230
  tests/tests/test_user_queryset.py
231
+ tests/tests/test_user_websocket.py
229
232
  tests/tests/test_view_decorators.py
230
233
  tests/tests/test_view_fields.py
231
234
  tests_base_user/__init__.py
@@ -4,3 +4,7 @@ from .authentication import (
4
4
  )
5
5
  from .locale import LocaleMiddleware
6
6
  from .profiling import ProfilingDatabaseRouter, ProfilingMiddleware
7
+ from .request_too_big_middleware import RequestTooBigMiddleware
8
+ from .ws_cookie_authentication_middleware import (
9
+ WSCookieAuthenticationMiddleware,
10
+ )
@@ -0,0 +1,25 @@
1
+ from django.conf import settings
2
+ from django.core.exceptions import RequestDataTooBig
3
+ from django.http import HttpResponse
4
+
5
+
6
+ class RequestTooBigMiddleware:
7
+ """Dev middleware to simulate 413 from HTTP reverse proxy.
8
+ Don't use it in production,
9
+ set DATA_UPLOAD_MAX_MEMORY_SIZE > reverse proxy limit.
10
+ """
11
+ def __init__(self, get_response):
12
+ self.get_response = get_response
13
+
14
+ def __call__(self, request):
15
+ try:
16
+ # force body reading to catch RequestDataTooBig early
17
+ _ = request.body
18
+ except RequestDataTooBig:
19
+ response = HttpResponse("Request Entity Too Large", status=413)
20
+ # In dev, UI and API are on different ports,
21
+ # so we need CORS headers.
22
+ response["Access-Control-Allow-Origin"] = settings.PFX_BASE_URL
23
+ response["Access-Control-Allow-Credentials"] = "true"
24
+ return response
25
+ return self.get_response(request)
@@ -0,0 +1,45 @@
1
+ import logging
2
+
3
+ from django.contrib.auth import get_user_model
4
+ from django.contrib.auth.models import AnonymousUser
5
+ from django.http import parse_cookie
6
+
7
+ from channels.db import database_sync_to_async
8
+ from channels.middleware import BaseMiddleware
9
+
10
+ from pfx.pfxcore.exceptions import APIError
11
+ from pfx.pfxcore.http import JsonResponse
12
+ from pfx.pfxcore.middleware.authentication import JWTTokenDecodeMixin
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class WSCookieAuthenticationMiddleware(JWTTokenDecodeMixin, BaseMiddleware):
18
+ async def __call__(self, scope, receive, send):
19
+ scope = dict(scope)
20
+ if "headers" not in scope:
21
+ raise ValueError("No headers")
22
+ # Go through headers to find the cookie one
23
+ for name, value in scope.get("headers", []):
24
+ if name == b"cookie":
25
+ cookies = parse_cookie(value.decode("utf-8"))
26
+ break
27
+ else:
28
+ # No cookie header found - add an empty default.
29
+ cookies = {}
30
+ # Return inner application
31
+ key = cookies.get('token')
32
+ if key:
33
+ try:
34
+ user, __, __ = await database_sync_to_async(
35
+ self.decode_jwt)(key)
36
+ except get_user_model().DoesNotExist:
37
+ return JsonResponse(
38
+ {'message': 'Authentication error'}, status=401)
39
+ except APIError as e:
40
+ return e.response
41
+ elif not scope.get('user'):
42
+ user = AnonymousUser()
43
+
44
+ scope['user'] = user
45
+ return await super().__call__(scope, receive, send)
@@ -33,5 +33,6 @@ from .test_user_job_api import TestUserJobApi
33
33
  from .test_user_job_messages import TestUserJobMessages
34
34
  from .test_user_job_model import TestUserJobModel
35
35
  from .test_user_queryset import TestUserQuerySet
36
+ from .test_user_websocket import TestUserWebsocket
36
37
  from .test_view_decorators import ViewDecoratorTest
37
38
  from .test_view_fields import ViewFieldTest
@@ -0,0 +1,79 @@
1
+ import json
2
+ import logging
3
+
4
+ from django.test import TransactionTestCase
5
+
6
+ from asgiref.sync import sync_to_async
7
+ from channels.routing import URLRouter
8
+ from channels.testing import WebsocketCommunicator
9
+
10
+ from pfx.pfxcore.middleware import WSCookieAuthenticationMiddleware
11
+ from pfx.pfxcore.test import APIClient, TestAssertMixin
12
+ from pfx.userjobs.urls import websocket_urlpatterns
13
+ from tests.models import User
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ def WebsocketMiddlewareStack(inner):
19
+ return WSCookieAuthenticationMiddleware(inner)
20
+
21
+
22
+ class TestUserWebsocket(TestAssertMixin, TransactionTestCase):
23
+ async def asyncSetUp(self):
24
+ """Ensure parent setUp is called for async tests"""
25
+ await sync_to_async(super().setUp)()
26
+
27
+ async def async_setup(self):
28
+ @sync_to_async
29
+ def setup_all():
30
+ User.objects.create_user(
31
+ username='user',
32
+ email="user@example.com",
33
+ password='test',
34
+ first_name="Test",
35
+ last_name="User",
36
+ is_superuser=False)
37
+ client = APIClient(with_cookie=True, default_locale='en')
38
+ client.login(username='user')
39
+ return client
40
+ return await setup_all()
41
+
42
+ @staticmethod
43
+ def get_websocket_communicator(headers=[]):
44
+ headers.append((b"host", b"localhost:8000"))
45
+ return WebsocketCommunicator(
46
+ WebsocketMiddlewareStack(URLRouter(websocket_urlpatterns)),
47
+ 'ws/user', headers)
48
+
49
+ async def test_websocket(self):
50
+ client = await self.async_setup()
51
+ headers = [(
52
+ b'cookie',
53
+ client.cookies.output(header='', sep='; ').encode())]
54
+
55
+ communicator = self.get_websocket_communicator(headers)
56
+ connected, sub_protocol = await communicator.connect()
57
+ self.assertTrue(connected)
58
+ # Test sending message
59
+ await communicator.send_json_to(
60
+ dict(type='send_event',
61
+ message='123 updated')
62
+ )
63
+ response = await communicator.receive_from()
64
+ res = json.loads(response)
65
+ self.assertEqual(
66
+ res['message'], '123 updated')
67
+
68
+ # Close
69
+ await communicator.disconnect()
70
+
71
+ async def test_anonymous(self):
72
+ await self.async_setup()
73
+ headers = []
74
+
75
+ communicator = self.get_websocket_communicator(headers)
76
+ connected, sub_protocol = await communicator.connect()
77
+
78
+ self.assertFalse(connected)
79
+ self.assertEqual(sub_protocol, 4001)