openwisp-users 1.0.2__tar.gz → 1.2.0__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 (149) hide show
  1. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/CHANGES.rst +180 -71
  2. openwisp_users-1.2.0/PKG-INFO +107 -0
  3. openwisp_users-1.2.0/README.rst +66 -0
  4. openwisp_users-1.2.0/openwisp_users/__init__.py +14 -0
  5. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/adapter.py +10 -9
  6. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/locale/de/LC_MESSAGES/django.po +18 -0
  7. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/locale/fur/LC_MESSAGES/django.po +17 -0
  8. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/locale/it/LC_MESSAGES/django.po +18 -0
  9. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/locale/ru/LC_MESSAGES/django.po +17 -0
  10. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/locale/sl/LC_MESSAGES/django.po +16 -0
  11. openwisp_users-1.2.0/openwisp_users/accounts/static/openwisp-users/accounts/css/change-password.css +62 -0
  12. openwisp_users-1.2.0/openwisp_users/accounts/static/openwisp-users/accounts/css/non-admin.css +7 -0
  13. openwisp_users-1.2.0/openwisp_users/accounts/templates/account/email/password_expiration_message.html +6 -0
  14. openwisp_users-1.2.0/openwisp_users/accounts/templates/account/email/password_expiration_message.txt +6 -0
  15. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/email_confirm.html +1 -1
  16. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/email_verification_success.html +1 -1
  17. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/login.html +15 -3
  18. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/logout_success.html +1 -1
  19. openwisp_users-1.2.0/openwisp_users/accounts/templates/account/password_change.html +52 -0
  20. openwisp_users-1.2.0/openwisp_users/accounts/templates/account/password_change_success.html +20 -0
  21. openwisp_users-1.2.0/openwisp_users/accounts/templates/account/password_not_required.html +21 -0
  22. openwisp_users-1.2.0/openwisp_users/accounts/templates/allauth/layouts/base.html +9 -0
  23. openwisp_users-1.2.0/openwisp_users/accounts/urls.py +88 -0
  24. openwisp_users-1.2.0/openwisp_users/accounts/views.py +41 -0
  25. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/admin.py +129 -135
  26. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/authentication.py +6 -6
  27. openwisp_users-1.2.0/openwisp_users/api/filters.py +43 -0
  28. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/mixins.py +120 -17
  29. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/permissions.py +25 -25
  30. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/serializers.py +159 -134
  31. openwisp_users-1.2.0/openwisp_users/api/urls.py +54 -0
  32. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/views.py +49 -58
  33. openwisp_users-1.2.0/openwisp_users/apps.py +219 -0
  34. openwisp_users-1.2.0/openwisp_users/backends.py +41 -0
  35. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/base/models.py +99 -42
  36. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/locale/de/LC_MESSAGES/django.po +8 -0
  37. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/locale/fur/LC_MESSAGES/django.po +8 -0
  38. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/locale/it/LC_MESSAGES/django.po +8 -0
  39. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/locale/ru/LC_MESSAGES/django.po +8 -0
  40. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/locale/sl/LC_MESSAGES/django.po +8 -0
  41. openwisp_users-1.2.0/openwisp_users/management/commands/__init__.py +0 -0
  42. openwisp_users-1.2.0/openwisp_users/management/commands/export_users.py +79 -0
  43. openwisp_users-1.2.0/openwisp_users/middleware.py +49 -0
  44. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0001_initial.py +108 -112
  45. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0002_auto_20180508_2017.py +4 -5
  46. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0003_default_organization.py +1 -2
  47. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0004_default_groups.py +1 -2
  48. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0005_user_phone_number.py +4 -5
  49. openwisp_users-1.2.0/openwisp_users/migrations/0006_id_email_index_together.py +17 -0
  50. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0007_unique_email.py +9 -10
  51. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0008_update_admins_permissions.py +1 -2
  52. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0009_create_organization_owners.py +1 -2
  53. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0010_allow_admins_change_organization.py +1 -2
  54. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0011_user_first_name_150_max_length.py +4 -5
  55. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0012_user_location_max_length_256.py +4 -5
  56. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0013_user_birth_date.py +4 -5
  57. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0014_user_notes.py +5 -6
  58. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0015_alter_organization_users_alter_organizationuser_user.py +9 -10
  59. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0016_organizationinvitation.py +19 -20
  60. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0017_user_language.py +3 -4
  61. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/0018_allow_operator_view_organisation.py +1 -2
  62. openwisp_users-1.2.0/openwisp_users/migrations/0019_user_password_updated.py +19 -0
  63. openwisp_users-1.2.0/openwisp_users/migrations/0020_populate_password_updated_field.py +24 -0
  64. openwisp_users-1.2.0/openwisp_users/migrations/0021_rename_user_id_email_openwisp_us_id_06c07a_idx.py +17 -0
  65. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/migrations/__init__.py +41 -41
  66. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/mixins.py +11 -11
  67. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/models.py +5 -5
  68. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/multitenancy.py +48 -33
  69. openwisp_users-1.2.0/openwisp_users/password_validation.py +21 -0
  70. openwisp_users-1.2.0/openwisp_users/settings.py +51 -0
  71. openwisp_users-1.2.0/openwisp_users/static/openwisp-users/css/admin.css +4 -0
  72. openwisp_users-1.2.0/openwisp_users/static/openwisp-users/css/change-password.css +26 -0
  73. openwisp_users-1.2.0/openwisp_users/static/openwisp-users/js/addform.js +33 -0
  74. openwisp_users-1.2.0/openwisp_users/static/openwisp-users/js/org-autocomplete.js +64 -0
  75. openwisp_users-1.2.0/openwisp_users/tasks.py +102 -0
  76. openwisp_users-1.2.0/openwisp_users/tests/__init__.py +0 -0
  77. openwisp_users-1.2.0/openwisp_users/tests/test_accounts.py +167 -0
  78. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/tests/test_adapter.py +11 -11
  79. openwisp_users-1.2.0/openwisp_users/tests/test_admin.py +2097 -0
  80. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/tests/test_api/__init__.py +4 -4
  81. openwisp_users-1.2.0/openwisp_users/tests/test_api/test_api.py +736 -0
  82. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/tests/test_api/test_authentication.py +18 -18
  83. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/tests/test_api/test_throttling.py +2 -2
  84. openwisp_users-1.2.0/openwisp_users/tests/test_api/test_views.py +26 -0
  85. openwisp_users-1.2.0/openwisp_users/tests/test_backends.py +155 -0
  86. openwisp_users-1.2.0/openwisp_users/tests/test_commands.py +106 -0
  87. openwisp_users-1.2.0/openwisp_users/tests/test_middlewares.py +49 -0
  88. openwisp_users-1.2.0/openwisp_users/tests/test_models.py +499 -0
  89. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/tests/utils.py +138 -128
  90. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/utils.py +7 -7
  91. openwisp_users-1.2.0/openwisp_users/views.py +47 -0
  92. openwisp_users-1.2.0/openwisp_users/widgets.py +28 -0
  93. openwisp_users-1.2.0/openwisp_users.egg-info/PKG-INFO +107 -0
  94. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users.egg-info/SOURCES.txt +27 -11
  95. openwisp_users-1.2.0/openwisp_users.egg-info/requires.txt +8 -0
  96. openwisp_users-1.2.0/pyproject.toml +23 -0
  97. openwisp_users-1.2.0/requirements.txt +8 -0
  98. openwisp_users-1.2.0/setup.cfg +14 -0
  99. openwisp_users-1.2.0/setup.py +68 -0
  100. openwisp-users-1.0.2/PKG-INFO +0 -1405
  101. openwisp-users-1.0.2/README.rst +0 -1382
  102. openwisp-users-1.0.2/openwisp_users/__init__.py +0 -16
  103. openwisp-users-1.0.2/openwisp_users/accounts/locale/de/LC_MESSAGES/django.mo +0 -0
  104. openwisp-users-1.0.2/openwisp_users/accounts/locale/fur/LC_MESSAGES/django.mo +0 -0
  105. openwisp-users-1.0.2/openwisp_users/accounts/locale/it/LC_MESSAGES/django.mo +0 -0
  106. openwisp-users-1.0.2/openwisp_users/accounts/locale/ru/LC_MESSAGES/django.mo +0 -0
  107. openwisp-users-1.0.2/openwisp_users/accounts/locale/sl/LC_MESSAGES/django.mo +0 -0
  108. openwisp-users-1.0.2/openwisp_users/accounts/templates/account/base.html +0 -2
  109. openwisp-users-1.0.2/openwisp_users/accounts/urls.py +0 -75
  110. openwisp-users-1.0.2/openwisp_users/api/urls.py +0 -54
  111. openwisp-users-1.0.2/openwisp_users/apps.py +0 -158
  112. openwisp-users-1.0.2/openwisp_users/backends.py +0 -42
  113. openwisp-users-1.0.2/openwisp_users/locale/de/LC_MESSAGES/django.mo +0 -0
  114. openwisp-users-1.0.2/openwisp_users/locale/fur/LC_MESSAGES/django.mo +0 -0
  115. openwisp-users-1.0.2/openwisp_users/locale/it/LC_MESSAGES/django.mo +0 -0
  116. openwisp-users-1.0.2/openwisp_users/locale/ru/LC_MESSAGES/django.mo +0 -0
  117. openwisp-users-1.0.2/openwisp_users/locale/sl/LC_MESSAGES/django.mo +0 -0
  118. openwisp-users-1.0.2/openwisp_users/migrations/0006_id_email_index_together.py +0 -12
  119. openwisp-users-1.0.2/openwisp_users/settings.py +0 -14
  120. openwisp-users-1.0.2/openwisp_users/static/openwisp-users/css/admin.css +0 -4
  121. openwisp-users-1.0.2/openwisp_users/static/openwisp-users/js/addform.js +0 -33
  122. openwisp-users-1.0.2/openwisp_users/tests/test_admin.py +0 -1808
  123. openwisp-users-1.0.2/openwisp_users/tests/test_api/test_api.py +0 -691
  124. openwisp-users-1.0.2/openwisp_users/tests/test_api/test_views.py +0 -17
  125. openwisp-users-1.0.2/openwisp_users/tests/test_backends.py +0 -151
  126. openwisp-users-1.0.2/openwisp_users/tests/test_models.py +0 -270
  127. openwisp-users-1.0.2/openwisp_users.egg-info/PKG-INFO +0 -1405
  128. openwisp-users-1.0.2/openwisp_users.egg-info/requires.txt +0 -8
  129. openwisp-users-1.0.2/requirements.txt +0 -8
  130. openwisp-users-1.0.2/setup.cfg +0 -23
  131. openwisp-users-1.0.2/setup.py +0 -68
  132. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/LICENSE +0 -0
  133. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/MANIFEST.in +0 -0
  134. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/__init__.py +0 -0
  135. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/email/base_message.txt +0 -0
  136. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/email/email_confirmation_message.html +0 -0
  137. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/email/email_confirmation_message.txt +0 -0
  138. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/accounts/templates/account/email/email_confirmation_signup_message.html +0 -0
  139. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/__init__.py +0 -0
  140. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/swagger.py +0 -0
  141. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/api/throttling.py +0 -0
  142. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/base/__init__.py +0 -0
  143. {openwisp-users-1.0.2/openwisp_users/tests → openwisp_users-1.2.0/openwisp_users/management}/__init__.py +0 -0
  144. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/templates/admin/action_confirmation.html +0 -0
  145. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/templates/admin/login.html +0 -0
  146. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users/templates/admin/openwisp_users/user/change_form.html +0 -0
  147. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users.egg-info/dependency_links.txt +0 -0
  148. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users.egg-info/not-zip-safe +0 -0
  149. {openwisp-users-1.0.2 → openwisp_users-1.2.0}/openwisp_users.egg-info/top_level.txt +0 -0
