WuttaWeb 0.10.0__tar.gz → 0.10.1__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.10.0 → wuttaweb-0.10.1}/CHANGELOG.md +6 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/PKG-INFO +1 -1
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/pyproject.toml +1 -1
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/auth.py +9 -9
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/forms/base.py +9 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/grids/base.py +23 -18
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/util.py +7 -8
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/master.py +1 -1
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/people.py +1 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/roles.py +1 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/.gitignore +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/COPYING.txt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/README.md +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/Makefile +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/_static/.keepme +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/index.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/app.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/auth.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/db.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/forms.base.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/forms.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/forms.schema.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/forms.widgets.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/grids.base.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/grids.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/handler.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/helpers.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/index.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/menus.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/static.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/subscribers.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/util.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.auth.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.base.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.common.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.essential.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.master.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.people.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.roles.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.settings.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/api/wuttaweb/views.users.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/conf.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/glossary.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/index.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/make.bat +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/docs/narr/index.rst +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/_version.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/app.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/db.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/forms/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/forms/schema.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/forms/widgets.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/grids/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/handler.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/helpers.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/menus.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/static/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/static/img/favicon.ico +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/static/img/logo.png +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/static/img/testing.png +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/subscribers.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/appinfo/index.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/auth/change_password.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/auth/login.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/base.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/base_meta.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/configure.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/checkbox.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/checkbox_choice.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/checked_password.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/password.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/permissions.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/readonly/notes.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/readonly/objectref.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/readonly/permissions.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/select.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/textarea.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/deform/textinput.pt +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/forbidden.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/form.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/forms/vue_template.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/grids/vue_template.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/home.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/configure.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/create.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/delete.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/edit.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/form.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/index.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/master/view.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/notfound.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/page.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/people/view_profile.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/setup.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/templates/wutta-components.mako +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/auth.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/base.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/common.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/essential.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/settings.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/src/wuttaweb/views/users.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tasks.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/forms/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/forms/test_base.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/forms/test_schema.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/forms/test_widgets.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/grids/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/grids/test_base.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_oruga.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_oruga_bulma.css +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_oruga_bulma.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_vue.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/bb_vue_fontawesome.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/buefy.css +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/buefy.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/fontawesome.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/vue.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/libcache/vue_resource.js +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_app.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_auth.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_handler.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_helpers.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_menus.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_static.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_subscribers.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/test_util.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/util.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/__init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test___init__.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_auth.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_base.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_common.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_master.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_people.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_roles.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_settings.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tests/views/test_users.py +0 -0
- {wuttaweb-0.10.0 → wuttaweb-0.10.1}/tox.ini +0 -0
|
@@ -5,6 +5,12 @@ 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.10.1 (2024-08-19)
|
|
9
|
+
|
|
10
|
+
### Fix
|
|
11
|
+
|
|
12
|
+
- make `util.get_model_fields()` work with more model classes
|
|
13
|
+
|
|
8
14
|
## v0.10.0 (2024-08-18)
|
|
9
15
|
|
|
10
16
|
### Feat
|
|
@@ -150,7 +150,7 @@ class WuttaSecurityPolicy:
|
|
|
150
150
|
return auth.has_permission(self.db_session, user, permission)
|
|
151
151
|
|
|
152
152
|
|
|
153
|
-
def add_permission_group(pyramid_config,
|
|
153
|
+
def add_permission_group(pyramid_config, groupkey, label=None, overwrite=True):
|
|
154
154
|
"""
|
|
155
155
|
Pyramid directive to add a "permission group" to the app's
|
|
156
156
|
awareness.
|
|
@@ -169,12 +169,12 @@ def add_permission_group(pyramid_config, key, label=None, overwrite=True):
|
|
|
169
169
|
|
|
170
170
|
pyramid_config.add_permission_group('widgets', label="Widgets")
|
|
171
171
|
|
|
172
|
-
:param
|
|
173
|
-
of a master view, this will be the same as
|
|
172
|
+
:param groupkey: Unique key for the permission group. In the
|
|
173
|
+
context of a master view, this will be the same as
|
|
174
174
|
:attr:`~wuttaweb.views.master.MasterView.permission_prefix`.
|
|
175
175
|
|
|
176
176
|
:param label: Optional label for the permission group. If not
|
|
177
|
-
specified, it is derived from ``
|
|
177
|
+
specified, it is derived from ``groupkey``.
|
|
178
178
|
|
|
179
179
|
:param overwrite: If the permission group was already established,
|
|
180
180
|
this flag controls whether the group's label should be
|
|
@@ -186,9 +186,9 @@ def add_permission_group(pyramid_config, key, label=None, overwrite=True):
|
|
|
186
186
|
app = config.get_app()
|
|
187
187
|
def action():
|
|
188
188
|
perms = pyramid_config.get_settings().get('wutta_permissions', {})
|
|
189
|
-
if overwrite or
|
|
190
|
-
group = perms.setdefault(
|
|
191
|
-
group['label'] = label or app.make_title(
|
|
189
|
+
if overwrite or groupkey not in perms:
|
|
190
|
+
group = perms.setdefault(groupkey, {'key': groupkey})
|
|
191
|
+
group['label'] = label or app.make_title(groupkey)
|
|
192
192
|
pyramid_config.add_settings({'wutta_permissions': perms})
|
|
193
193
|
pyramid_config.action(None, action)
|
|
194
194
|
|
|
@@ -215,8 +215,8 @@ def add_permission(pyramid_config, groupkey, key, label=None):
|
|
|
215
215
|
pyramid_config.add_permission('widgets', 'widgets.polish',
|
|
216
216
|
label="Polish all the widgets")
|
|
217
217
|
|
|
218
|
-
:param
|
|
219
|
-
of a master view, this will be the same as
|
|
218
|
+
:param groupkey: Unique key for the permission group. In the
|
|
219
|
+
context of a master view, this will be the same as
|
|
220
220
|
:attr:`~wuttaweb.views.master.MasterView.permission_prefix`.
|
|
221
221
|
|
|
222
222
|
:param key: Unique key for the permission. This should be the
|
|
@@ -182,6 +182,8 @@ class Form:
|
|
|
182
182
|
String name for Vue component tag. By default this is
|
|
183
183
|
``'wutta-form'``. See also :meth:`render_vue_tag()`.
|
|
184
184
|
|
|
185
|
+
See also :attr:`vue_component`.
|
|
186
|
+
|
|
185
187
|
.. attribute:: align_buttons_right
|
|
186
188
|
|
|
187
189
|
Flag indicating whether the buttons (submit, cancel etc.)
|
|
@@ -784,6 +786,13 @@ class Form:
|
|
|
784
786
|
</form>
|
|
785
787
|
</script>
|
|
786
788
|
|
|
789
|
+
<script>
|
|
790
|
+
WuttaFormData = {}
|
|
791
|
+
WuttaForm = {
|
|
792
|
+
template: 'wutta-form-template',
|
|
793
|
+
}
|
|
794
|
+
</script>
|
|
795
|
+
|
|
787
796
|
.. todo::
|
|
788
797
|
|
|
789
798
|
Why can't Sphinx render the above code block as 'html' ?
|
|
@@ -86,9 +86,9 @@ class Grid:
|
|
|
86
86
|
|
|
87
87
|
.. attribute:: columns
|
|
88
88
|
|
|
89
|
-
:class:`~wuttaweb.
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
:class:`~wuttaweb.util.FieldList` instance containing string
|
|
90
|
+
column names for the grid. Columns will appear in the same
|
|
91
|
+
order as they are in this list.
|
|
92
92
|
|
|
93
93
|
See also :meth:`set_columns()` and :meth:`get_columns()`.
|
|
94
94
|
|
|
@@ -239,9 +239,9 @@ class Grid:
|
|
|
239
239
|
|
|
240
240
|
.. attribute:: paginated
|
|
241
241
|
|
|
242
|
-
Boolean indicating whether the grid data should be paginated
|
|
243
|
-
|
|
244
|
-
|
|
242
|
+
Boolean indicating whether the grid data should be paginated,
|
|
243
|
+
i.e. split up into pages. Default is ``False`` which means all
|
|
244
|
+
data is shown at once.
|
|
245
245
|
|
|
246
246
|
See also :attr:`pagesize` and :attr:`page`, and
|
|
247
247
|
:attr:`paginate_on_backend`.
|
|
@@ -392,7 +392,7 @@ class Grid:
|
|
|
392
392
|
Explicitly set the list of grid columns.
|
|
393
393
|
|
|
394
394
|
This will overwrite :attr:`columns` with a new
|
|
395
|
-
:class:`~wuttaweb.
|
|
395
|
+
:class:`~wuttaweb.util.FieldList` instance.
|
|
396
396
|
|
|
397
397
|
:param columns: List of string column names.
|
|
398
398
|
"""
|
|
@@ -440,9 +440,8 @@ class Grid:
|
|
|
440
440
|
|
|
441
441
|
:param label: New label for the column header.
|
|
442
442
|
|
|
443
|
-
See also :meth:`get_label()`.
|
|
444
|
-
|
|
445
|
-
Label overrides are tracked via :attr:`labels`.
|
|
443
|
+
See also :meth:`get_label()`. Label overrides are tracked via
|
|
444
|
+
:attr:`labels`.
|
|
446
445
|
"""
|
|
447
446
|
self.labels[key] = label
|
|
448
447
|
|
|
@@ -490,7 +489,7 @@ class Grid:
|
|
|
490
489
|
def render_foo(record, key, value):
|
|
491
490
|
return HTML.literal("<p>this is the final cell value</p>")
|
|
492
491
|
|
|
493
|
-
grid = Grid(columns=['foo', 'bar'])
|
|
492
|
+
grid = Grid(request, columns=['foo', 'bar'])
|
|
494
493
|
grid.set_renderer('foo', render_foo)
|
|
495
494
|
|
|
496
495
|
Renderer overrides are tracked via :attr:`renderers`.
|
|
@@ -509,8 +508,8 @@ class Grid:
|
|
|
509
508
|
URL for this will be the same as for the "View"
|
|
510
509
|
:class:`GridAction`
|
|
511
510
|
(aka. :meth:`~wuttaweb.views.master.MasterView.view()`).
|
|
512
|
-
Although of course each cell gets a different
|
|
513
|
-
on which data record it points to.
|
|
511
|
+
Although of course each cell in the column gets a different
|
|
512
|
+
link depending on which data record it points to.
|
|
514
513
|
|
|
515
514
|
It is typical to enable auto-link for fields relating to ID,
|
|
516
515
|
description etc. or some may prefer to auto-link all columns.
|
|
@@ -609,8 +608,8 @@ class Grid:
|
|
|
609
608
|
The term "model property" is a bit technical, an example
|
|
610
609
|
should help to clarify::
|
|
611
610
|
|
|
612
|
-
model =
|
|
613
|
-
grid = Grid(
|
|
611
|
+
model = app.model
|
|
612
|
+
grid = Grid(request, model_class=model.Person)
|
|
614
613
|
|
|
615
614
|
# explicit property
|
|
616
615
|
sorter = grid.make_sorter(model.Person.full_name)
|
|
@@ -633,7 +632,7 @@ class Grid:
|
|
|
633
632
|
]
|
|
634
633
|
|
|
635
634
|
# nb. no model_class, just as an example
|
|
636
|
-
grid = Grid(
|
|
635
|
+
grid = Grid(request, columns=['foo', 'bar'], data=data)
|
|
637
636
|
|
|
638
637
|
def getkey(obj):
|
|
639
638
|
if obj.get('foo')
|
|
@@ -725,8 +724,8 @@ class Grid:
|
|
|
725
724
|
A backend sorter callable must accept ``(data, direction)``
|
|
726
725
|
args and return the sorted data/query, for example::
|
|
727
726
|
|
|
728
|
-
model =
|
|
729
|
-
grid = Grid(
|
|
727
|
+
model = app.model
|
|
728
|
+
grid = Grid(request, model_class=model.Person)
|
|
730
729
|
|
|
731
730
|
def sort_full_name(query, direction):
|
|
732
731
|
sortspec = getattr(model.Person.full_name, direction)
|
|
@@ -750,6 +749,10 @@ class Grid:
|
|
|
750
749
|
"""
|
|
751
750
|
Remove the backend sorter for a column.
|
|
752
751
|
|
|
752
|
+
Note that this removes the sorter *function*, so there is
|
|
753
|
+
no way to sort by this column unless another sorter is
|
|
754
|
+
later defined for it.
|
|
755
|
+
|
|
753
756
|
See also :meth:`set_sorter()`.
|
|
754
757
|
"""
|
|
755
758
|
self.sorters.pop(key, None)
|
|
@@ -1140,6 +1143,7 @@ class Grid:
|
|
|
1140
1143
|
|
|
1141
1144
|
See also these methods which may be called by this one:
|
|
1142
1145
|
|
|
1146
|
+
* :meth:`sort_data()`
|
|
1143
1147
|
* :meth:`paginate_data()`
|
|
1144
1148
|
"""
|
|
1145
1149
|
data = self.data or []
|
|
@@ -1283,6 +1287,7 @@ class Grid:
|
|
|
1283
1287
|
{
|
|
1284
1288
|
'field': 'foo',
|
|
1285
1289
|
'label': "Foo",
|
|
1290
|
+
'sortable': True,
|
|
1286
1291
|
}
|
|
1287
1292
|
|
|
1288
1293
|
See also :meth:`get_vue_data()`.
|
|
@@ -462,14 +462,13 @@ def get_model_fields(config, model_class=None):
|
|
|
462
462
|
if not model_class:
|
|
463
463
|
return
|
|
464
464
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
return fields
|
|
465
|
+
try:
|
|
466
|
+
mapper = sa.inspect(model_class)
|
|
467
|
+
except sa.exc.NoInspectionAvailable:
|
|
468
|
+
pass
|
|
469
|
+
else:
|
|
470
|
+
fields = [prop.key for prop in mapper.iterate_properties]
|
|
471
|
+
return fields
|
|
473
472
|
|
|
474
473
|
|
|
475
474
|
def make_json_safe(value, key=None, warn=True):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|