WuttaWeb 0.21.1__tar.gz → 0.21.3__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.21.1 → wuttaweb-0.21.3}/CHANGELOG.md +14 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/PKG-INFO +1 -1
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/conf.py +3 -3
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/pyproject.toml +1 -1
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/grids/base.py +49 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/form.mako +5 -1
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/grids/table_element.mako +17 -12
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/grids/vue_template.mako +15 -13
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/grids/test_base.py +20 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/.gitignore +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/COPYING.txt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/README.md +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/Makefile +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/_static/.keepme +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.app.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.auth.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.cli.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.cli.webapp.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.conf.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.db.continuum.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.db.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.db.sess.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.emails.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.base.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.schema.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.forms.widgets.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.grids.base.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.grids.filters.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.grids.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.handler.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.helpers.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.menus.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.progress.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.static.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.subscribers.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.util.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.auth.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.base.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.batch.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.common.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.email.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.essential.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.master.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.people.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.progress.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.reports.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.roles.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.settings.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.upgrades.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/api/wuttaweb.views.users.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/glossary.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/index.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/make.bat +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/cli/builtin.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/cli/index.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/base.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/index.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/lookup.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/docs/narr/templates/overview.rst +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/_version.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/app.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/auth.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/cli/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/cli/webapp.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/conf.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/db/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/db/continuum.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/db/sess.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/email-templates/feedback.html.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/email-templates/feedback.txt.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/emails.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/base.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/schema.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/forms/widgets.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/grids/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/grids/filters.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/handler.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/helpers.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/menus.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/progress.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/img/favicon.ico +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/img/logo.png +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/static/img/testing.png +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/subscribers.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/appinfo/index.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/auth/change_password.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/auth/login.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/base.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/base_meta.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/batch/view.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/configure.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/checkbox.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/checkbox_choice.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/checked_password.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/dateinput.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/datetimeinput.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/moneyinput.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/password.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/permissions.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/checkbox.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/email_recips.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/filedownload.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/notes.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/objectref.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/permissions.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/readonly/rolerefs.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/select.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/textarea.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/deform/textinput.pt +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/email/settings/view.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/forbidden.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/forms/vue_template.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/home.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/configure.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/create.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/delete.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/edit.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/form.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/index.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/master/view.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/notfound.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/page.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/people/view_profile.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/progress.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/reports/view.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/setup.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/upgrade.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/upgrades/configure.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/upgrades/view.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/templates/wutta-components.mako +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/testing.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/util.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/auth.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/base.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/batch.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/common.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/email.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/essential.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/master.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/people.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/progress.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/reports.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/roles.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/settings.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/upgrades.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/src/wuttaweb/views/users.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tasks.py +0 -0
- {wuttaweb-0.21.1/tests/views → wuttaweb-0.21.3/tests}/__init__.py +0 -0
- {wuttaweb-0.21.1/tests/grids → wuttaweb-0.21.3/tests/cli}/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/cli/test_webapp.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/db/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/db/test_continuum.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/forms/test_base.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/forms/test_schema.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/forms/test_widgets.py +0 -0
- {wuttaweb-0.21.1/tests/cli → wuttaweb-0.21.3/tests/grids}/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/grids/test_filters.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_oruga.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_oruga_bulma.css +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_oruga_bulma.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_vue.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/bb_vue_fontawesome.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/buefy.css +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/buefy.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/fontawesome.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/vue.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/libcache/vue_resource.js +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_app.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_auth.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_emails.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_handler.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_helpers.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_menus.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_progress.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_static.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_subscribers.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/test_util.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/util.py +0 -0
- {wuttaweb-0.21.1/tests → wuttaweb-0.21.3/tests/views}/__init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test___init__.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_auth.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_base.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_batch.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_common.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_email.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_essential.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_master.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_people.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_progress.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_reports.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_roles.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_settings.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_upgrades.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tests/views/test_users.py +0 -0
- {wuttaweb-0.21.1 → wuttaweb-0.21.3}/tox.ini +0 -0
|
@@ -5,6 +5,20 @@ 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.21.3 (2025-02-19)
|
|
9
|
+
|
|
10
|
+
### Fix
|
|
11
|
+
|
|
12
|
+
- add click handler support in simple grid table element
|
|
13
|
+
- hide columns when applicable, for simple grid table element
|
|
14
|
+
- add `render_form_tag()` customization hook in /form template
|
|
15
|
+
|
|
16
|
+
## v0.21.2 (2025-02-18)
|
|
17
|
+
|
|
18
|
+
### Fix
|
|
19
|
+
|
|
20
|
+
- add hidden flag for grid columns
|
|
21
|
+
|
|
8
22
|
## v0.21.1 (2025-02-17)
|
|
9
23
|
|
|
10
24
|
### Fix
|
|
@@ -33,11 +33,11 @@ intersphinx_mapping = {
|
|
|
33
33
|
'fanstatic': ('https://www.fanstatic.org/en/latest/', None),
|
|
34
34
|
'pyramid': ('https://docs.pylonsproject.org/projects/pyramid/en/latest/', None),
|
|
35
35
|
'python': ('https://docs.python.org/3/', None),
|
|
36
|
-
'rattail-manual': ('https://
|
|
36
|
+
'rattail-manual': ('https://docs.wuttaproject.org/rattail-manual/', None),
|
|
37
37
|
'sqlalchemy': ('http://docs.sqlalchemy.org/en/latest/', None),
|
|
38
38
|
'webhelpers2': ('https://webhelpers2.readthedocs.io/en/latest/', None),
|
|
39
|
-
'wuttjamaican': ('https://
|
|
40
|
-
'wutta-continuum': ('https://
|
|
39
|
+
'wuttjamaican': ('https://docs.wuttaproject.org/wuttjamaican/', None),
|
|
40
|
+
'wutta-continuum': ('https://docs.wuttaproject.org/wutta-continuum/', None),
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
|
|
@@ -156,6 +156,15 @@ class Grid:
|
|
|
156
156
|
|
|
157
157
|
See also :meth:`set_link()` and :meth:`is_linked()`.
|
|
158
158
|
|
|
159
|
+
.. attribute:: hidden_columns
|
|
160
|
+
|
|
161
|
+
List of column names which should be hidden from view.
|
|
162
|
+
|
|
163
|
+
Hidden columns are sometimes useful to pass "extra" data into
|
|
164
|
+
the grid, for use by other component logic etc.
|
|
165
|
+
|
|
166
|
+
See also :meth:`set_hidden()` and :meth:`is_hidden()`.
|
|
167
|
+
|
|
159
168
|
.. attribute:: sortable
|
|
160
169
|
|
|
161
170
|
Boolean indicating whether *any* column sorting is allowed for
|
|
@@ -372,6 +381,7 @@ class Grid:
|
|
|
372
381
|
row_class=None,
|
|
373
382
|
actions=[],
|
|
374
383
|
linked_columns=[],
|
|
384
|
+
hidden_columns=[],
|
|
375
385
|
sortable=False,
|
|
376
386
|
sort_multiple=True,
|
|
377
387
|
sort_on_backend=True,
|
|
@@ -399,6 +409,7 @@ class Grid:
|
|
|
399
409
|
self.row_class = row_class
|
|
400
410
|
self.actions = actions or []
|
|
401
411
|
self.linked_columns = linked_columns or []
|
|
412
|
+
self.hidden_columns = hidden_columns or []
|
|
402
413
|
self.joiners = joiners or {}
|
|
403
414
|
|
|
404
415
|
self.config = self.request.wutta_config
|
|
@@ -535,6 +546,43 @@ class Grid:
|
|
|
535
546
|
if key in self.columns:
|
|
536
547
|
self.columns.remove(key)
|
|
537
548
|
|
|
549
|
+
def set_hidden(self, key, hidden=True):
|
|
550
|
+
"""
|
|
551
|
+
Set/override the hidden flag for a column.
|
|
552
|
+
|
|
553
|
+
Hidden columns are sometimes useful to pass "extra" data into
|
|
554
|
+
the grid, for use by other component logic etc.
|
|
555
|
+
|
|
556
|
+
See also :meth:`is_hidden()`; the list is tracked via
|
|
557
|
+
:attr:`hidden_columns`.
|
|
558
|
+
|
|
559
|
+
:param key: Column key as string.
|
|
560
|
+
|
|
561
|
+
:param hidden: Flag indicating whether column should be hidden
|
|
562
|
+
(vs. shown).
|
|
563
|
+
"""
|
|
564
|
+
if hidden:
|
|
565
|
+
if key not in self.hidden_columns:
|
|
566
|
+
self.hidden_columns.append(key)
|
|
567
|
+
else: # un-hide
|
|
568
|
+
if self.hidden_columns and key in self.hidden_columns:
|
|
569
|
+
self.hidden_columns.remove(key)
|
|
570
|
+
|
|
571
|
+
def is_hidden(self, key):
|
|
572
|
+
"""
|
|
573
|
+
Returns boolean indicating if the column is hidden from view.
|
|
574
|
+
|
|
575
|
+
See also :meth:`set_hidden()` and :attr:`hidden_columns`.
|
|
576
|
+
|
|
577
|
+
:param key: Column key as string.
|
|
578
|
+
|
|
579
|
+
:rtype: bool
|
|
580
|
+
"""
|
|
581
|
+
if self.hidden_columns:
|
|
582
|
+
if key in self.hidden_columns:
|
|
583
|
+
return True
|
|
584
|
+
return False
|
|
585
|
+
|
|
538
586
|
def set_label(self, key, label, column_only=False):
|
|
539
587
|
"""
|
|
540
588
|
Set/override the label for a column.
|
|
@@ -2090,6 +2138,7 @@ class Grid:
|
|
|
2090
2138
|
columns.append({
|
|
2091
2139
|
'field': name,
|
|
2092
2140
|
'label': self.get_label(name),
|
|
2141
|
+
'hidden': self.is_hidden(name),
|
|
2093
2142
|
'sortable': self.is_sortable(name),
|
|
2094
2143
|
'searchable': self.is_searchable(name),
|
|
2095
2144
|
})
|
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
<%def name="page_content()">
|
|
18
18
|
% if form is not Undefined:
|
|
19
19
|
<div class="wutta-form-wrapper">
|
|
20
|
-
${
|
|
20
|
+
${self.render_form_tag()}
|
|
21
21
|
</div>
|
|
22
22
|
% endif
|
|
23
23
|
</%def>
|
|
24
24
|
|
|
25
|
+
<%def name="render_form_tag()">
|
|
26
|
+
${form.render_vue_tag()}
|
|
27
|
+
</%def>
|
|
28
|
+
|
|
25
29
|
<%def name="tool_panels_wrapper()">
|
|
26
30
|
<div class="tool-panels-wrapper">
|
|
27
31
|
${self.tool_panels()}
|
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
<${b}-table :data="gridContext['${grid.key}'].data">
|
|
3
3
|
|
|
4
4
|
% for column in grid.get_vue_columns():
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
5
|
+
% if not column['hidden']:
|
|
6
|
+
<${b}-table-column field="${column['field']}"
|
|
7
|
+
label="${column['label']}"
|
|
8
|
+
v-slot="props"
|
|
9
|
+
:sortable="${json.dumps(column.get('sortable', False))|n}"
|
|
10
|
+
cell-class="c_${column['field']}">
|
|
11
|
+
% if grid.is_linked(column['field']):
|
|
12
|
+
<a :href="props.row._action_url_view"
|
|
13
|
+
v-html="props.row.${column['field']}" />
|
|
14
|
+
% else:
|
|
15
|
+
<span v-html="props.row.${column['field']}"></span>
|
|
16
|
+
% endif
|
|
17
|
+
</${b}-table-column>
|
|
18
|
+
% endif
|
|
17
19
|
% endfor
|
|
18
20
|
|
|
19
21
|
% if grid.actions:
|
|
@@ -23,6 +25,9 @@
|
|
|
23
25
|
% for action in grid.actions:
|
|
24
26
|
<a v-if="props.row._action_url_${action.key}"
|
|
25
27
|
:href="props.row._action_url_${action.key}"
|
|
28
|
+
% if action.click_handler:
|
|
29
|
+
@click.prevent="${action.click_handler}"
|
|
30
|
+
% endif
|
|
26
31
|
class="${action.link_class}">
|
|
27
32
|
${action.render_icon_and_label()}
|
|
28
33
|
</a>
|
|
@@ -165,19 +165,21 @@
|
|
|
165
165
|
>
|
|
166
166
|
|
|
167
167
|
% for column in grid.get_vue_columns():
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
168
|
+
% if not column['hidden']:
|
|
169
|
+
<${b}-table-column field="${column['field']}"
|
|
170
|
+
label="${column['label']}"
|
|
171
|
+
v-slot="props"
|
|
172
|
+
:sortable="${json.dumps(column.get('sortable', False))|n}"
|
|
173
|
+
:searchable="${json.dumps(column.get('searchable', False))|n}"
|
|
174
|
+
cell-class="c_${column['field']}">
|
|
175
|
+
% if grid.is_linked(column['field']):
|
|
176
|
+
<a :href="props.row._action_url_view"
|
|
177
|
+
v-html="props.row.${column['field']}" />
|
|
178
|
+
% else:
|
|
179
|
+
<span v-html="props.row.${column['field']}"></span>
|
|
180
|
+
% endif
|
|
181
|
+
</${b}-table-column>
|
|
182
|
+
% endif
|
|
181
183
|
% endfor
|
|
182
184
|
|
|
183
185
|
% if grid.actions:
|
|
@@ -281,6 +281,26 @@ class TestGrid(WebTestCase):
|
|
|
281
281
|
self.assertFalse(grid.is_linked('foo'))
|
|
282
282
|
self.assertTrue(grid.is_linked('bar'))
|
|
283
283
|
|
|
284
|
+
def test_hidden_columns(self):
|
|
285
|
+
grid = self.make_grid(columns=['foo', 'bar'])
|
|
286
|
+
self.assertEqual(grid.hidden_columns, [])
|
|
287
|
+
self.assertFalse(grid.is_hidden('foo'))
|
|
288
|
+
|
|
289
|
+
grid.set_hidden('foo')
|
|
290
|
+
self.assertEqual(grid.hidden_columns, ['foo'])
|
|
291
|
+
self.assertTrue(grid.is_hidden('foo'))
|
|
292
|
+
self.assertFalse(grid.is_hidden('bar'))
|
|
293
|
+
|
|
294
|
+
grid.set_hidden('bar')
|
|
295
|
+
self.assertEqual(grid.hidden_columns, ['foo', 'bar'])
|
|
296
|
+
self.assertTrue(grid.is_hidden('foo'))
|
|
297
|
+
self.assertTrue(grid.is_hidden('bar'))
|
|
298
|
+
|
|
299
|
+
grid.set_hidden('foo', False)
|
|
300
|
+
self.assertEqual(grid.hidden_columns, ['bar'])
|
|
301
|
+
self.assertFalse(grid.is_hidden('foo'))
|
|
302
|
+
self.assertTrue(grid.is_hidden('bar'))
|
|
303
|
+
|
|
284
304
|
def test_searchable_columns(self):
|
|
285
305
|
grid = self.make_grid(columns=['foo', 'bar'])
|
|
286
306
|
self.assertEqual(grid.searchable_columns, set())
|
|
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
|
|
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
|