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.
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/CHANGELOG.md +40 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/PKG-INFO +3 -2
- wuttaweb-0.7.0/docs/api/wuttaweb/forms.schema.rst +6 -0
- wuttaweb-0.7.0/docs/api/wuttaweb/forms.widgets.rst +6 -0
- wuttaweb-0.7.0/docs/api/wuttaweb/grids.base.rst +6 -0
- wuttaweb-0.7.0/docs/api/wuttaweb/grids.rst +6 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/index.rst +7 -0
- wuttaweb-0.7.0/docs/api/wuttaweb/views.people.rst +6 -0
- wuttaweb-0.7.0/docs/api/wuttaweb/views.roles.rst +6 -0
- wuttaweb-0.7.0/docs/api/wuttaweb/views.users.rst +6 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/pyproject.toml +3 -2
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/app.py +6 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/auth.py +90 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/forms/__init__.py +2 -1
- wuttaweb-0.7.0/src/wuttaweb/forms/base.py +1033 -0
- wuttaweb-0.7.0/src/wuttaweb/forms/schema.py +357 -0
- wuttaweb-0.7.0/src/wuttaweb/forms/widgets.py +192 -0
- wuttaweb-0.7.0/src/wuttaweb/grids/__init__.py +31 -0
- wuttaweb-0.7.0/src/wuttaweb/grids/base.py +591 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/menus.py +49 -4
- wuttaweb-0.7.0/src/wuttaweb/static/img/favicon.ico +0 -0
- wuttaweb-0.7.0/src/wuttaweb/static/img/logo.png +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/subscribers.py +58 -9
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/appinfo/index.mako +5 -2
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/base.mako +52 -12
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/checkbox.pt +11 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/checkbox_choice.pt +18 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/deform/checked_password.pt +2 -1
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/deform/password.pt +2 -1
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/permissions.pt +23 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/readonly/notes.pt +7 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/readonly/objectref.pt +1 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/readonly/permissions.pt +18 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/select.pt +50 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/deform/textarea.pt +11 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/deform/textinput.pt +2 -1
- wuttaweb-0.7.0/src/wuttaweb/templates/forbidden.mako +26 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/form.mako +9 -5
- wuttaweb-0.7.0/src/wuttaweb/templates/forms/vue_template.mako +68 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/grids/vue_template.mako +54 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/master/create.mako +7 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/master/delete.mako +18 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/master/edit.mako +9 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/master/form.mako +5 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/master/index.mako +32 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/master/view.mako +9 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/notfound.mako +23 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/people/view_profile.mako +12 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/setup.mako +20 -0
- wuttaweb-0.7.0/src/wuttaweb/templates/wutta-components.mako +71 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/util.py +120 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/auth.py +15 -11
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/base.py +23 -3
- wuttaweb-0.7.0/src/wuttaweb/views/common.py +223 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/essential.py +7 -0
- wuttaweb-0.7.0/src/wuttaweb/views/master.py +1760 -0
- wuttaweb-0.7.0/src/wuttaweb/views/people.py +138 -0
- wuttaweb-0.7.0/src/wuttaweb/views/roles.py +271 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/settings.py +54 -14
- wuttaweb-0.7.0/src/wuttaweb/views/users.py +201 -0
- wuttaweb-0.7.0/tests/forms/test_base.py +545 -0
- wuttaweb-0.7.0/tests/forms/test_schema.py +254 -0
- wuttaweb-0.7.0/tests/forms/test_widgets.py +115 -0
- wuttaweb-0.7.0/tests/grids/test_base.py +234 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_auth.py +24 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_menus.py +24 -9
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_subscribers.py +133 -2
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_util.py +90 -0
- wuttaweb-0.5.0/tests/views/utils.py → wuttaweb-0.7.0/tests/util.py +47 -14
- wuttaweb-0.7.0/tests/views/__init__.py +0 -0
- wuttaweb-0.7.0/tests/views/test___init__.py +10 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/views/test_auth.py +45 -52
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/views/test_base.py +5 -0
- wuttaweb-0.7.0/tests/views/test_common.py +95 -0
- wuttaweb-0.7.0/tests/views/test_master.py +979 -0
- wuttaweb-0.7.0/tests/views/test_people.py +73 -0
- wuttaweb-0.7.0/tests/views/test_roles.py +242 -0
- wuttaweb-0.7.0/tests/views/test_settings.py +60 -0
- wuttaweb-0.7.0/tests/views/test_users.py +188 -0
- wuttaweb-0.5.0/src/wuttaweb/forms/base.py +0 -477
- wuttaweb-0.5.0/src/wuttaweb/static/img/favicon.ico +0 -0
- wuttaweb-0.5.0/src/wuttaweb/static/img/logo.png +0 -0
- wuttaweb-0.5.0/src/wuttaweb/templates/forms/vue_template.mako +0 -59
- wuttaweb-0.5.0/src/wuttaweb/templates/master/index.mako +0 -13
- wuttaweb-0.5.0/src/wuttaweb/views/common.py +0 -74
- wuttaweb-0.5.0/src/wuttaweb/views/master.py +0 -802
- wuttaweb-0.5.0/tests/forms/test_base.py +0 -273
- wuttaweb-0.5.0/tests/utils.py +0 -11
- wuttaweb-0.5.0/tests/views/test___init__.py +0 -14
- wuttaweb-0.5.0/tests/views/test_common.py +0 -27
- wuttaweb-0.5.0/tests/views/test_master.py +0 -370
- wuttaweb-0.5.0/tests/views/test_settings.py +0 -23
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/.gitignore +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/COPYING.txt +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/README.md +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/Makefile +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/_static/.keepme +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/index.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/app.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/auth.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/db.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/forms.base.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/forms.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/handler.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/helpers.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/menus.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/static.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/subscribers.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/util.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.auth.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.base.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.common.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.essential.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.master.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/api/wuttaweb/views.settings.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/conf.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/glossary.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/index.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/make.bat +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/docs/narr/index.rst +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/__init__.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/_version.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/db.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/handler.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/helpers.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/static/__init__.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/static/img/testing.png +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/auth/change_password.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/auth/login.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/base_meta.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/configure.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/home.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/master/configure.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/templates/page.mako +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/src/wuttaweb/views/__init__.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tasks.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/__init__.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/forms/__init__.py +0 -0
- {wuttaweb-0.5.0/tests/views → wuttaweb-0.7.0/tests/grids}/__init__.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_oruga.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_oruga_bulma.css +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_oruga_bulma.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_vue.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/bb_vue_fontawesome.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/buefy.css +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/buefy.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/fontawesome.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/vue.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/libcache/vue_resource.js +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_app.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_handler.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_helpers.py +0 -0
- {wuttaweb-0.5.0 → wuttaweb-0.7.0}/tests/test_static.py +0 -0
- {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.
|
|
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.
|
|
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'
|
|
@@ -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
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "WuttaWeb"
|
|
9
|
-
version = "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.
|
|
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)
|