Flask-Security-Invenio 3.3.2__tar.gz → 3.4.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 (138) hide show
  1. Flask-Security-Invenio-3.4.0/.git-blame-ignore-revs +1 -0
  2. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/CHANGES +18 -0
  3. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0/Flask_Security_Invenio.egg-info}/PKG-INFO +1 -1
  4. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/SOURCES.txt +1 -0
  5. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/requires.txt +5 -4
  6. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/MANIFEST.in +1 -0
  7. {Flask-Security-Invenio-3.3.2/Flask_Security_Invenio.egg-info → Flask-Security-Invenio-3.4.0}/PKG-INFO +1 -1
  8. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/conf.py +49 -34
  9. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/__init__.py +42 -30
  10. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/babel.py +1 -1
  11. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/changeable.py +5 -6
  12. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/cli.py +48 -47
  13. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/confirmable.py +26 -17
  14. Flask-Security-Invenio-3.4.0/flask_security/core.py +504 -0
  15. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/datastore.py +21 -17
  16. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/decorators.py +20 -11
  17. Flask-Security-Invenio-3.4.0/flask_security/forms.py +319 -0
  18. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/recoverable.py +27 -14
  19. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/registerable.py +15 -12
  20. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/signals.py +1 -2
  21. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ca_ES/LC_MESSAGES/flask_security.mo +0 -0
  22. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/da_DK/LC_MESSAGES/flask_security.mo +0 -0
  23. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/de_DE/LC_MESSAGES/flask_security.mo +0 -0
  24. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/es_ES/LC_MESSAGES/flask_security.mo +0 -0
  25. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/fr_FR/LC_MESSAGES/flask_security.mo +0 -0
  26. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ja_JP/LC_MESSAGES/flask_security.mo +0 -0
  27. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/nl_NL/LC_MESSAGES/flask_security.mo +0 -0
  28. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_BR/LC_MESSAGES/flask_security.mo +0 -0
  29. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_PT/LC_MESSAGES/flask_security.mo +0 -0
  30. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ru_RU/LC_MESSAGES/flask_security.mo +0 -0
  31. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/tr_TR/LC_MESSAGES/flask_security.mo +0 -0
  32. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/zh_Hans_CN/LC_MESSAGES/flask_security.mo +0 -0
  33. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/utils.py +55 -57
  34. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/views.py +110 -78
  35. Flask-Security-Invenio-3.4.0/pytest.ini +3 -0
  36. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/setup.cfg +9 -4
  37. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/conftest.py +23 -8
  38. Flask-Security-Invenio-3.4.0/tests/test_changeable.py +159 -0
  39. Flask-Security-Invenio-3.4.0/tests/test_cli.py +114 -0
  40. Flask-Security-Invenio-3.4.0/tests/test_common.py +203 -0
  41. Flask-Security-Invenio-3.4.0/tests/test_configuration.py +42 -0
  42. Flask-Security-Invenio-3.4.0/tests/test_confirmable.py +192 -0
  43. Flask-Security-Invenio-3.4.0/tests/test_context_processors.py +91 -0
  44. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/test_datastore.py +27 -26
  45. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/test_entities.py +9 -9
  46. Flask-Security-Invenio-3.4.0/tests/test_hashing.py +81 -0
  47. Flask-Security-Invenio-3.4.0/tests/test_misc.py +303 -0
  48. Flask-Security-Invenio-3.4.0/tests/test_recoverable.py +221 -0
  49. Flask-Security-Invenio-3.4.0/tests/test_registerable.py +106 -0
  50. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/test_trackable.py +16 -14
  51. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/utils.py +16 -21
  52. Flask-Security-Invenio-3.3.2/flask_security/core.py +0 -489
  53. Flask-Security-Invenio-3.3.2/flask_security/forms.py +0 -283
  54. Flask-Security-Invenio-3.3.2/pytest.ini +0 -3
  55. Flask-Security-Invenio-3.3.2/tests/test_changeable.py +0 -132
  56. Flask-Security-Invenio-3.3.2/tests/test_cli.py +0 -136
  57. Flask-Security-Invenio-3.3.2/tests/test_common.py +0 -204
  58. Flask-Security-Invenio-3.3.2/tests/test_configuration.py +0 -37
  59. Flask-Security-Invenio-3.3.2/tests/test_confirmable.py +0 -200
  60. Flask-Security-Invenio-3.3.2/tests/test_context_processors.py +0 -90
  61. Flask-Security-Invenio-3.3.2/tests/test_hashing.py +0 -61
  62. Flask-Security-Invenio-3.3.2/tests/test_misc.py +0 -280
  63. Flask-Security-Invenio-3.3.2/tests/test_recoverable.py +0 -244
  64. Flask-Security-Invenio-3.3.2/tests/test_registerable.py +0 -123
  65. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/.editorconfig +0 -0
  66. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/AUTHORS +0 -0
  67. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/dependency_links.txt +0 -0
  68. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/not-zip-safe +0 -0
  69. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/top_level.txt +0 -0
  70. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/LICENSE +0 -0
  71. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/README.rst +0 -0
  72. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/artwork/logo-helmet.svg +0 -0
  73. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/babel.ini +0 -0
  74. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/Makefile +0 -0
  75. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_static/logo-full.png +0 -0
  76. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_static/logo-helmet.png +0 -0
  77. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_templates/sidebarintro.html +0 -0
  78. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_templates/sidebarlogo.html +0 -0
  79. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/api.rst +0 -0
  80. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/authors.rst +0 -0
  81. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/changelog.rst +0 -0
  82. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/configuration.rst +0 -0
  83. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/contents.rst.inc +0 -0
  84. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/customizing.rst +0 -0
  85. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/features.rst +0 -0
  86. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/index.rst +0 -0
  87. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/models.rst +0 -0
  88. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/quickstart.rst +0 -0
  89. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/requirements.txt +0 -0
  90. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/_macros.html +0 -0
  91. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/_menu.html +0 -0
  92. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/_messages.html +0 -0
  93. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/change_password.html +0 -0
  94. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/change_notice.html +0 -0
  95. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/change_notice.txt +0 -0
  96. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/confirmation_instructions.html +0 -0
  97. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/confirmation_instructions.txt +0 -0
  98. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_instructions.html +0 -0
  99. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_instructions.txt +0 -0
  100. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_notice.html +0 -0
  101. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_notice.txt +0 -0
  102. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/welcome.html +0 -0
  103. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/welcome.txt +0 -0
  104. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/forgot_password.html +0 -0
  105. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/login_user.html +0 -0
  106. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/register_user.html +0 -0
  107. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/reset_password.html +0 -0
  108. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/send_confirmation.html +0 -0
  109. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ca_ES/LC_MESSAGES/flask_security.po +0 -0
  110. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/da_DK/LC_MESSAGES/flask_security.po +0 -0
  111. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/de_DE/LC_MESSAGES/flask_security.po +0 -0
  112. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/es_ES/LC_MESSAGES/flask_security.po +0 -0
  113. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/flask_security.pot +0 -0
  114. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/fr_FR/LC_MESSAGES/flask_security.po +0 -0
  115. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ja_JP/LC_MESSAGES/flask_security.po +0 -0
  116. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/nl_NL/LC_MESSAGES/flask_security.po +0 -0
  117. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_BR/LC_MESSAGES/flask_security.po +0 -0
  118. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_PT/LC_MESSAGES/flask_security.po +0 -0
  119. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ru_RU/LC_MESSAGES/flask_security.po +0 -0
  120. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/tr_TR/LC_MESSAGES/flask_security.po +0 -0
  121. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/zh_Hans_CN/LC_MESSAGES/flask_security.po +0 -0
  122. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/pyproject.toml +0 -0
  123. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/requirements.txt +0 -0
  124. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/run-tests.sh +0 -0
  125. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/setup.py +0 -0
  126. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/_messages.html +0 -0
  127. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/_nav.html +0 -0
  128. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/change_password.html +0 -0
  129. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/forgot_password.html +0 -0
  130. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/login_user.html +0 -0
  131. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/register_user.html +0 -0
  132. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/reset_password.html +0 -0
  133. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/send_confirmation.html +0 -0
  134. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/send_login.html +0 -0
  135. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/index.html +0 -0
  136. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/register.html +0 -0
  137. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/security/email/reset_instructions.html +0 -0
  138. {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/unauthorized.html +0 -0
@@ -0,0 +1 @@
1
+ 9bbfe7fea7cb756778562fed9dd12e54dc4b3de8
@@ -4,6 +4,24 @@ Flask-Security-Invenio Changelog
4
4
  Here you can see the full list of changes between each Flask-Security-Invenio
5
5
  release.
6
6
 
7
+ Version 3.4.0
8
+ -------------
9
+
10
+ Released November 19th 2024
11
+
12
+ - i18n-global: add compile-catalog fuzzy
13
+ - setup: remove flask upper pin
14
+ - fix: LegacyAPIWarning
15
+ - tests: move to reusable workflows
16
+
17
+
18
+ Version 3.3.3
19
+ -------------
20
+
21
+ Released October 18th 2023
22
+
23
+ - Removes `impesonator_id` from the session on logout.
24
+
7
25
  Version 3.3.2
8
26
  -------------
9
27
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Flask-Security-Invenio
3
- Version: 3.3.2
3
+ Version: 3.4.0
4
4
  Summary: "Simple security for Flask apps."
5
5
  Home-page: https://github.com/inveniosoftware/flask-security-invenio
6
6
  Author: CERN/TU Wien/JRC
@@ -1,4 +1,5 @@
1
1
  .editorconfig
2
+ .git-blame-ignore-revs
2
3
  AUTHORS
3
4
  CHANGES
4
5
  LICENSE
@@ -5,8 +5,9 @@ Flask-Login>=0.4.1
5
5
  Flask-Mail>=0.9.1
6
6
  Flask-Principal>=0.4.0
7
7
  Flask-WTF>=1.1.0
8
- Flask<2.3.0,>=1.1.4
8
+ Flask>=1.1.4
9
9
  itsdangerous>=2.0
10
+ markupsafe>=2.1.5
10
11
  passlib>=1.7
11
12
 
12
13
  [tests]
@@ -17,11 +18,11 @@ Flask-Sphinx-Themes>=1.0.2
17
18
  Flask-SQLAlchemy>=2.5.1
18
19
  mock>=1.3.0
19
20
  msgcheck>=2.9
21
+ pytest-black-ng>=0.4.0
20
22
  pytest-cov>=2.10.1
21
23
  pytest-flask>=1.0.0
22
24
  pytest-isort>=1.2.0
23
25
  pytest-pycodestyle>=2.2.0
24
26
  pytest-pydocstyle>=2.2.0
25
- pytest<7,>=6
26
- sphinx<5,>=4.2.0
27
- Werkzeug<2.3.0,>=1.0.1
27
+ pytest<9,>=6
28
+ sphinx>=4.2.0
@@ -24,3 +24,4 @@ recursive-include docs Makefile
24
24
  recursive-include flask_security/templates *.*
25
25
  recursive-include flask_security/translations *.po *.pot *.mo
26
26
  recursive-include tests *
27
+ include .git-blame-ignore-revs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Flask-Security-Invenio
3
- Version: 3.3.2
3
+ Version: 3.4.0
4
4
  Summary: "Simple security for Flask apps."
5
5
  Home-page: https://github.com/inveniosoftware/flask-security-invenio
6
6
  Author: CERN/TU Wien/JRC
@@ -20,7 +20,7 @@ from flask_security import __version__
20
20
  # If extensions (or modules to document with autodoc) are in another directory,
21
21
  # add these directories to sys.path here. If the directory is relative to the
22
22
  # documentation root, use os.path.abspath to make it absolute, like shown here.
23
- sys.path.insert(0, os.path.abspath('..'))
23
+ sys.path.insert(0, os.path.abspath(".."))
24
24
 
25
25
  # -- General configuration -----------------------------------------------
26
26
 
@@ -29,23 +29,23 @@ sys.path.insert(0, os.path.abspath('..'))
29
29
 
30
30
  # Add any Sphinx extension module names here, as strings. They can be
31
31
  # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
32
- extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx']
32
+ extensions = ["sphinx.ext.autodoc", "sphinx.ext.intersphinx"]
33
33
 
34
34
  # Add any paths that contain templates here, relative to this directory.
35
- templates_path = ['_templates']
35
+ templates_path = ["_templates"]
36
36
 
37
37
  # The suffix of source filenames.
38
- source_suffix = '.rst'
38
+ source_suffix = ".rst"
39
39
 
40
40
  # The encoding of source files.
41
41
  # source_encoding = 'utf-8-sig'
42
42
 
43
43
  # The master toctree document.
44
- master_doc = 'index'
44
+ master_doc = "index"
45
45
 
46
46
  # General information about the project.
47
- project = u'Flask-Security-Invenio'
48
- copyright = u'2012-2019, Matt Wright, 2022 CERN'
47
+ project = "Flask-Security-Invenio"
48
+ copyright = "2012-2019, Matt Wright, 2022 CERN"
49
49
 
50
50
  # The version info for the project you're documenting, acts as replacement for
51
51
  # |version| and |release|, also used in various other places throughout the
@@ -58,7 +58,7 @@ release = version
58
58
 
59
59
  # The language for content autogenerated by Sphinx. Refer to documentation
60
60
  # for a list of supported languages.
61
- # language = None
61
+ language = "en"
62
62
 
63
63
  # There are two options for replacing |today|: either, you set today to some
64
64
  # non-false value, then it is used:
@@ -68,7 +68,7 @@ release = version
68
68
 
69
69
  # List of patterns, relative to source directory, that match files and
70
70
  # directories to ignore when looking for source files.
71
- exclude_patterns = ['_build']
71
+ exclude_patterns = ["_build"]
72
72
 
73
73
  # The reST default role (used for this markup: `text`) to use for all
74
74
  # documents.
@@ -86,7 +86,7 @@ exclude_patterns = ['_build']
86
86
  # show_authors = False
87
87
 
88
88
  # The name of the Pygments (syntax highlighting) style to use.
89
- pygments_style = 'sphinx'
89
+ pygments_style = "sphinx"
90
90
 
91
91
  # A list of ignored prefixes for module index sorting.
92
92
  # modindex_common_prefix = []
@@ -96,20 +96,20 @@ pygments_style = 'sphinx'
96
96
 
97
97
  # The theme to use for HTML and HTML Help pages. Major themes that come with
98
98
  # Sphinx are currently 'default' and 'sphinxdoc'.
99
- html_theme = 'flask'
99
+ html_theme = "flask"
100
100
 
101
101
  # Theme options are theme-specific and customize the look and feel of a theme
102
102
  # further. For a list of options available for each theme, see the
103
103
  # documentation.
104
104
  html_theme_options = {
105
- 'github_fork': 'inveniosoftware/flask-security-invenio',
105
+ "github_fork": "inveniosoftware/flask-security-invenio",
106
106
  # 'index_logo': False
107
- 'touch_icon': 'touch-icon.png',
108
- 'index_logo': 'logo-full.png'
107
+ "touch_icon": "touch-icon.png",
108
+ "index_logo": "logo-full.png",
109
109
  }
110
110
 
111
111
  # Add any paths that contain custom themes here, relative to this directory.
112
- html_theme_path = ['_themes']
112
+ html_theme_path = ["_themes"]
113
113
 
114
114
  # The name for this set of Sphinx documents. If None, it defaults to
115
115
  # "<project> v<release> documentation".
@@ -130,7 +130,7 @@ html_theme_path = ['_themes']
130
130
  # Add any paths that contain custom static files (such as style sheets) here,
131
131
  # relative to this directory. They are copied after the builtin static files,
132
132
  # so a file named "default.css" will overwrite the builtin "default.css".
133
- html_static_path = ['_static']
133
+ html_static_path = ["_static"]
134
134
 
135
135
  # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
136
136
  # using the given strftime format.
@@ -142,9 +142,14 @@ html_static_path = ['_static']
142
142
 
143
143
  # Custom sidebar templates, maps document names to template names.
144
144
  html_sidebars = {
145
- 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'],
146
- '**': ['sidebarlogo.html', 'localtoc.html', 'relations.html',
147
- 'sourcelink.html', 'searchbox.html']
145
+ "index": ["sidebarintro.html", "sourcelink.html", "searchbox.html"],
146
+ "**": [
147
+ "sidebarlogo.html",
148
+ "localtoc.html",
149
+ "relations.html",
150
+ "sourcelink.html",
151
+ "searchbox.html",
152
+ ],
148
153
  }
149
154
 
150
155
  # Additional templates that should be rendered to pages, maps page names to
@@ -178,7 +183,7 @@ html_sidebars = {
178
183
  # html_file_suffix = None
179
184
 
180
185
  # Output file base name for HTML help builder.
181
- htmlhelp_basename = 'Flask-SecurityForkdoc'
186
+ htmlhelp_basename = "Flask-SecurityForkdoc"
182
187
 
183
188
 
184
189
  # -- Options for LaTeX output --------------------------------------------
@@ -186,10 +191,8 @@ htmlhelp_basename = 'Flask-SecurityForkdoc'
186
191
  latex_elements = {
187
192
  # The paper size ('letterpaper' or 'a4paper').
188
193
  # 'papersize': 'letterpaper',
189
-
190
194
  # The font size ('10pt', '11pt' or '12pt').
191
195
  # 'pointsize': '10pt',
192
-
193
196
  # Additional stuff for the LaTeX preamble.
194
197
  # 'preamble': '',
195
198
  }
@@ -198,8 +201,13 @@ latex_elements = {
198
201
  # (source start file, target name, title, author, documentclass
199
202
  # [howto/manual]).
200
203
  latex_documents = [
201
- ('index', 'Flask-Security-Invenio.tex', u'Flask-Security-Invenio Documentation',
202
- u'Matt Wright', 'manual'),
204
+ (
205
+ "index",
206
+ "Flask-Security-Invenio.tex",
207
+ "Flask-Security-Invenio Documentation",
208
+ "Matt Wright",
209
+ "manual",
210
+ ),
203
211
  ]
204
212
 
205
213
  # The name of an image file (relative to this directory) to place at the top of
@@ -228,8 +236,7 @@ latex_documents = [
228
236
  # One entry per manual page. List of tuples
229
237
  # (source start file, name, description, authors, manual section).
230
238
  man_pages = [
231
- ('index', 'flask-security', u'Flask-Security Documentation',
232
- [u'Matt Wright'], 1)
239
+ ("index", "flask-security", "Flask-Security Documentation", ["Matt Wright"], 1)
233
240
  ]
234
241
 
235
242
  # If true, show URL addresses after external links.
@@ -242,9 +249,15 @@ man_pages = [
242
249
  # (source start file, target name, title, author,
243
250
  # dir menu entry, description, category)
244
251
  texinfo_documents = [
245
- ('index', 'Flask-Security', u'Flask-Security Documentation',
246
- u'Matt Wright', 'Flask-Security', 'One line description of project.',
247
- 'Miscellaneous'),
252
+ (
253
+ "index",
254
+ "Flask-Security",
255
+ "Flask-Security Documentation",
256
+ "Matt Wright",
257
+ "Flask-Security",
258
+ "One line description of project.",
259
+ "Miscellaneous",
260
+ ),
248
261
  ]
249
262
 
250
263
  # Documents to append as an appendix to all manuals.
@@ -260,10 +273,10 @@ texinfo_documents = [
260
273
  # -- Options for Epub output ---------------------------------------------
261
274
 
262
275
  # Bibliographic Dublin Core info.
263
- epub_title = u'Flask-Security'
264
- epub_author = u'Matt Wright'
265
- epub_publisher = u'Matt Wright'
266
- epub_copyright = u'2012, Matt Wright'
276
+ epub_title = "Flask-Security"
277
+ epub_author = "Matt Wright"
278
+ epub_publisher = "Matt Wright"
279
+ epub_copyright = "2012, Matt Wright"
267
280
 
268
281
  # The language of the text. It defaults to the language option
269
282
  # or en if the language is not set.
@@ -301,4 +314,6 @@ epub_copyright = u'2012, Matt Wright'
301
314
 
302
315
 
303
316
  # Example configuration for intersphinx: refer to the Python standard library.
304
- intersphinx_mapping = {'http://docs.python.org/': None}
317
+ intersphinx_mapping = {
318
+ "python": ("http://docs.python.org/", None),
319
+ }
@@ -18,12 +18,14 @@
18
18
  try:
19
19
  # Werkzeug <2.1
20
20
  from werkzeug import security
21
+
21
22
  security.safe_str_cmp
22
23
  except AttributeError:
23
24
  # Werkzeug >=2.1
24
25
  import hmac
25
26
 
26
27
  from werkzeug import security
28
+
27
29
  security.safe_str_cmp = hmac.compare_digest
28
30
 
29
31
  from flask_login import login_required
@@ -31,37 +33,47 @@ from flask_login import login_required
31
33
  from .core import AnonymousUser, RoleMixin, Security, UserMixin, current_user
32
34
  from .datastore import SQLAlchemySessionUserDatastore, SQLAlchemyUserDatastore
33
35
  from .decorators import auth_required, roles_accepted, roles_required
34
- from .forms import ConfirmRegisterForm, ForgotPasswordForm, LoginForm, \
35
- RegisterForm, ResetPasswordForm
36
- from .signals import confirm_instructions_sent, password_reset, \
37
- reset_password_instructions_sent, user_confirmed, user_registered
36
+ from .forms import (
37
+ ConfirmRegisterForm,
38
+ ForgotPasswordForm,
39
+ LoginForm,
40
+ RegisterForm,
41
+ ResetPasswordForm,
42
+ )
43
+ from .signals import (
44
+ confirm_instructions_sent,
45
+ password_reset,
46
+ reset_password_instructions_sent,
47
+ user_confirmed,
48
+ user_registered,
49
+ )
38
50
  from .utils import impersonate_user, login_user, logout_user, url_for_security
39
51
 
40
- __version__ = '3.3.2'
52
+ __version__ = "3.4.0"
41
53
  __all__ = (
42
- 'AnonymousUser',
43
- 'auth_required',
44
- 'confirm_instructions_sent',
45
- 'ConfirmRegisterForm',
46
- 'current_user',
47
- 'ForgotPasswordForm',
48
- 'impersonate_user',
49
- 'login_required',
50
- 'login_user',
51
- 'LoginForm',
52
- 'logout_user',
53
- 'password_reset',
54
- 'RegisterForm',
55
- 'reset_password_instructions_sent',
56
- 'ResetPasswordForm',
57
- 'RoleMixin',
58
- 'roles_accepted',
59
- 'roles_required',
60
- 'Security',
61
- 'SQLAlchemySessionUserDatastore',
62
- 'SQLAlchemyUserDatastore',
63
- 'url_for_security',
64
- 'user_confirmed',
65
- 'user_registered',
66
- 'UserMixin',
54
+ "AnonymousUser",
55
+ "auth_required",
56
+ "confirm_instructions_sent",
57
+ "ConfirmRegisterForm",
58
+ "current_user",
59
+ "ForgotPasswordForm",
60
+ "impersonate_user",
61
+ "login_required",
62
+ "login_user",
63
+ "LoginForm",
64
+ "logout_user",
65
+ "password_reset",
66
+ "RegisterForm",
67
+ "reset_password_instructions_sent",
68
+ "ResetPasswordForm",
69
+ "RoleMixin",
70
+ "roles_accepted",
71
+ "roles_required",
72
+ "Security",
73
+ "SQLAlchemySessionUserDatastore",
74
+ "SQLAlchemyUserDatastore",
75
+ "url_for_security",
76
+ "user_confirmed",
77
+ "user_registered",
78
+ "UserMixin",
67
79
  )
@@ -9,7 +9,7 @@
9
9
  from flask_babel import Domain
10
10
  from wtforms.i18n import messages_path
11
11
 
12
- wtforms_domain = Domain(messages_path(), domain='wtforms')
12
+ wtforms_domain = Domain(messages_path(), domain="wtforms")
13
13
 
14
14
 
15
15
  class Translations(object):
@@ -17,7 +17,7 @@ from .signals import password_changed
17
17
  from .utils import config_value, hash_password, send_mail
18
18
 
19
19
  # Convenient references
20
- _security = LocalProxy(lambda: current_app.extensions['security'])
20
+ _security = LocalProxy(lambda: current_app.extensions["security"])
21
21
 
22
22
  _datastore = LocalProxy(lambda: _security.datastore)
23
23
 
@@ -27,9 +27,9 @@ def send_password_changed_notice(user):
27
27
 
28
28
  :param user: The user to send the notice to
29
29
  """
30
- if config_value('SEND_PASSWORD_CHANGE_EMAIL'):
31
- subject = config_value('EMAIL_SUBJECT_PASSWORD_CHANGE_NOTICE')
32
- send_mail(subject, user.email, 'change_notice', user=user)
30
+ if config_value("SEND_PASSWORD_CHANGE_EMAIL"):
31
+ subject = config_value("EMAIL_SUBJECT_PASSWORD_CHANGE_NOTICE")
32
+ send_mail(subject, user.email, "change_notice", user=user)
33
33
 
34
34
 
35
35
  def change_user_password(user, password):
@@ -41,5 +41,4 @@ def change_user_password(user, password):
41
41
  user.password = hash_password(password)
42
42
  _datastore.put(user)
43
43
  send_password_changed_notice(user)
44
- password_changed.send(current_app._get_current_object(),
45
- user=user)
44
+ password_changed.send(current_app._get_current_object(), user=user)
@@ -19,16 +19,18 @@ from werkzeug.local import LocalProxy
19
19
 
20
20
  from .utils import hash_password
21
21
 
22
- _security = LocalProxy(lambda: current_app.extensions['security'])
23
- _datastore = LocalProxy(lambda: current_app.extensions['security'].datastore)
22
+ _security = LocalProxy(lambda: current_app.extensions["security"])
23
+ _datastore = LocalProxy(lambda: current_app.extensions["security"].datastore)
24
24
 
25
25
 
26
26
  def commit(fn):
27
27
  """Decorator to commit changes in datastore."""
28
+
28
29
  @wraps(fn)
29
30
  def wrapper(*args, **kwargs):
30
31
  fn(*args, **kwargs)
31
32
  _datastore.commit()
33
+
32
34
  return wrapper
33
35
 
34
36
 
@@ -42,109 +44,108 @@ def roles():
42
44
  """Role commands."""
43
45
 
44
46
 
45
- @users.command('create')
46
- @click.argument('identity')
47
+ @users.command("create")
48
+ @click.argument("identity")
47
49
  @click.password_option()
48
- @click.option('-a', '--active', default=False, is_flag=True)
50
+ @click.option("-a", "--active", default=False, is_flag=True)
49
51
  @with_appcontext
50
52
  @commit
51
53
  def users_create(identity, password, active):
52
54
  """Create a user."""
53
55
  kwargs = {attr: identity for attr in _security.user_identity_attributes}
54
- kwargs.update(**{'password': password, 'active': 'y' if active else ''})
56
+ kwargs.update(**{"password": password, "active": "y" if active else ""})
55
57
 
56
- form = _security.confirm_register_form(
57
- MultiDict(kwargs), meta={'csrf': False}
58
- )
58
+ form = _security.confirm_register_form(MultiDict(kwargs), meta={"csrf": False})
59
59
 
60
60
  if form.validate():
61
- kwargs['password'] = hash_password(kwargs['password'])
62
- kwargs['active'] = active
61
+ kwargs["password"] = hash_password(kwargs["password"])
62
+ kwargs["active"] = active
63
63
  _datastore.create_user(**kwargs)
64
- click.secho('User created successfully.', fg='green')
65
- kwargs['password'] = '****'
64
+ click.secho("User created successfully.", fg="green")
65
+ kwargs["password"] = "****"
66
66
  click.echo(kwargs)
67
67
  else:
68
- raise click.UsageError('Error creating user. %s' % form.errors)
68
+ raise click.UsageError("Error creating user. %s" % form.errors)
69
69
 
70
70
 
71
- @roles.command('create')
72
- @click.argument('name')
73
- @click.option('-d', '--description', default=None)
71
+ @roles.command("create")
72
+ @click.argument("name")
73
+ @click.option("-d", "--description", default=None)
74
74
  @with_appcontext
75
75
  @commit
76
76
  def roles_create(**kwargs):
77
77
  """Create a role."""
78
78
  _datastore.create_role(**kwargs)
79
- click.secho('Role "%(name)s" created successfully.' % kwargs, fg='green')
79
+ click.secho('Role "%(name)s" created successfully.' % kwargs, fg="green")
80
80
 
81
81
 
82
- @roles.command('add')
83
- @click.argument('user')
84
- @click.argument('role')
82
+ @roles.command("add")
83
+ @click.argument("user")
84
+ @click.argument("role")
85
85
  @with_appcontext
86
86
  @commit
87
87
  def roles_add(user, role):
88
88
  """Add user to role."""
89
89
  user, role = _datastore._prepare_role_modify_args(user, role)
90
90
  if user is None:
91
- raise click.UsageError('Cannot find user.')
91
+ raise click.UsageError("Cannot find user.")
92
92
  if role is None:
93
- raise click.UsageError('Cannot find role.')
93
+ raise click.UsageError("Cannot find role.")
94
94
  if _datastore.add_role_to_user(user, role):
95
- click.secho('Role "{0}" added to user "{1}" '
96
- 'successfully.'.format(role, user), fg='green')
95
+ click.secho(
96
+ 'Role "{0}" added to user "{1}" ' "successfully.".format(role, user),
97
+ fg="green",
98
+ )
97
99
  else:
98
- raise click.UsageError('Cannot add role to user.')
100
+ raise click.UsageError("Cannot add role to user.")
99
101
 
100
102
 
101
- @roles.command('remove')
102
- @click.argument('user')
103
- @click.argument('role')
103
+ @roles.command("remove")
104
+ @click.argument("user")
105
+ @click.argument("role")
104
106
  @with_appcontext
105
107
  @commit
106
108
  def roles_remove(user, role):
107
109
  """Remove user from role."""
108
110
  user, role = _datastore._prepare_role_modify_args(user, role)
109
111
  if user is None:
110
- raise click.UsageError('Cannot find user.')
112
+ raise click.UsageError("Cannot find user.")
111
113
  if role is None:
112
- raise click.UsageError('Cannot find role.')
114
+ raise click.UsageError("Cannot find role.")
113
115
  if _datastore.remove_role_from_user(user, role):
114
- click.secho('Role "{0}" removed from user "{1}" '
115
- 'successfully.'.format(role, user), fg='green')
116
+ click.secho(
117
+ 'Role "{0}" removed from user "{1}" ' "successfully.".format(role, user),
118
+ fg="green",
119
+ )
116
120
  else:
117
- raise click.UsageError('Cannot remove role from user.')
121
+ raise click.UsageError("Cannot remove role from user.")
118
122
 
119
123
 
120
- @users.command('activate')
121
- @click.argument('user')
124
+ @users.command("activate")
125
+ @click.argument("user")
122
126
  @with_appcontext
123
127
  @commit
124
128
  def users_activate(user):
125
129
  """Activate a user."""
126
130
  user_obj = _datastore.get_user(user)
127
131
  if user_obj is None:
128
- raise click.UsageError('ERROR: User not found.')
132
+ raise click.UsageError("ERROR: User not found.")
129
133
  if _datastore.activate_user(user_obj):
130
- click.secho('User "{0}" has been activated.'.format(user), fg='green')
134
+ click.secho('User "{0}" has been activated.'.format(user), fg="green")
131
135
  else:
132
- click.secho('User "{0}" was already activated.'.format(user),
133
- fg='yellow')
136
+ click.secho('User "{0}" was already activated.'.format(user), fg="yellow")
134
137
 
135
138
 
136
- @users.command('deactivate')
137
- @click.argument('user')
139
+ @users.command("deactivate")
140
+ @click.argument("user")
138
141
  @with_appcontext
139
142
  @commit
140
143
  def users_deactivate(user):
141
144
  """Deactivate a user."""
142
145
  user_obj = _datastore.get_user(user)
143
146
  if user_obj is None:
144
- raise click.UsageError('ERROR: User not found.')
147
+ raise click.UsageError("ERROR: User not found.")
145
148
  if _datastore.deactivate_user(user_obj):
146
- click.secho('User "{0}" has been deactivated.'.format(user),
147
- fg='green')
149
+ click.secho('User "{0}" has been deactivated.'.format(user), fg="green")
148
150
  else:
149
- click.secho('User "{0}" was already deactivated.'.format(user),
150
- fg='yellow')
151
+ click.secho('User "{0}" was already deactivated.'.format(user), fg="yellow")