WuttaWeb 0.5.0__tar.gz → 0.7.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 (158) hide show
  1. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/CHANGELOG.md +40 -0
  2. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/PKG-INFO +3 -2
  3. wuttaweb-0.7.0/docs/api/wuttaweb/forms.schema.rst +6 -0
  4. wuttaweb-0.7.0/docs/api/wuttaweb/forms.widgets.rst +6 -0
  5. wuttaweb-0.7.0/docs/api/wuttaweb/grids.base.rst +6 -0
  6. wuttaweb-0.7.0/docs/api/wuttaweb/grids.rst +6 -0
  7. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/index.rst +7 -0
  8. wuttaweb-0.7.0/docs/api/wuttaweb/views.people.rst +6 -0
  9. wuttaweb-0.7.0/docs/api/wuttaweb/views.roles.rst +6 -0
  10. wuttaweb-0.7.0/docs/api/wuttaweb/views.users.rst +6 -0
  11. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/pyproject.toml +3 -2
  12. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/app.py +6 -0
  13. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/auth.py +90 -0
  14. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/forms/__init__.py +2 -1
  15. wuttaweb-0.7.0/src/wuttaweb/forms/base.py +1033 -0
  16. wuttaweb-0.7.0/src/wuttaweb/forms/schema.py +357 -0
  17. wuttaweb-0.7.0/src/wuttaweb/forms/widgets.py +192 -0
  18. wuttaweb-0.7.0/src/wuttaweb/grids/__init__.py +31 -0
  19. wuttaweb-0.7.0/src/wuttaweb/grids/base.py +591 -0
  20. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/menus.py +49 -4
  21. wuttaweb-0.7.0/src/wuttaweb/static/img/favicon.ico +0 -0
  22. wuttaweb-0.7.0/src/wuttaweb/static/img/logo.png +0 -0
  23. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/subscribers.py +58 -9
  24. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/appinfo/index.mako +5 -2
  25. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/base.mako +52 -12
  26. wuttaweb-0.7.0/src/wuttaweb/templates/deform/checkbox.pt +11 -0
  27. wuttaweb-0.7.0/src/wuttaweb/templates/deform/checkbox_choice.pt +18 -0
  28. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/deform/checked_password.pt +2 -1
  29. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/deform/password.pt +2 -1
  30. wuttaweb-0.7.0/src/wuttaweb/templates/deform/permissions.pt +23 -0
  31. wuttaweb-0.7.0/src/wuttaweb/templates/deform/readonly/notes.pt +7 -0
  32. wuttaweb-0.7.0/src/wuttaweb/templates/deform/readonly/objectref.pt +1 -0
  33. wuttaweb-0.7.0/src/wuttaweb/templates/deform/readonly/permissions.pt +18 -0
  34. wuttaweb-0.7.0/src/wuttaweb/templates/deform/select.pt +50 -0
  35. wuttaweb-0.7.0/src/wuttaweb/templates/deform/textarea.pt +11 -0
  36. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/deform/textinput.pt +2 -1
  37. wuttaweb-0.7.0/src/wuttaweb/templates/forbidden.mako +26 -0
  38. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/form.mako +9 -5
  39. wuttaweb-0.7.0/src/wuttaweb/templates/forms/vue_template.mako +68 -0
  40. wuttaweb-0.7.0/src/wuttaweb/templates/grids/vue_template.mako +54 -0
  41. wuttaweb-0.7.0/src/wuttaweb/templates/master/create.mako +7 -0
  42. wuttaweb-0.7.0/src/wuttaweb/templates/master/delete.mako +18 -0
  43. wuttaweb-0.7.0/src/wuttaweb/templates/master/edit.mako +9 -0
  44. wuttaweb-0.7.0/src/wuttaweb/templates/master/form.mako +5 -0
  45. wuttaweb-0.7.0/src/wuttaweb/templates/master/index.mako +32 -0
  46. wuttaweb-0.7.0/src/wuttaweb/templates/master/view.mako +9 -0
  47. wuttaweb-0.7.0/src/wuttaweb/templates/notfound.mako +23 -0
  48. wuttaweb-0.7.0/src/wuttaweb/templates/people/view_profile.mako +12 -0
  49. wuttaweb-0.7.0/src/wuttaweb/templates/setup.mako +20 -0
  50. wuttaweb-0.7.0/src/wuttaweb/templates/wutta-components.mako +71 -0
  51. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/util.py +120 -0
  52. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/auth.py +15 -11
  53. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/base.py +23 -3
  54. wuttaweb-0.7.0/src/wuttaweb/views/common.py +223 -0
  55. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/essential.py +7 -0
  56. wuttaweb-0.7.0/src/wuttaweb/views/master.py +1760 -0
  57. wuttaweb-0.7.0/src/wuttaweb/views/people.py +138 -0
  58. wuttaweb-0.7.0/src/wuttaweb/views/roles.py +271 -0
  59. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/settings.py +54 -14
  60. wuttaweb-0.7.0/src/wuttaweb/views/users.py +201 -0
  61. wuttaweb-0.7.0/tests/forms/test_base.py +545 -0
  62. wuttaweb-0.7.0/tests/forms/test_schema.py +254 -0
  63. wuttaweb-0.7.0/tests/forms/test_widgets.py +115 -0
  64. wuttaweb-0.7.0/tests/grids/test_base.py +234 -0
  65. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_auth.py +24 -0
  66. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_menus.py +24 -9
  67. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_subscribers.py +133 -2
  68. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_util.py +90 -0
  69. wuttaweb-0.5.0/tests/views/utils.py → wuttaweb-0.7.0/tests/util.py +47 -14
  70. wuttaweb-0.7.0/tests/views/__init__.py +0 -0
  71. wuttaweb-0.7.0/tests/views/test___init__.py +10 -0
  72. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/views/test_auth.py +45 -52
  73. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/views/test_base.py +5 -0
  74. wuttaweb-0.7.0/tests/views/test_common.py +95 -0
  75. wuttaweb-0.7.0/tests/views/test_master.py +979 -0
  76. wuttaweb-0.7.0/tests/views/test_people.py +73 -0
  77. wuttaweb-0.7.0/tests/views/test_roles.py +242 -0
  78. wuttaweb-0.7.0/tests/views/test_settings.py +60 -0
  79. wuttaweb-0.7.0/tests/views/test_users.py +188 -0
  80. wuttaweb-0.5.0/src/wuttaweb/forms/base.py +0 -477
  81. wuttaweb-0.5.0/src/wuttaweb/static/img/favicon.ico +0 -0
  82. wuttaweb-0.5.0/src/wuttaweb/static/img/logo.png +0 -0
  83. wuttaweb-0.5.0/src/wuttaweb/templates/forms/vue_template.mako +0 -59
  84. wuttaweb-0.5.0/src/wuttaweb/templates/master/index.mako +0 -13
  85. wuttaweb-0.5.0/src/wuttaweb/views/common.py +0 -74
  86. wuttaweb-0.5.0/src/wuttaweb/views/master.py +0 -802
  87. wuttaweb-0.5.0/tests/forms/test_base.py +0 -273
  88. wuttaweb-0.5.0/tests/utils.py +0 -11
  89. wuttaweb-0.5.0/tests/views/test___init__.py +0 -14
  90. wuttaweb-0.5.0/tests/views/test_common.py +0 -27
  91. wuttaweb-0.5.0/tests/views/test_master.py +0 -370
  92. wuttaweb-0.5.0/tests/views/test_settings.py +0 -23
  93. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/.gitignore +0 -0
  94. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/COPYING.txt +0 -0
  95. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/README.md +0 -0
  96. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/Makefile +0 -0
  97. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/_static/.keepme +0 -0
  98. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/index.rst +0 -0
  99. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/app.rst +0 -0
  100. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/auth.rst +0 -0
  101. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/db.rst +0 -0
  102. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/forms.base.rst +0 -0
  103. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/forms.rst +0 -0
  104. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/handler.rst +0 -0
  105. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/helpers.rst +0 -0
  106. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/menus.rst +0 -0
  107. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/static.rst +0 -0
  108. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/subscribers.rst +0 -0
  109. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/util.rst +0 -0
  110. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.auth.rst +0 -0
  111. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.base.rst +0 -0
  112. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.common.rst +0 -0
  113. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.essential.rst +0 -0
  114. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.master.rst +0 -0
  115. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.rst +0 -0
  116. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.settings.rst +0 -0
  117. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/conf.py +0 -0
  118. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/glossary.rst +0 -0
  119. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/index.rst +0 -0
  120. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/make.bat +0 -0
  121. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/narr/index.rst +0 -0
  122. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/__init__.py +0 -0
  123. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/_version.py +0 -0
  124. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/db.py +0 -0
  125. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/handler.py +0 -0
  126. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/helpers.py +0 -0
  127. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/static/__init__.py +0 -0
  128. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/static/img/testing.png +0 -0
  129. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
  130. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/auth/change_password.mako +0 -0
  131. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/auth/login.mako +0 -0
  132. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/base_meta.mako +0 -0
  133. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/configure.mako +0 -0
  134. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/home.mako +0 -0
  135. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/master/configure.mako +0 -0
  136. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/page.mako +0 -0
  137. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/__init__.py +0 -0
  138. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tasks.py +0 -0
  139. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/__init__.py +0 -0
  140. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/forms/__init__.py +0 -0
  141. {wuttaweb-0.5.0/tests/views → wuttaweb-0.7.0/tests/grids}/__init__.py +0 -0
  142. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
  143. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
  144. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_oruga.js +0 -0
  145. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_oruga_bulma.css +0 -0
  146. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_oruga_bulma.js +0 -0
  147. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_vue.js +0 -0
  148. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_vue_fontawesome.js +0 -0
  149. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/buefy.css +0 -0
  150. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/buefy.js +0 -0
  151. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/fontawesome.js +0 -0
  152. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/vue.js +0 -0
  153. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/vue_resource.js +0 -0
  154. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_app.py +0 -0
  155. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_handler.py +0 -0
  156. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_helpers.py +0 -0
  157. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_static.py +0 -0
  158. {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tox.ini +0 -0
@@ -5,6 +5,46 @@ All notable changes to wuttaweb will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## v0.7.0 (2024-08-15)
9
+
10
+ ### Feat
11
+
12
+ - add sane views for 403 Forbidden and 404 Not Found
13
+ - add permission checks for menus, view routes
14
+ - add first-time setup page to create admin user
15
+ - expose User password for editing in master views
16
+ - expose Role permissions for editing
17
+ - expose User "roles" for editing
18
+ - improve widget, rendering for Role notes
19
+
20
+ ### Fix
21
+
22
+ - add stub for `PersonView.make_user()`
23
+ - allow arbitrary kwargs for `Form.render_vue_field()`
24
+ - make some tweaks for better tailbone compatibility
25
+ - prevent delete for built-in roles
26
+
27
+ ## v0.6.0 (2024-08-13)
28
+
29
+ ### Feat
30
+
31
+ - add basic Roles view
32
+ - add Users view; improve CRUD master for SQLAlchemy models
33
+ - add People view; improve CRUD master for SQLAlchemy models
34
+ - add basic support for SQLAlchemy model in master view
35
+ - add basic Create support for CRUD master view
36
+ - add basic Delete support for CRUD master view
37
+ - add basic Edit support for CRUD master view
38
+ - add auto-link (to "View") behavior for grid columns
39
+ - add basic support for "view" part of CRUD
40
+ - add basic `Grid` class, and /settings master view
41
+
42
+ ### Fix
43
+
44
+ - rename MasterView method to `configure_grid()`
45
+ - replace default logo, favicon images
46
+ - tweak labels for Web Libraries config
47
+
8
48
  ## v0.5.0 (2024-08-06)
9
49
 
10
50
  ### Feat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: WuttaWeb
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: Web App for Wutta Framework
5
5
  Project-URL: Homepage, https://wuttaproject.org/
6
6
  Project-URL: Repository, https://forgejo.wuttaproject.org/wutta/wuttaweb
@@ -24,6 +24,7 @@ Classifier: Programming Language :: Python :: 3.11
24
24
  Classifier: Topic :: Internet :: WWW/HTTP
25
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
26
  Requires-Python: >=3.8
27
+ Requires-Dist: colanderalchemy
27
28
  Requires-Dist: pyramid-beaker
28
29
  Requires-Dist: pyramid-deform
29
30
  Requires-Dist: pyramid-fanstatic
@@ -32,7 +33,7 @@ Requires-Dist: pyramid-tm
32
33
  Requires-Dist: pyramid>=2
33
34
  Requires-Dist: waitress
34
35
  Requires-Dist: webhelpers2
35
- Requires-Dist: wuttjamaican[db]>=0.10.0
36
+ Requires-Dist: wuttjamaican[db]>=0.11.1
36
37
  Requires-Dist: zope-sqlalchemy>=1.5
37
38
  Provides-Extra: docs
38
39
  Requires-Dist: furo; extra == 'docs'
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.forms.schema``
3
+ =========================
4
+
5
+ .. automodule:: wuttaweb.forms.schema
6
+ :members:
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.forms.widgets``
3
+ ==========================
4
+
5
+ .. automodule:: wuttaweb.forms.widgets
6
+ :members:
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.grids.base``
3
+ =======================
4
+
5
+ .. automodule:: wuttaweb.grids.base
6
+ :members:
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.grids``
3
+ ==================
4
+
5
+ .. automodule:: wuttaweb.grids
6
+ :members:
@@ -12,6 +12,10 @@
12
12
  db
13
13
  forms
14
14
  forms.base
15
+ forms.schema
16
+ forms.widgets
17
+ grids
18
+ grids.base
15
19
  handler
16
20
  helpers
17
21
  menus
@@ -24,4 +28,7 @@
24
28
  views.common
25
29
  views.essential
26
30
  views.master
31
+ views.people
32
+ views.roles
27
33
  views.settings
34
+ views.users
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.views.people``
3
+ ===========================
4
+
5
+ .. automodule:: wuttaweb.views.people
6
+ :members:
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.views.roles``
3
+ ========================
4
+
5
+ .. automodule:: wuttaweb.views.roles
6
+ :members:
@@ -0,0 +1,6 @@
1
+
2
+ ``wuttaweb.views.users``
3
+ ========================
4
+
5
+ .. automodule:: wuttaweb.views.users
6
+ :members:
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "WuttaWeb"
9
- version = "0.5.0"
9
+ version = "0.7.0"
10
10
  description = "Web App for Wutta Framework"
11
11
  readme = "README.md"
12
12
  authors = [{name = "Lance Edgar", email = "lance@edbob.org"}]
@@ -30,6 +30,7 @@ classifiers = [
30
30
  ]
31
31
  requires-python = ">= 3.8"
32
32
  dependencies = [
33
+ "ColanderAlchemy",
33
34
  "pyramid>=2",
34
35
  "pyramid_beaker",
35
36
  "pyramid_deform",
@@ -38,7 +39,7 @@ dependencies = [
38
39
  "pyramid_tm",
39
40
  "waitress",
40
41
  "WebHelpers2",
41
- "WuttJamaican[db]>=0.10.0",
42
+ "WuttJamaican[db]>=0.11.1",
42
43
  "zope.sqlalchemy>=1.5",
43
44
  ]
44
45
 
@@ -135,6 +135,12 @@ def make_pyramid_config(settings):
135
135
  pyramid_config.include('pyramid_mako')
136
136
  pyramid_config.include('pyramid_tm')
137
137
 
138
+ # add some permissions magic
139
+ pyramid_config.add_directive('add_wutta_permission_group',
140
+ 'wuttaweb.auth.add_permission_group')
141
+ pyramid_config.add_directive('add_wutta_permission',
142
+ 'wuttaweb.auth.add_permission')
143
+
138
144
  return pyramid_config
139
145
 
140
146
 
@@ -148,3 +148,93 @@ class WuttaSecurityPolicy:
148
148
  auth = app.get_auth_handler()
149
149
  user = self.identity(request)
150
150
  return auth.has_permission(self.db_session, user, permission)
151
+
152
+
153
+ def add_permission_group(pyramid_config, key, label=None, overwrite=True):
154
+ """
155
+ Pyramid directive to add a "permission group" to the app's
156
+ awareness.
157
+
158
+ The app must be made aware of all permissions, so they are exposed
159
+ when editing a
160
+ :class:`~wuttjamaican:wuttjamaican.db.model.auth.Role`. The logic
161
+ for discovering permissions is in
162
+ :meth:`~wuttaweb.views.roles.RoleView.get_available_permissions()`.
163
+
164
+ This is usually called from within a master view's
165
+ :meth:`~wuttaweb.views.master.MasterView.defaults()` to establish
166
+ the permission group which applies to the view model.
167
+
168
+ A simple example of usage::
169
+
170
+ pyramid_config.add_permission_group('widgets', label="Widgets")
171
+
172
+ :param key: Unique key for the permission group. In the context
173
+ of a master view, this will be the same as
174
+ :attr:`~wuttaweb.views.master.MasterView.permission_prefix`.
175
+
176
+ :param label: Optional label for the permission group. If not
177
+ specified, it is derived from ``key``.
178
+
179
+ :param overwrite: If the permission group was already established,
180
+ this flag controls whether the group's label should be
181
+ overwritten (with ``label``).
182
+
183
+ See also :func:`add_permission()`.
184
+ """
185
+ config = pyramid_config.get_settings()['wutta_config']
186
+ app = config.get_app()
187
+ def action():
188
+ perms = pyramid_config.get_settings().get('wutta_permissions', {})
189
+ if overwrite or key not in perms:
190
+ group = perms.setdefault(key, {'key': key})
191
+ group['label'] = label or app.make_title(key)
192
+ pyramid_config.add_settings({'wutta_permissions': perms})
193
+ pyramid_config.action(None, action)
194
+
195
+
196
+ def add_permission(pyramid_config, groupkey, key, label=None):
197
+ """
198
+ Pyramid directive to add a single "permission" to the app's
199
+ awareness.
200
+
201
+ The app must be made aware of all permissions, so they are exposed
202
+ when editing a
203
+ :class:`~wuttjamaican:wuttjamaican.db.model.auth.Role`. The logic
204
+ for discovering permissions is in
205
+ :meth:`~wuttaweb.views.roles.RoleView.get_available_permissions()`.
206
+
207
+ This is usually called from within a master view's
208
+ :meth:`~wuttaweb.views.master.MasterView.defaults()` to establish
209
+ "known" permissions based on master view feature flags
210
+ (:attr:`~wuttaweb.views.master.MasterView.viewable`,
211
+ :attr:`~wuttaweb.views.master.MasterView.editable`, etc.).
212
+
213
+ A simple example of usage::
214
+
215
+ pyramid_config.add_permission('widgets', 'widgets.polish',
216
+ label="Polish all the widgets")
217
+
218
+ :param key: Unique key for the permission group. In the context
219
+ of a master view, this will be the same as
220
+ :attr:`~wuttaweb.views.master.MasterView.permission_prefix`.
221
+
222
+ :param key: Unique key for the permission. This should be the
223
+ "complete" permission name which includes the permission
224
+ prefix.
225
+
226
+ :param label: Optional label for the permission. If not
227
+ specified, it is derived from ``key``.
228
+
229
+ See also :func:`add_permission_group()`.
230
+ """
231
+ def action():
232
+ config = pyramid_config.get_settings()['wutta_config']
233
+ app = config.get_app()
234
+ perms = pyramid_config.get_settings().get('wutta_permissions', {})
235
+ group = perms.setdefault(groupkey, {'key': groupkey})
236
+ group.setdefault('label', app.make_title(groupkey))
237
+ perm = group.setdefault('perms', {}).setdefault(key, {'key': key})
238
+ perm['label'] = label or app.make_title(key)
239
+ pyramid_config.add_settings({'wutta_permissions': perms})
240
+ pyramid_config.action(None, action)
@@ -26,6 +26,7 @@ Forms Library
26
26
  The ``wuttaweb.forms`` namespace contains the following:
27
27
 
28
28
  * :class:`~wuttaweb.forms.base.Form`
29
+ * :class:`~wuttaweb.forms.base.FieldList`
29
30
  """
30
31
 
31
- from .base import Form
32
+ from .base import Form, FieldList