WuttaWeb 0.27.1__tar.gz → 0.27.2__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.27.1 → wuttaweb-0.27.2}/CHANGELOG.md +12 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/PKG-INFO +2 -2
- wuttaweb-0.27.2/README.md +6 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/index.rst +1 -1
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/pyproject.toml +1 -1
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/grids/base.py +10 -3
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/subscribers.py +2 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/grids/table_element.mako +2 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/view.mako +11 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/view_version.mako +11 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/auth.py +12 -4
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/common.py +3 -1
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/people.py +1 -1
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/grids/test_base.py +16 -1
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_people.py +5 -4
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tox.ini +1 -1
- wuttaweb-0.27.1/README.md +0 -6
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/.gitignore +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/.hgignore +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/.pylintrc +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/COPYING.txt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/Makefile +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/_static/.keepme +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.app.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.auth.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.cli.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.cli.webapp.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.conf.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.db.continuum.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.db.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.db.sess.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.diffs.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.emails.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.base.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.schema.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.forms.widgets.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.grids.base.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.grids.filters.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.grids.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.handler.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.helpers.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.menus.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.progress.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.static.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.subscribers.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.util.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.alembic.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.auth.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.base.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.batch.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.common.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.email.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.essential.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.master.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.people.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.progress.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.reports.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.roles.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.settings.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.tables.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.upgrades.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.users.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/api/wuttaweb.views.views.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/conf.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/glossary.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/make.bat +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/cli/builtin.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/cli/index.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/base.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/index.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/lookup.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/docs/narr/templates/overview.rst +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/_version.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/app.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/auth.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/cli/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/cli/webapp.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/code-templates/new-master-view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/code-templates/new-table.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/conf.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/db/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/db/continuum.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/db/sess.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/diffs.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/email-templates/feedback.html.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/email-templates/feedback.txt.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/emails.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/base.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/schema.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/forms/widgets.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/grids/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/grids/filters.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/handler.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/helpers.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/menus.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/progress.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/img/favicon.ico +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/img/logo.png +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/static/img/testing.png +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/dashboard.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/configure.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/create.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/index.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/appinfo/configure.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/appinfo/index.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/auth/change_password.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/auth/login.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/base.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/base_meta.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/batch/view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/configure.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/checkbox.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/checkbox_choice.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/checked_password.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/dateinput.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/datetimeinput.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/moneyinput.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/password.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/permissions.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/checkbox.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/email_recips.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/filedownload.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/notes.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/objectref.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/permissions.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/readonly/rolerefs.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/select.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/textarea.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/textinput.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/deform/wutta_checked_password.pt +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/diff.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/email/settings/view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forbidden.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/form.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forms/vue_buttons.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forms/vue_fields.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/forms/vue_template.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/grids/vue_template.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/home.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/configure.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/create.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/create_row.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/delete.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/edit.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/form.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/index.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/master/view_versions.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/notfound.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/page.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/people/view_profile.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/progress.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/reports/view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/setup.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/tables/app/create.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/tables/app/index.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/base.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/buefy-components.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/buefy-plugin.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/themes/butterfly/http-plugin.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrade.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrades/configure.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrades/index.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/upgrades/view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/users/view.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/views/master/configure.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/views/master/create.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/views/master/index.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/wutta-components.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/testing.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/util.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/alembic.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/base.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/batch.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/email.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/essential.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/master.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/progress.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/reports.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/roles.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/settings.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/tables.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/upgrades.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/users.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/views/views.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tasks.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/cli/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/cli/test_webapp.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/db/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/db/test_continuum.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/main_template.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/main_template_with_fields.mako +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/test_base.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/test_schema.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/forms/test_widgets.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/grids/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/grids/test_filters.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_fontawesome_svg_core.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_free_solid_svg_icons.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_oruga.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_oruga_bulma.css +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_oruga_bulma.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_vue.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/bb_vue_fontawesome.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/buefy.css +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/buefy.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/fontawesome.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/vue.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/libcache/vue_resource.js +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_app.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_auth.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_conf.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_diffs.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_emails.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_handler.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_helpers.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_menus.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_progress.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_static.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_subscribers.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/test_util.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/util.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/__init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test___init__.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_alembic.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_auth.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_base.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_batch.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_common.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_email.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_essential.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_master.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_progress.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_reports.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_roles.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_settings.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_tables.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_upgrades.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_users.py +0 -0
- {wuttaweb-0.27.1 → wuttaweb-0.27.2}/tests/views/test_views.py +0 -0
|
@@ -5,6 +5,18 @@ 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.27.2 (2026-02-04)
|
|
9
|
+
|
|
10
|
+
### Fix
|
|
11
|
+
|
|
12
|
+
- fallback to dict logic for grid render date/time
|
|
13
|
+
- add dedicated `authenticate_user()` method for auth view
|
|
14
|
+
- increase default width for read-only form views
|
|
15
|
+
- add `hoverable` and `narrowed` for all `<b-table>` elements
|
|
16
|
+
- show users grid when deleting a Person
|
|
17
|
+
- add `model` and `enum` to global template rendering context
|
|
18
|
+
- ensure grid action icon+label do not wrap
|
|
19
|
+
|
|
8
20
|
## v0.27.1 (2026-01-03)
|
|
9
21
|
|
|
10
22
|
### Fix
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: WuttaWeb
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.2
|
|
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
|
|
@@ -61,4 +61,4 @@ Description-Content-Type: text/markdown
|
|
|
61
61
|
|
|
62
62
|
Web app for Wutta Framework
|
|
63
63
|
|
|
64
|
-
See docs at https://
|
|
64
|
+
See docs at https://docs.wuttaproject.org/wuttaweb/
|
|
@@ -9,7 +9,7 @@ It uses traditional server-side rendering with VueJS on the front-end.
|
|
|
9
9
|
Good documentation and 100% `test coverage`_ are priorities for this
|
|
10
10
|
project.
|
|
11
11
|
|
|
12
|
-
.. _test coverage: https://buildbot.
|
|
12
|
+
.. _test coverage: https://buildbot.wuttaproject.org/coverage/wuttaweb/
|
|
13
13
|
|
|
14
14
|
.. image:: https://img.shields.io/badge/linting-pylint-yellowgreen
|
|
15
15
|
:target: https://github.com/pylint-dev/pylint
|
|
@@ -2030,7 +2030,10 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|
|
2030
2030
|
|
|
2031
2031
|
grid.set_renderer('foo', 'date')
|
|
2032
2032
|
"""
|
|
2033
|
-
|
|
2033
|
+
try:
|
|
2034
|
+
dt = getattr(obj, key)
|
|
2035
|
+
except AttributeError:
|
|
2036
|
+
dt = obj[key]
|
|
2034
2037
|
return self.app.render_date(dt)
|
|
2035
2038
|
|
|
2036
2039
|
def render_datetime(self, obj, key, value): # pylint: disable=unused-argument
|
|
@@ -2046,7 +2049,10 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|
|
2046
2049
|
|
|
2047
2050
|
grid.set_renderer('foo', 'datetime')
|
|
2048
2051
|
"""
|
|
2049
|
-
|
|
2052
|
+
try:
|
|
2053
|
+
dt = getattr(obj, key)
|
|
2054
|
+
except AttributeError:
|
|
2055
|
+
dt = obj[key]
|
|
2050
2056
|
return self.app.render_datetime(dt, html=True)
|
|
2051
2057
|
|
|
2052
2058
|
def render_enum(self, obj, key, value, enum=None):
|
|
@@ -2604,9 +2610,10 @@ class GridAction: # pylint: disable=too-many-instance-attributes
|
|
|
2604
2610
|
"""
|
|
2605
2611
|
html = [
|
|
2606
2612
|
self.render_icon(),
|
|
2613
|
+
HTML.literal(" "),
|
|
2607
2614
|
self.render_label(),
|
|
2608
2615
|
]
|
|
2609
|
-
return HTML.
|
|
2616
|
+
return HTML.tag("span", c=html, style="white-space: nowrap;")
|
|
2610
2617
|
|
|
2611
2618
|
def render_icon(self):
|
|
2612
2619
|
"""
|
|
@@ -402,6 +402,8 @@ def before_render(event):
|
|
|
402
402
|
context = event
|
|
403
403
|
context["config"] = config
|
|
404
404
|
context["app"] = app
|
|
405
|
+
context["model"] = app.model
|
|
406
|
+
context["enum"] = app.enum
|
|
405
407
|
context["web"] = web
|
|
406
408
|
context["h"] = helpers
|
|
407
409
|
context["url"] = request.route_url
|
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
<%def name="content_title()">${instance_title}</%def>
|
|
7
7
|
|
|
8
|
+
<%def name="extra_styles()">
|
|
9
|
+
${parent.extra_styles()}
|
|
10
|
+
<style>
|
|
11
|
+
|
|
12
|
+
.wutta-form-wrapper {
|
|
13
|
+
width: 75%;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
</style>
|
|
17
|
+
</%def>
|
|
18
|
+
|
|
8
19
|
<%def name="render_instance_header_title_extras()">
|
|
9
20
|
${parent.render_instance_header_title_extras()}
|
|
10
21
|
% if master.should_expose_versions():
|
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
<%def name="content_title()">changes @ TXN ${transaction.id}</%def>
|
|
7
7
|
|
|
8
|
+
<%def name="extra_styles()">
|
|
9
|
+
${parent.extra_styles()}
|
|
10
|
+
<style>
|
|
11
|
+
|
|
12
|
+
.wutta-form-wrapper {
|
|
13
|
+
width: 75%;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
</style>
|
|
17
|
+
</%def>
|
|
18
|
+
|
|
8
19
|
<%def name="page_content()">
|
|
9
20
|
<div class="wutta-form-wrapper">
|
|
10
21
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
################################################################################
|
|
3
3
|
#
|
|
4
4
|
# wuttaweb -- Web App for Wutta Framework
|
|
5
|
-
# Copyright © 2024-
|
|
5
|
+
# Copyright © 2024-2026 Lance Edgar
|
|
6
6
|
#
|
|
7
7
|
# This file is part of Wutta Framework.
|
|
8
8
|
#
|
|
@@ -47,14 +47,15 @@ class AuthView(View):
|
|
|
47
47
|
* route: ``login``
|
|
48
48
|
* template: ``/auth/login.mako``
|
|
49
49
|
"""
|
|
50
|
+
# pylint: disable=duplicate-code
|
|
50
51
|
model = self.app.model
|
|
51
52
|
session = session or Session()
|
|
52
|
-
auth = self.app.get_auth_handler()
|
|
53
53
|
|
|
54
54
|
# nb. redirect to /setup if no users exist
|
|
55
55
|
user = session.query(model.User).first()
|
|
56
56
|
if not user:
|
|
57
57
|
return self.redirect(self.request.route_url("setup"))
|
|
58
|
+
# pylint: enable=duplicate-code
|
|
58
59
|
|
|
59
60
|
referrer = self.request.get_referrer()
|
|
60
61
|
|
|
@@ -79,8 +80,9 @@ class AuthView(View):
|
|
|
79
80
|
if data:
|
|
80
81
|
|
|
81
82
|
# truly validate user credentials
|
|
82
|
-
user
|
|
83
|
-
|
|
83
|
+
if user := self.authenticate_user(
|
|
84
|
+
session, data["username"], data["password"]
|
|
85
|
+
):
|
|
84
86
|
|
|
85
87
|
# okay now they're truly logged in
|
|
86
88
|
headers = login_user(self.request, user)
|
|
@@ -95,6 +97,12 @@ class AuthView(View):
|
|
|
95
97
|
# 'referrer': referrer,
|
|
96
98
|
}
|
|
97
99
|
|
|
100
|
+
def authenticate_user(
|
|
101
|
+
self, session, username, password
|
|
102
|
+
): # pylint: disable=missing-function-docstring
|
|
103
|
+
auth = self.app.get_auth_handler()
|
|
104
|
+
return auth.authenticate_user(session, username, password)
|
|
105
|
+
|
|
98
106
|
def login_make_schema(self): # pylint: disable=empty-docstring
|
|
99
107
|
""" """
|
|
100
108
|
schema = colander.Schema()
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
################################################################################
|
|
3
3
|
#
|
|
4
4
|
# wuttaweb -- Web App for Wutta Framework
|
|
5
|
-
# Copyright © 2024-
|
|
5
|
+
# Copyright © 2024-2026 Lance Edgar
|
|
6
6
|
#
|
|
7
7
|
# This file is part of Wutta Framework.
|
|
8
8
|
#
|
|
@@ -51,6 +51,7 @@ class CommonView(View):
|
|
|
51
51
|
This is normally the view shown when a user navigates to the
|
|
52
52
|
root URL for the web app.
|
|
53
53
|
"""
|
|
54
|
+
# pylint: disable=duplicate-code
|
|
54
55
|
model = self.app.model
|
|
55
56
|
session = session or Session()
|
|
56
57
|
|
|
@@ -58,6 +59,7 @@ class CommonView(View):
|
|
|
58
59
|
user = session.query(model.User).first()
|
|
59
60
|
if not user:
|
|
60
61
|
return self.redirect(self.request.route_url("setup"))
|
|
62
|
+
# pylint: enable=duplicate-code
|
|
61
63
|
|
|
62
64
|
# maybe auto-redirect anons to login
|
|
63
65
|
if not self.request.user:
|
|
@@ -98,7 +98,7 @@ class PersonView(MasterView): # pylint: disable=abstract-method
|
|
|
98
98
|
# users
|
|
99
99
|
if self.creating or self.editing:
|
|
100
100
|
f.remove("users")
|
|
101
|
-
|
|
101
|
+
else:
|
|
102
102
|
f.set_grid("users", self.make_users_grid(person))
|
|
103
103
|
|
|
104
104
|
def make_users_grid(self, person):
|
|
@@ -1682,6 +1682,12 @@ class TestGrid(WebTestCase):
|
|
|
1682
1682
|
result = grid.render_date(obj, "dt", str(dt))
|
|
1683
1683
|
self.assertEqual(result, "2025-01-13")
|
|
1684
1684
|
|
|
1685
|
+
# object as dict
|
|
1686
|
+
dt = datetime.date(2025, 1, 13)
|
|
1687
|
+
obj = {"dt": dt}
|
|
1688
|
+
result = grid.render_date(obj, "dt", str(dt))
|
|
1689
|
+
self.assertEqual(result, "2025-01-13")
|
|
1690
|
+
|
|
1685
1691
|
def test_render_datetime(self):
|
|
1686
1692
|
tzlocal = get_timezone_by_name("America/Los_Angeles")
|
|
1687
1693
|
with patch.object(self.app, "get_timezone", return_value=tzlocal):
|
|
@@ -1699,6 +1705,13 @@ class TestGrid(WebTestCase):
|
|
|
1699
1705
|
self.assertTrue(result.startswith('<span title="'))
|
|
1700
1706
|
self.assertIn("2024-12-12 05:44-0800", result)
|
|
1701
1707
|
|
|
1708
|
+
# object as dict
|
|
1709
|
+
dt = datetime.datetime(2024, 12, 12, 13, 44)
|
|
1710
|
+
obj = {"dt": dt}
|
|
1711
|
+
result = grid.render_datetime(obj, "dt", str(dt))
|
|
1712
|
+
self.assertTrue(result.startswith('<span title="'))
|
|
1713
|
+
self.assertIn("2024-12-12 05:44-0800", result)
|
|
1714
|
+
|
|
1702
1715
|
def test_render_vue_tag(self):
|
|
1703
1716
|
grid = self.make_grid(columns=["foo", "bar"])
|
|
1704
1717
|
html = grid.render_vue_tag()
|
|
@@ -2051,7 +2064,9 @@ class TestGridAction(TestCase):
|
|
|
2051
2064
|
action, render_icon=lambda: "ICON", render_label=lambda: "LABEL"
|
|
2052
2065
|
):
|
|
2053
2066
|
html = action.render_icon_and_label()
|
|
2054
|
-
self.
|
|
2067
|
+
self.assertTrue(html.startswith("<span "))
|
|
2068
|
+
self.assertIn("ICON", html)
|
|
2069
|
+
self.assertIn("LABEL", html)
|
|
2055
2070
|
|
|
2056
2071
|
def test_get_url(self):
|
|
2057
2072
|
obj = {"foo": "bar"}
|
|
@@ -87,10 +87,11 @@ class TestPersonView(WebTestCase):
|
|
|
87
87
|
view = self.make_view()
|
|
88
88
|
|
|
89
89
|
# creating
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
with patch.object(view, "creating", new=True):
|
|
91
|
+
form = view.make_model_form()
|
|
92
|
+
form.validated = {"first_name": "Barney", "last_name": "Rubble"}
|
|
93
|
+
person = view.objectify(form)
|
|
94
|
+
self.assertEqual(person.full_name, "Barney Rubble")
|
|
94
95
|
|
|
95
96
|
# editing
|
|
96
97
|
form = view.make_model_form(model_instance=person)
|
|
@@ -23,7 +23,7 @@ commands = pylint wuttaweb
|
|
|
23
23
|
basepython = python3.11
|
|
24
24
|
commands =
|
|
25
25
|
pytest -m 'not versioned and not functional' --cov=wuttaweb
|
|
26
|
-
pytest -m 'versioned' --cov-append --cov=wuttaweb
|
|
26
|
+
pytest -m 'versioned' --cov-append --cov=wuttaweb
|
|
27
27
|
pytest -m 'functional' --cov-append --cov=wuttaweb --cov-report=html --cov-fail-under=100
|
|
28
28
|
|
|
29
29
|
[testenv:docs]
|
wuttaweb-0.27.1/README.md
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wuttaweb-0.27.1 → wuttaweb-0.27.2}/src/wuttaweb/templates/alembic/migrations/configure.mako
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|