@@ -1,12 +1,97 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 1.2.0 [2025-10-23]
5
+ --------------------------
6
+
7
+ Changes
8
+ ~~~~~~~
9
+
10
+ Dependencies
11
+ ++++++++++++
12
+
13
+ - Bumped ``django-organizations>=2.5.0,<2.6.0``.
14
+ - Bumped ``django-extensions>=3.2,<4.2``.
15
+ - Bumped ``django-allauth[socialaccount]>=65.12.0,<65.13.0``.
16
+ - Bumped ``django-phonenumber-field>=8.1.0,<8.2.0``.
17
+ - Bumped ``phonenumbers>=9.0.10,<9.1.0``.
18
+ - Bumped ``openwisp-utils[rest,celery]~=1.2.0``.
19
+ - Removed ``coveralls`` in favor of ``coverage`` package.
20
+ - Added support for Django ``5.x``.
21
+ - Dropped support for Django ``3.2.0`` and Django ``4.1.0``.
22
+ - Added support for Python ``3.11``, ``3.12``, and ``3.13``.
23
+ - Dropped support for Python ``3.8``.
24
+
25
+ Version 1.1.0 [2024-11-20]
26
+ --------------------------
27
+
28
+ Features
29
+ ~~~~~~~~
30
+
31
+ - Added support for `password expiration
32
+ <https://openwisp.io/docs/stable/users/user/settings.html#openwisp-users-user-password-expiration>`_,
33
+ allowing user passwords to automatically expire after a set period.
34
+ - Added `multi-tenant Django filters
35
+ <https://openwisp.io/docs/stable/users/developer/django-rest-framework-utils.html#filtering-items-by-organization>`_.
36
+ - Added `MultitenantOrgFilter
37
+ <https://openwisp.io/docs/stable/users/developer/admin-utils.html#multitenantorgfilter>`_
38
+ to add autocomplete filter in ``ModelAdmin``.
39
+ - Added `export-users
40
+ <https://openwisp.io/docs/stable/users/user/management-commands.html#export-users>`_
41
+ command line utility to export users.
42
+ - Added `ProtectedApiMixin
43
+ <https://openwisp.io/docs/stable/users/developer/django-rest-framework-utils.html#protectedapimixin>`_.
44
+ - Added `PasswordReuseValidator
45
+ <https://openwisp.io/docs/stable/users/developer/misc-utils.html#passwordreusevalidator>`_
46
+ which prevents users from reusing their current password when setting a
47
+ new one.
48
+ - Allowed creating users with a verified email via REST API.
49
+
50
+ Changes
51
+ ~~~~~~~
52
+
53
+ - Added autocomplete fields in ``OrganizationOwner`` admin.
54
+ - Enabled ``OrganizationUserAdmin`` by default.
55
+
56
+ **Dependencies**:
57
+
58
+ - Bumped ``django-organizations~=2.4.1``.
59
+ - Bumped ``django-extensions~=3.2.3``.
60
+ - Bumped ``django-allauth[socialaccount]~=0.63.6``.
61
+ - Bumped ``django-phonenumber-field~=8.13.48``.
62
+ - Bumped ``django-reversion~=5.1.0``.
63
+ - Bumped ``phonenumbers~=8.13.48``.
64
+ - Bumped ``django-sesame~=3.2.2``.
65
+ - Bumped ``openwisp-utils[rest,celery]~=1.1.1``.
66
+ - Added support for Django ``4.1.x`` and ``4.2.x``.
67
+ - Added support for Python ``3.10``.
68
+ - Dropped support for Python ``3.7``.
69
+ - Dropped support for Django ``3.0.x`` and ``3.1.x``.
70
+
71
+ Bugfixes
72
+ ~~~~~~~~
73
+
74
+ - User need to have required model permissions to perform admin actions.
75
+ - Don't allow organization admin to create shared object.
76
+ - Fixed user's organization cache invalidation.
77
+ - Invalidate org membership cache when organization's active status
78
+ changes.
79
+ - Fixed an issue where the organization admin would see multiple entries
80
+ for the same user in the user changelist.
81
+ - Fixed admin unregistration failures for ``EmailAddress`` and
82
+ ``TokenProxy`` models.
83
+ - Fixed an ``IntegrityError`` that occurred when adding the first user to
84
+ an organization via ``Organization.add_user``.
85
+ - Fixed `UsersAuthenticationBackend
86
+ <https://openwisp.io/docs/stable/users/developer/misc-utils.html#usersauthenticationbackend>`_
87
+ to support phone numbers with leading zero.
88
+ - Prevented users registered via social login from setting a password.
89
+
4
90
  Version 1.0.2 [2022-06-28]
5
91
  --------------------------
6
92
 
7
- - Bumped django-all-auth from 0.46.0 to 0.51.0
8
- to fix mild security issues (see the `change log
9
- of django-all-auth for more information
93
+ - Bumped django-all-auth from 0.46.0 to 0.51.0 to fix mild security issues
94
+ (see the `change log of django-all-auth for more information
10
95
  <https://github.com/pennersr/django-allauth/blob/master/ChangeLog.rst>`_)
11
96
  - The ``@classmethod`` decorator was mistakenly forgotten and hence
12
97
  missing from the following methods of
@@ -14,8 +99,9 @@ Version 1.0.2 [2022-06-28]
14
99
 
15
100
  - ``update_organizations_dict``
16
101
  - ``create_organization_owner``
17
- - Fixed a broken example in the DRF Permission Classes section
18
- of the documentation
102
+
103
+ - Fixed a broken example in the DRF Permission Classes section of the
104
+ documentation
19
105
 
20
106
  Version 1.0.1 [2022-05-24]
21
107
  --------------------------
@@ -30,9 +116,10 @@ Features
30
116
 
31
117
  - Added `UsersAuthenticationBackend class
32
118
  <https://github.com/openwisp/openwisp-users#authentication-backend>`_
33
- that allows users to authenticate using either email, phone_number or username.
34
- - Added the possibility to filter users by their organization in
35
- the user administration section.
119
+ that allows users to authenticate using either email, phone_number or
120
+ username.
121
+ - Added the possibility to filter users by their organization in the user
122
+ administration section.
36
123
  - Added `REST API endpoints for openwisp-users
37
124
  <https://github.com/openwisp/openwisp-users#list-of-endpoints>`_.
38
125
  - Added various `Django REST Framework mixins and utilities
@@ -63,19 +150,19 @@ Changes
63
150
  - Added `User.language field
64
151
  <https://github.com/openwisp/openwisp-users/issues/261>`_.
65
152
  - Made `User.email case insensitive
66
- <https://github.com/openwisp/openwisp-users/issues/227>`_.
67
- Email addresses will always get converted to lower case before
68
- storage and comparison.
153
+ <https://github.com/openwisp/openwisp-users/issues/227>`_. Email
154
+ addresses will always get converted to lower case before storage and
155
+ comparison.
69
156
 
70
157
  - Updated ``OrganizationOwnerInline`` to use ``raw_id`` field for
71
158
  ``organization_user`` field.
72
- - Updated ``OrganizationUserInline`` to use ``autocomplete`` field
73
- for ``organization`` field.
159
+ - Updated ``OrganizationUserInline`` to use ``autocomplete`` field for
160
+ ``organization`` field.
74
161
  - **Backward incompatible:** removed `custom permission helpers
75
162
  <https://github.com/openwisp/openwisp-users/issues/266>`_.
76
163
  - **Backward incompatible:** the REST API endpoint ``/api/v1/user/token/``
77
- has been changed to ``/api/v1/users/token/`` for consistency
78
- with the rest of the API.
164
+ has been changed to ``/api/v1/users/token/`` for consistency with the
165
+ rest of the API.
79
166
 
80
167
  **Dependencies**:
81
168
 
@@ -94,14 +181,14 @@ Bugfixes
94
181
  ~~~~~~~~
95
182
 
96
183
  - Fixed `internal server error on "/accounts/login/" page
97
- <https://github.com/openwisp/openwisp-users/issues/218>`_
98
- when the social account app is disabled.
184
+ <https://github.com/openwisp/openwisp-users/issues/218>`_ when the
185
+ social account app is disabled.
99
186
  - Fixed `error on restoring "Group" object with django-reversion
100
187
  <https://github.com/openwisp/openwisp-users/issues/214>`_.
101
188
  - Fixed `error on visiting Django admin URL for non-existing users
102
189
  <https://github.com/openwisp/openwisp-users/issues/228>`_.
103
- - Fixed `organization managers could escalate their privileges to superuser
104
- <https://github.com/openwisp/openwisp-users/issues/284>`_.
190
+ - Fixed `organization managers could escalate their privileges to
191
+ superuser <https://github.com/openwisp/openwisp-users/issues/284>`_.
105
192
 
106
193
  Version 0.5.1 [2020-12-13]
107
194
  --------------------------
@@ -110,15 +197,16 @@ Changes
110
197
  ~~~~~~~
111
198
 
112
199
  - Updated django-allauth to 0.44.x
113
- - Copied the template ``account/login.html`` from django-allauth
114
- in order to remove the sign up link, which we do not support
200
+ - Copied the template ``account/login.html`` from django-allauth in order
201
+ to remove the sign up link, which we do not support
115
202
  - Updated django-extensions to 3.1
116
203
 
117
204
  Bugfixes
118
205
  ~~~~~~~~
119
206
 
120
207
  - Updating django-allauth to 0.44.x also fixes an `issue affecting
121
- OpenWISP Users in production deployment (experienced in ansible-openwisp2)
208
+ OpenWISP Users in production deployment (experienced in
209
+ ansible-openwisp2)
122
210
  <https://github.com/openwisp/ansible-openwisp2/issues/233>`_
123
211
 
124
212
  Version 0.5.0 [2020-11-18]
@@ -133,9 +221,10 @@ Changes
133
221
  ~~~~~~~
134
222
 
135
223
  - [change] Extend ``admin/base_site.html`` in ``confirm_email.html``
136
- - [change] Updated to openwisp-utils 0.7 and switched to new ``register_menu_items``
137
- - [change] Removed typographic error in settings which was maintained
138
- for backward compatibility
224
+ - [change] Updated to openwisp-utils 0.7 and switched to new
225
+ ``register_menu_items``
226
+ - [change] Removed typographic error in settings which was maintained for
227
+ backward compatibility
139
228
  - [change] Removed deprecated ``organizations_pk``
140
229
 
141
230
  Bugfixes
@@ -148,8 +237,9 @@ Bugfixes
148
237
  Version 0.4.1 [2020-10-08]
149
238
  --------------------------
150
239
 
151
- - [chores] Allow passing a string or uuid to the
152
- `Organization membership helpers <https://github.com/openwisp/openwisp-users#organization-membership-helpers>`_
240
+ - [chores] Allow passing a string or uuid to the `Organization membership
241
+ helpers
242
+ <https://github.com/openwisp/openwisp-users#organization-membership-helpers>`_
153
243
  - [fix] The ``OrganizationUser`` instance of an ``OrganizationOwner``
154
244
  won't be allowed to be ``is_admin=False``
155
245
  - [fix] Fixed mutable class attribute in MultitenantAdminMixin
@@ -162,26 +252,28 @@ Version 0.4.0 [2020-08-23]
162
252
  Features
163
253
  ~~~~~~~~
164
254
 
165
- - [models] Added `organizations_managed <https://github.com/openwisp/openwisp-users#organizations-managed>`_ helper
166
- - [models] Added `organizations_owned <https://github.com/openwisp/openwisp-users#organizations-owned>`_ helper
255
+ - [models] Added `organizations_managed
256
+ <https://github.com/openwisp/openwisp-users#organizations-managed>`_
257
+ helper
258
+ - [models] Added `organizations_owned
259
+ <https://github.com/openwisp/openwisp-users#organizations-owned>`_
260
+ helper
167
261
 
168
262
  Changes
169
263
  ~~~~~~~
170
264
 
171
- - [admin]: **Potentially backward incompatible change**:
172
- Multi-tenant admin classes now allow only org managers.
173
- Before this version, a user needed to be only org member
174
- to see items of that organization in the admin, but this
175
- is wrong! An ``OrganizationUser`` which has ``is_admin=False`` is
176
- only an end-user of that organization.
177
- Instead, an ``OrganizationUser`` which has ``is_admin=True`` is
178
- also a manager and only this type of user shall be allowed
179
- to manage items of the organization through the django admin site.
180
- This is needed in order to support users being simple end-users
181
- in one organization but administrators in others, otherwise
182
- a staff user who is administrator of one organization would be
183
- able to change also items of other organizations where
184
- they are only members and not managers.
265
+ - [admin]: **Potentially backward incompatible change**: Multi-tenant
266
+ admin classes now allow only org managers. Before this version, a user
267
+ needed to be only org member to see items of that organization in the
268
+ admin, but this is wrong! An ``OrganizationUser`` which has
269
+ ``is_admin=False`` is only an end-user of that organization. Instead, an
270
+ ``OrganizationUser`` which has ``is_admin=True`` is also a manager and
271
+ only this type of user shall be allowed to manage items of the
272
+ organization through the django admin site. This is needed in order to
273
+ support users being simple end-users in one organization but
274
+ administrators in others, otherwise a staff user who is administrator of
275
+ one organization would be able to change also items of other
276
+ organizations where they are only members and not managers.
185
277
  - [dependencies] Added support for django 3.1
186
278
  - [dependencies] django-phonenumber-field 5.0
187
279
 
@@ -189,7 +281,8 @@ Version 0.3.1 [2020-08-17]
189
281
  --------------------------
190
282
 
191
283
  - [deps] Updated openwisp-utils to 0.6.0
192
- - [test] Added functions to add inline fields in extended app's integration testing
284
+ - [test] Added functions to add inline fields in extended app's
285
+ integration testing
193
286
 
194
287
  Version 0.3.0 [2020-08-14]
195
288
  --------------------------
@@ -197,21 +290,34 @@ Version 0.3.0 [2020-08-14]
197
290
  Features
198
291
  ~~~~~~~~
199
292
 
200
- - [models] Added `swappable models and extensible classes <https://github.com/openwisp/openwisp-users#extend-openwisp-users>`_
201
- - [admin] Added support for `organization owners <https://github.com/openwisp/openwisp-users#organization-owners>`_
293
+ - [models] Added `swappable models and extensible classes
294
+ <https://github.com/openwisp/openwisp-users#extend-openwisp-users>`_
295
+ - [admin] Added support for `organization owners
296
+ <https://github.com/openwisp/openwisp-users#organization-owners>`_
202
297
  - [admin] Added default owner to each organization
203
- - [api] Added `ObtainTokenView REST API endpoint <https://github.com/openwisp/openwisp-users#obtain-authentication-token>`_ for bearer authentication
204
- - [api] Added `OPENWISP_USERS_AUTH_API <https://github.com/openwisp/openwisp-users#openwisp-users-auth-api>`_ and `OPENWISP_USERS_AUTH_THROTTLE_RATE <https://github.com/openwisp/openwisp-users#openwisp-users-auth-throttle-rate>`_ settings
205
- - [api] Added `Django REST Framework permission classes <https://github.com/openwisp/openwisp-users#django-rest-framework-permission-classes>`_
206
- - [models] Added `Organization membership helpers <https://github.com/openwisp/openwisp-users#organization-membership-helpers>`_
207
- - [models] Added `User permission helpers <https://github.com/openwisp/openwisp-users#permissions-helpers>`_
298
+ - [api] Added `ObtainTokenView REST API endpoint
299
+ <https://github.com/openwisp/openwisp-users#obtain-authentication-token>`_
300
+ for bearer authentication
301
+ - [api] Added `OPENWISP_USERS_AUTH_API
302
+ <https://github.com/openwisp/openwisp-users#openwisp-users-auth-api>`_
303
+ and `OPENWISP_USERS_AUTH_THROTTLE_RATE
304
+ <https://github.com/openwisp/openwisp-users#openwisp-users-auth-throttle-rate>`_
305
+ settings
306
+ - [api] Added `Django REST Framework permission classes
307
+ <https://github.com/openwisp/openwisp-users#django-rest-framework-permission-classes>`_
308
+ - [models] Added `Organization membership helpers
309
+ <https://github.com/openwisp/openwisp-users#organization-membership-helpers>`_
310
+ - [models] Added `User permission helpers
311
+ <https://github.com/openwisp/openwisp-users#permissions-helpers>`_
208
312
 
209
313
  Changes
210
314
  ~~~~~~~
211
315
 
212
- - Enabled `organization owner admin <https://github.com/openwisp/openwisp-users#openwisp-organization-owner-admin>`_ by default
213
- - [dependencies] Upgraded ``django-allauth 0.42.0``, ``django-extensions 3.0.2``,
214
- ``openwisp-utils 0.5[rest]`` and ``phonenumbers 8.12.0``
316
+ - Enabled `organization owner admin
317
+ <https://github.com/openwisp/openwisp-users#openwisp-organization-owner-admin>`_
318
+ by default
319
+ - [dependencies] Upgraded ``django-allauth 0.42.0``, ``django-extensions
320
+ 3.0.2``, ``openwisp-utils 0.5[rest]`` and ``phonenumbers 8.12.0``
215
321
 
216
322
  Bugfixes
217
323
  ~~~~~~~~
@@ -222,8 +328,8 @@ Bugfixes
222
328
  Version 0.2.2 [2020-05-04]
223
329
  --------------------------
224
330
 
225
- - [admin] Fixed regression that caused superusers to
226
- not be able to delete regular users
331
+ - [admin] Fixed regression that caused superusers to not be able to delete
332
+ regular users
227
333
  - [admin] Do not de-register socialaccount if not enabled
228
334
 
229
335
  Version 0.2.1 [2020-04-07]
@@ -234,9 +340,10 @@ Version 0.2.1 [2020-04-07]
234
340
  - [admin] Show latest items first in "recovery deleted <object>" pages
235
341
 
236
342
  Version 0.2.0 [2020-01-17]
237
- ---------------------------
343
+ --------------------------
238
344
 
239
- - [dependencies] Added support for django 3.0, dropped support for django < 2.1
345
+ - [dependencies] Added support for django 3.0, dropped support for django
346
+ < 2.1
240
347
  - [python] Dropped support for python 2.7
241
348
 
242
349
  Version 0.1.12 [2019-12-20]
@@ -251,14 +358,16 @@ Version 0.1.11 [2019-12-13]
251
358
  - [admin] Allow adding organization in user creation form
252
359
  - [admin] ``UserCreationForm`` encourages to select the organization
253
360
  - [admin] Non-superusers now can manage the users of their organization
254
- - [admin] Made ``OrganizationOwner`` and ``OrganizationUser`` admins multi-tenant
361
+ - [admin] Made ``OrganizationOwner`` and ``OrganizationUser`` admins
362
+ multi-tenant
255
363
  - [admin] Disabled ``OrganizationOwnerAdmin`` by default
256
364
  - [admin] Disabled ``OrganizationUserAdmin`` by default
257
365
  - [admin] Disabled ``view_on_site`` for ``OrganizationUserInline``
258
366
  - [admin] Added menu items
259
367
  - [admin] Avoid 500 error in case of SMTP error when adding a new user
260
368
  - [urls] Added social login views URLs
261
- - [mixins] Moved ``MultitenantAdminMixin`` from openwisp-utils to openwisp-users
369
+ - [mixins] Moved ``MultitenantAdminMixin`` from openwisp-utils to
370
+ openwisp-users
262
371
  - [models] Add possibility to validate inverse relations
263
372
  - [model] Added phone_number field to User
264
373
  - [models] Add unique constraint on user.email
@@ -268,20 +377,20 @@ Version 0.1.11 [2019-12-13]
268
377
  Version 0.1.10 [2018-08-01]
269
378
  ---------------------------
270
379
 
271
- - `#26 <https://github.com/openwisp/openwisp-users/pull/26>`_:
272
- [admin] Fixed Integrity error if trying to change email that exists
273
- (thanks to `@R9295 <https://github.com/R9295>`_)
380
+ - `#26 <https://github.com/openwisp/openwisp-users/pull/26>`_: [admin]
381
+ Fixed Integrity error if trying to change email that exists (thanks to
382
+ `@R9295 <https://github.com/R9295>`_)
274
383
  - `#27 <https://github.com/openwisp/openwisp-users/issues/27>`_:
275
384
  [requirements] Added support for django 2.1 rc
276
385
 
277
386
  Version 0.1.9 [2018-07-27]
278
387
  --------------------------
279
388
 
280
- - `#25 <https://github.com/openwisp/openwisp-users/pull/25>`_:
281
- [docs] Updated setup instructions in README
282
- (thanks to `@AlmogCohen <https://github.com/AlmogCohen>`_)
283
- - `#20 <https://github.com/openwisp/openwisp-users/issues/20>`_:
284
- [tests] Fixed pending migration check
389
+ - `#25 <https://github.com/openwisp/openwisp-users/pull/25>`_: [docs]
390
+ Updated setup instructions in README (thanks to `@AlmogCohen
391
+ <https://github.com/AlmogCohen>`_)
392
+ - `#20 <https://github.com/openwisp/openwisp-users/issues/20>`_: [tests]
393
+ Fixed pending migration check
285
394
  - [requirements] Updated dependencies
286
395
 
287
396
  Version 0.1.8 [2018-02-19]
@@ -303,9 +412,9 @@ Version 0.1.6 [2017-12-02]
303
412
  Version 0.1.5 [2017-08-29]
304
413
  --------------------------
305
414
 
306
- - `#3 <https://github.com/openwisp/openwisp-users/issues/3>`_:
307
- [admin] Allow operators to manage users without being
308
- able to change superuser related details
415
+ - `#3 <https://github.com/openwisp/openwisp-users/issues/3>`_: [admin]
416
+ Allow operators to manage users without being able to change superuser
417
+ related details
309
418
  - `31b13bb <https://github.com/openwisp/openwisp-users/commit/31b13bb>`_:
310
419
  [requirements] Updated django-allauth to 0.33.0
311
420
 
@@ -0,0 +1,107 @@
1
+ Metadata-Version: 2.4
2
+ Name: openwisp-users
3
+ Version: 1.2.0
4
+ Summary: Provides basic multi-tenancy features for OpenWISP (using the Django web-framework)
5
+ Home-page: http://openwisp.org
6
+ Download-URL: https://github.com/openwisp/openwisp-users/releases
7
+ Author: OpenWISP
8
+ Author-email: support@openwisp.io
9
+ License: BSD
10
+ Keywords: openwisp,django,organizations,users
11
+ Platform: Platform Independent
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Topic :: Internet :: WWW/HTTP
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: BSD License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Framework :: Django
19
+ Classifier: Programming Language :: Python :: 3
20
+ License-File: LICENSE
21
+ Requires-Dist: django-organizations<2.6.0,>=2.5.0
22
+ Requires-Dist: django-extensions<4.2,>=3.2
23
+ Requires-Dist: django-allauth[socialaccount]<65.13.0,>=65.12.0
24
+ Requires-Dist: django-phonenumber-field<8.2.0,>=8.1.0
25
+ Requires-Dist: phonenumbers<9.1.0,>=9.0.10
26
+ Requires-Dist: openwisp-utils[celery,rest]~=1.2.0
27
+ Requires-Dist: packaging
28
+ Requires-Dist: django-sesame<3.3.0,>=3.2.3
29
+ Dynamic: author
30
+ Dynamic: author-email
31
+ Dynamic: classifier
32
+ Dynamic: description
33
+ Dynamic: download-url
34
+ Dynamic: home-page
35
+ Dynamic: keywords
36
+ Dynamic: license
37
+ Dynamic: license-file
38
+ Dynamic: platform
39
+ Dynamic: requires-dist
40
+ Dynamic: summary
41
+
42
+ openwisp-users
43
+ ==============
44
+
45
+ .. image:: https://github.com/openwisp/openwisp-users/workflows/OpenWISP%20Users%20CI%20Build/badge.svg?branch=master
46
+ :target: https://github.com/openwisp/openwisp-users/actions?query=workflow%3A%22OpenWISP+Users+CI+Build%22
47
+
48
+ .. image:: https://coveralls.io/repos/openwisp/openwisp-users/badge.svg
49
+ :target: https://coveralls.io/r/openwisp/openwisp-users
50
+
51
+ .. image:: https://img.shields.io/librariesio/release/github/openwisp/openwisp-users
52
+ :target: https://libraries.io/github/openwisp/openwisp-users#repository_dependencies
53
+ :alt: Dependency monitoring
54
+
55
+ .. image:: https://badge.fury.io/py/openwisp-users.svg
56
+ :target: http://badge.fury.io/py/openwisp-users
57
+
58
+ .. image:: https://pepy.tech/badge/openwisp-users
59
+ :target: https://pepy.tech/project/openwisp-users
60
+ :alt: downloads
61
+
62
+ .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
63
+ :target: https://pypi.org/project/black/
64
+ :alt: code style: black
65
+
66
+ ----
67
+
68
+ Implementation of user management and multi-tenancy for OpenWISP (built
69
+ with python & django).
70
+
71
+ **Need a quick overview?** `Try the OpenWISP Demo
72
+ <https://openwisp.org/demo.html>`_.
73
+
74
+ .. image:: https://raw.githubusercontent.com/openwisp/openwisp2-docs/master/assets/design/openwisp-logo-black.svg
75
+ :target: http://openwisp.org
76
+
77
+ ----
78
+
79
+ Documentation
80
+ -------------
81
+
82
+ - `Usage documentation <https://openwisp.io/docs/stable/users/>`_
83
+ - `Developer documentation
84
+ <https://openwisp.io/docs/stable/users/developer/>`_
85
+
86
+ Contributing
87
+ ------------
88
+
89
+ Please refer to the `OpenWISP contributing guidelines
90
+ <http://openwisp.io/docs/developer/contributing.html>`_.
91
+
92
+ Support
93
+ -------
94
+
95
+ See `OpenWISP Support Channels <http://openwisp.org/support.html>`_.
96
+
97
+ Changelog
98
+ ---------
99
+
100
+ See `CHANGES
101
+ <https://github.com/openwisp/openwisp-users/blob/master/CHANGES.rst>`_.
102
+
103
+ License
104
+ -------
105
+
106
+ See `LICENSE
107
+ <https://github.com/openwisp/openwisp-users/blob/master/LICENSE>`_.
@@ -0,0 +1,66 @@
1
+ openwisp-users
2
+ ==============
3
+
4
+ .. image:: https://github.com/openwisp/openwisp-users/workflows/OpenWISP%20Users%20CI%20Build/badge.svg?branch=master
5
+ :target: https://github.com/openwisp/openwisp-users/actions?query=workflow%3A%22OpenWISP+Users+CI+Build%22
6
+
7
+ .. image:: https://coveralls.io/repos/openwisp/openwisp-users/badge.svg
8
+ :target: https://coveralls.io/r/openwisp/openwisp-users
9
+
10
+ .. image:: https://img.shields.io/librariesio/release/github/openwisp/openwisp-users
11
+ :target: https://libraries.io/github/openwisp/openwisp-users#repository_dependencies
12
+ :alt: Dependency monitoring
13
+
14
+ .. image:: https://badge.fury.io/py/openwisp-users.svg
15
+ :target: http://badge.fury.io/py/openwisp-users
16
+
17
+ .. image:: https://pepy.tech/badge/openwisp-users
18
+ :target: https://pepy.tech/project/openwisp-users
19
+ :alt: downloads
20
+
21
+ .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
22
+ :target: https://pypi.org/project/black/
23
+ :alt: code style: black
24
+
25
+ ----
26
+
27
+ Implementation of user management and multi-tenancy for OpenWISP (built
28
+ with python & django).
29
+
30
+ **Need a quick overview?** `Try the OpenWISP Demo
31
+ <https://openwisp.org/demo.html>`_.
32
+
33
+ .. image:: https://raw.githubusercontent.com/openwisp/openwisp2-docs/master/assets/design/openwisp-logo-black.svg
34
+ :target: http://openwisp.org
35
+
36
+ ----
37
+
38
+ Documentation
39
+ -------------
40
+
41
+ - `Usage documentation <https://openwisp.io/docs/stable/users/>`_
42
+ - `Developer documentation
43
+ <https://openwisp.io/docs/stable/users/developer/>`_
44
+
45
+ Contributing
46
+ ------------
47
+
48
+ Please refer to the `OpenWISP contributing guidelines
49
+ <http://openwisp.io/docs/developer/contributing.html>`_.
50
+
51
+ Support
52
+ -------
53
+
54
+ See `OpenWISP Support Channels <http://openwisp.org/support.html>`_.
55
+
56
+ Changelog
57
+ ---------
58
+
59
+ See `CHANGES
60
+ <https://github.com/openwisp/openwisp-users/blob/master/CHANGES.rst>`_.
61
+
62
+ License
63
+ -------
64
+
65
+ See `LICENSE
66
+ <https://github.com/openwisp/openwisp-users/blob/master/LICENSE>`_.
@@ -0,0 +1,14 @@
1
+ VERSION = (1, 2, 0, "final")
2
+ __version__ = VERSION # alias
3
+
4
+
5
+ def get_version():
6
+ version = "%s.%s.%s" % (VERSION[0], VERSION[1], VERSION[2])
7
+ if VERSION[3] != "final":
8
+ first_letter = VERSION[3][0:1]
9
+ try:
10
+ suffix = VERSION[4]
11
+ except IndexError:
12
+ suffix = 0
13
+ version = "%s%s%s" % (version, first_letter, suffix)
14
+ return version
@@ -2,6 +2,7 @@ from allauth.account.adapter import DefaultAccountAdapter
2
2
  from django.template import TemplateDoesNotExist
3
3
  from django.template.loader import render_to_string
4
4
  from django.utils.translation import gettext as _
5
+
5
6
  from openwisp_utils.admin_theme.email import send_email
6
7
 
7
8
 
@@ -12,21 +13,21 @@ class EmailAdapter(DefaultAccountAdapter):
12
13
  subject = self.format_email_subject(subject)
13
14
  content = {}
14
15
  errors = {}
15
- for ext in ['html', 'txt']:
16
- template_name = '{0}_message.{1}'.format(template_prefix, ext)
17
- if 'activate_url' in context:
18
- context['call_to_action_url'] = context['activate_url']
19
- context['call_to_action_text'] = _('Confirm')
16
+ for ext in ["html", "txt"]:
17
+ template_name = "{0}_message.{1}".format(template_prefix, ext)
18
+ if "activate_url" in context:
19
+ context["call_to_action_url"] = context["activate_url"]
20
+ context["call_to_action_text"] = _("Confirm")
20
21
  try:
21
- template_name = '{0}_message.{1}'.format(template_prefix, ext)
22
+ template_name = "{0}_message.{1}".format(template_prefix, ext)
22
23
  content[ext] = render_to_string(
23
24
  template_name, context, self.request
24
25
  ).strip()
25
26
  except TemplateDoesNotExist as e:
26
27
  errors[ext] = e
27
- text = content.get('txt', '')
28
- html = content.get('html', '')
28
+ text = content.get("txt", "")
29
+ html = content.get("html", "")
29
30
  # both templates fail to load, raise the exception
30
31
  if len(errors.keys()) >= 2:
31
- raise errors['txt'] from errors['html']
32
+ raise errors["txt"] from errors["html"]
32
33
  send_email(subject, text, html, [email], context)
@@ -40,3 +40,21 @@ msgstr "Die Seite kann geschlossen werden."
40
40
  #: accounts/templates/account/logout_success.html:18
41
41
  msgid "Logout successful."
42
42
  msgstr "Sie wurden erfolgreich abgemeldet."
43
+
44
+ #: accounts/templates/account/email/password_expiration_message.html:3
45
+ #: accounts/templates/account/email/password_expiration_message.txt:3
46
+ #, python-format
47
+ msgid ""
48
+ "We inform you that the password for your account %(username)s will expire in "
49
+ "7 days, precisely on %(expiry_date)s."
50
+ msgstr ""
51
+ "Wir informieren Sie darüber, dass das Passwort für Ihr Konto %(username)s in "
52
+ "7 Tagen abläuft, genau am %(expiry_date)s."
53
+
54
+ #: accounts/templates/account/email/password_expiration_message.html:5
55
+ #: accounts/templates/account/email/password_expiration_message.txt:5
56
+ msgid ""
57
+ "Kindly proceed with updating your password by clicking on the button below."
58
+ msgstr ""
59
+ "Bitte aktualisieren Sie Ihr Passwort, indem Sie auf die Schaltfläche unten "
60
+ "klicken."