
# Changelog
All notable changes to wuttaweb will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## v0.29.3 (2026-03-15)

### Fix

- fix datetime handling for alembic migrations view
- keep original value along with rendered, in grid vue context
- render human-friendly datetime for such fields in version diff
- remove version pin for setuptools dependency
- make pylint happy

## v0.29.2 (2026-03-10)

### Fix

- add base class for `WuttaList` schema type
- skip custom rendering for missing grid columns
- serialize None to null, for ObjectRef schema type
- improve JSON-safe rendering for sets
- make empty <select> option work better for WuttaDictEnum

## v0.29.1 (2026-03-04)

### Fix

- use wutta hint for plural row model title in master view
- bump version requirement for wuttjamaican

## v0.29.0 (2026-03-04)

### Feat

- allow widget factory override for `ObjectRef` schema type
- add way to declare related versions for history in MasterView

### Fix

- expose default grid pagesize in appinfo config
- fix timezone edge case for `WuttaDateWidget`
- sort roles by name when viewing user
- make pylint happy

## v0.28.2 (2026-02-25)

### Fix

- only show string filter input if data type matches
- move `coerce_value()` method to base `GridFilter` class
- preserve original data type when un-setting filter choices
- raise better error if field widget serialization fails
- tweak how grid filter params are built, for better link share
- allow passing filter factory to `Grid.set_filter()`
- track column-only labels separately for grid
- make view responsible for App Info field/values

## v0.28.1 (2026-02-17)

### Fix

- restrict version for SQLAlchemy, pending a SQLAlchemy-Utils bug

## v0.28.0 (2026-02-17)

### Feat

- add support for association proxy fields in model forms

### Fix

- fix first_name, last_name handling for User form
- add support for rendering association proxy values in grid
- add "centered" flag for grid columns
- prevent delete also, for users with prevent edit flag
- render enabled flag as bool for Email Settings grid

## v0.27.6 (2026-02-13)

### Fix

- grant perms for Email Settings to first admin user

## v0.27.5 (2026-02-13)

### Fix

- use wutta hint from model if present, for rows title
- fix UUID column code generator for new app table wizard

## v0.27.4 (2026-02-08)

### Fix

- pin setuptools version, pending pyramid/pkg_resources refactor

## v0.27.3 (2026-02-07)

### Fix

- prefer new setting name for buefy_css liburl

## v0.27.2 (2026-02-04)

### Fix

- fallback to dict logic for grid render date/time
- add dedicated `authenticate_user()` method for auth view
- increase default width for read-only form views
- add `hoverable` and `narrowed` for all `<b-table>` elements
- show users grid when deleting a Person
- add `model` and `enum` to global template rendering context
- ensure grid action icon+label do not wrap

## v0.27.1 (2026-01-03)

### Fix

- add separate def for middle buttons on App Info page
- expose version history for site admin in default setup
- only show execution panel if batch view supports it
- remove the  Users field for create/edit Person
- only show "create row" button if batch view supports it
- show proper batch status text, from enum
- use wutta hint from model, for master view title
- accept dict instead of true enum, for `Grid.set_enum()`
- improve FK handling in generated model class code
- use custom UUID type when generating model class code for FK
- fix spacing style when viewing object with row grid
- grant access to alembic, tables, master view admin for new apps

## v0.27.0 (2025-12-31)

### Feat

- add wizard for generating new master view code
- add basic MasterView to show all registered master views
- add MasterView registry/discovery mechanism

### Fix

- show db backend (dialect name) on App Info page
- prevent whitespace wrap for tool panel header
- render datetimes with tooltip showing time delta from now
- fallback to default continuum plugin logic, when no request
- flush session when creating new object via MasterView
- fix page title for Alembic Dashboard

## v0.26.0 (2025-12-28)

### Feat

- add "wizard" for creating new table/model/revision
- add support for Create Alembic Migration
- add CopyableTextWidget and `<wutta-copyable-text>` component
- overhaul how form vue template is rendered
- add basic views for Alembic Migrations, Dashboard
- add basic Table views

### Fix

- let checkbox widget show static text instead of Yes/No
- rename form-saving methods etc. for consistency in MasterView
- temporarily avoid make_uuid()
- remove password filter option for Users grid
- use smarter default for `grid.sort_multiple` based on model class

## v0.25.1 (2025-12-20)

### Fix

- add `WebDiff` class now that `Diff` lives in wuttjamaican
- expose fallback key for email settings
- expose transaction comment for version history
- show display text for related objects, in version diff
- discard non-declared field values for grid vue data
- prevent error in DateTime schema type if no widget/request set

## v0.25.0 (2025-12-17)

### Feat

- add "complete" (sic) timezone support

### Fix

- add local timezone awareness for datetime fields

## v0.24.0 (2025-12-15)

### Feat

- basic support for displaying version history

### Fix

- use UTC when updating timestamp in DB
- workaround error when 'fanstatic.needed' missing from environ
- workaround error when 'fanstatic.needed' missing from environ
- address pylint warnings
- add basic `create_row()` support, esp. for batch views
- update dependencies for wuttjamaican, wutta-continuum
- make master view auto-detect continuum versioning for model class
- fix 'invalid-name' for pylint

## v0.23.2 (2025-10-19)

### Fix

- require latest wuttjamaican
- remove unused statement in WuttaFilter component
- explicitly disable 'duplicate-code' false alarm

## v0.23.1 (2025-09-01)

### Fix

- fix 'duplicate-code' for pylint
- fix 'no-member' for pylint
- fix 'attribute-defined-outside-init' for pylint
- fix 'arguments-renamed' for pylint
- fix 'arguments-differ' for pylint
- fix 'keyword-arg-before-vararg' for  pylint
- fix 'too-many-nested-blocks' for pylint
- fix 'too-many-locals' for pylint
- fix 'consider-using-generator' for  pylint
- fix 'missing-function-docstring' and 'missing-module-docstring' for pylint
- fix 'super-init-not-called' for pylint
- fix 'singleton-comparison' for pylint
- fix 'simplifiable-if-expression' for pylint
- fix 'redefined-outer-name' for pylint
- fix 'protected-access' for pylint
- fix 'not-callable' for pylint
- fix 'no-else-raise' for pylint
- fix 'isinstance-second-argument-not-valid-type' for pylint
- fix 'consider-using-set-comprehension' for pylint
- fix 'consider-using-get' for pylint
- fix 'consider-using-dict-items' for pylint
- fix 'consider-using-dict-comprehension' for pylint
- fix 'assignment-from-no-return' for pylint
- fix 'abstract-method' for pylint
- fix 'too-few-public-methods' for pylint
- fix 'too-many-lines' for pylint
- fix 'too-many-arguments' for pylint
- fix 'too-many-public-methods' for pylint
- fix 'too-many-statements' for pylint
- fix 'unidiomatic-typecheck' for pylint
- fix 'unnecessary-comprehension' for pylint
- fix 'unnecessary-lambda' and 'unnecessary-lambda-assignment' for pylint
- fix 'unspecified-encoding' for pylint
- fix 'unused-argument' for pylint
- fix 'use-a-generator' for pylint
- fix 'use-dict-literal' for pylint
- fix 'dangerous-default-value' for pylint
- fix 'wildcard-import' and 'unused-wildcard-import' for pylint
- fix 'wrong-import-order' for pylint
- fix 'import-outside-toplevel' for pylint
- fix 'implicit-str-concat' for pylint
- fix 'deprecated-method' for pylint
- fix 'cyclic-import' for pylint
- fix 'bare-except' and 'broad-exception-caught' for pylint
- fix 'invalid-name' for pylint
- fix 'anomalous-backslash-in-string' for pylint
- bump version requirement for wuttjamaican
- fix 'unused-variable' for pylint
- fix 'unused-import' for pylint
- fix 'redefined-argument-from-local' for pylint
- fix 'empty-docstring' for pylint
- fix 'no-else-return' for pylint
- fix 'too-many-branches' for pylint
- fix 'too-many-return-statements' for pylint
- fix 'too-many-instance-attributes' for pylint
- fix 'inconsistent-return-statements' for pylint
- format all code with black

## v0.23.0 (2025-08-09)

### Feat

- add tools to manage user API tokens

### Fix

- add default sorter, tools for basic table-element grid
- add custom password+confirmation widget for Vue3 + Oruga
- fix butterfly wrapper for b-notification component
- add butterfly wrapper for b-timepicker component
- style tweaks for butterfly/oruga; mostly expand fields
- fix b-datepicker component wrapper per oruga 0.9.0
- fix b-button component wrapper per oruga 0.9.0
- update butterfly component for b-autocomplete, per oruga 0.11.4
- update default versions for Vue3 + Oruga + FontAwesome

## v0.22.0 (2025-06-29)

### Feat

- add basic theme system

### Fix

- improve styles for testing watermark background image
- fix timezone offset bug for datepicker

## v0.21.5 (2025-02-21)

### Fix

- avoid newer `EnumType` for python <= 3.10

## v0.21.4 (2025-02-21)

### Fix

- add value choice/enum support for grid filters

## v0.21.3 (2025-02-19)

### Fix

- add click handler support in simple grid table element
- hide columns when applicable, for simple grid table element
- add `render_form_tag()` customization hook in /form template

## v0.21.2 (2025-02-18)

### Fix

- add hidden flag for grid columns

## v0.21.1 (2025-02-17)

### Fix

- fix warning msg for deprecated setting

## v0.21.0 (2025-02-01)

### Feat

- overhaul some User/Person form fields etc.

### Fix

- do not auto-create grid filters for uuid columns

## v0.20.6 (2025-01-26)

### Fix

- add `setup_enhance_admin_user()` method for initial setup
- add `render_percent()` method for Grid
- allow override for Admin menu title
- add `index_title_controls()` def block for base template
- add `make_users_grid()` method for RoleView
- fallback to empty string for uvicorn `root_path`
- add `root_path` config setting for running webapp via uvicorn

## v0.20.5 (2025-01-23)

### Fix

- improve styling for grid tools section
- add basic checkbox support for grids
- add WuttaRequestMixin for ThisPage component
- avoid literal `None` when rendering form field value
- let header title be even wider

## v0.20.4 (2025-01-15)

### Fix

- add `WuttaDateWidget` and associated logic
- add  `serialize_object()` method for `ObjectRef` schema node

## v0.20.3 (2025-01-14)

### Fix

- add `render_grid_tag()` as separate def block for index templates
- add `click_handler` attr for GridAction

## v0.20.2 (2025-01-14)

### Fix

- improve support for composite `model_key` in MasterView
- let content header text be a bit longer
- add optional `target` attr for GridAction
- add `render_date()` method for grids

## v0.20.1 (2025-01-13)

### Fix

- expose setting to choose menu handler, in appinfo/configure
- use prop key instead of column name, for master view model key
- add grid filters specific to numeric, integer types
- use default value for config settings

## v0.20.0 (2025-01-11)

### Feat

- add basic views for Reports

### Fix

- add `action_method` and `reset_url` params for Form class
- add placeholder when grid has no filters
- add `get_page_templates()` method for master view

## v0.19.3 (2025-01-09)

### Fix

- use `request.url` instead of `current_route_url()`
- add basic `<wutta-autocomplete>` component
- add `WuttaDictEnum` form schema type

## v0.19.2 (2025-01-07)

### Fix

- always use prop key for default grid filters
- avoid `request.current_route_url()` for user menu
- add `scale` kwarg for `WuttaMoney` schema type, widget
- make WuttaQuantity serialize w/ app handler, remove custom widget
- bugfix for bool simple settings with default value

## v0.19.1 (2025-01-06)

### Fix

- improve built-in grid renderer logic
- allow session injection for ObjectRef constructor
- improve rendering for batch row status
- add basic support for row grid "view" action links
- add "xref buttons" tool panel for master view
- add WuttaQuantity schema type, widget
- remove `session` param from some form schema, widget classes
- add grid renderers for bool, currency, quantity
- use proper bulma styles for markdown content
- use span element for readonly money field widget render
- include grid filters for all column properties of model class
- use app handler to render error string, when progress fails
- add schema node type, widget for "money" (currency) fields
- exclude FK fields by default, for model forms
- fix style for header title text

## v0.19.0 (2024-12-23)

### Feat

- add feature to edit email settings, basic message preview

### Fix

- move CRUD header buttons toward center of screen

## v0.18.0 (2024-12-18)

### Feat

- add basic support for running in ASGI context
- add support for running via uvicorn; `wutta webapp` command

## v0.17.2 (2024-12-17)

### Fix

- add basic support for grid filters for Date fields
- fix style bug for grid "add filter" autocomplete

## v0.17.1 (2024-12-16)

### Fix

- tweak wording for batch execution
- let view subclass more easily inject kwargs for `make_batch()`

## v0.17.0 (2024-12-15)

### Feat

- add basic support for batch execution
- add basic support for rows grid for master, batch views
- add basic master view class for batches

### Fix

- add handling for decimal values and lists, in `make_json_safe()`
- fix behavior when editing Roles for a User
- add basic views for raw Permissions
- improve support for date, datetime fields in grids, forms
- add way to set field widgets using pseudo-type
- add support for date, datetime form fields
- make dropdown widgets as wide as other text fields in main form
- add fallback instance title
- display "global" errors at top of form, if present
- add `make_form()` and `make_grid()` methods on web handler
- correct "empty option" behavior for `ObjectRef` schema type
- use fanstatic to serve built-in images by default

## v0.16.2 (2024-12-10)

### Fix

- add `GridWidget` and `form.set_grid()` for convenience
- add "is false or null" grid filter, for nullable bool columns
- remove Person column for `Person.users` grid display
- flatten UUID to str for `make_json_safe()`

## v0.16.1 (2024-12-08)

### Fix

- refactor to reflect usage of proper UUID values

## v0.16.0 (2024-12-05)

### Feat

- add `get_template_context()` method for master view

### Fix

- add option for People entry in the Admin menu
- fix handling of `Upgrade.uuid`
- improve support for random objects with grid, master view
- hide CRUD header buttons if master view does not allow

## v0.15.0 (2024-11-24)

### Feat

- add logic to prevent edit for some user accounts

### Fix

- fix default form value logic for bool checkbox fields
- always use configured app dist for appinfo/index page

## v0.14.2 (2024-11-24)

### Fix

- remove 'email' extra from wuttjamaican dependency
- omit `id` attr when rendering hidden input for CSRF token

## v0.14.1 (2024-08-30)

### Fix

- avoid exit prompt for configure when removing settings
- freeze default versions for buefy, vue-resource
- stop auto-trim for feedback message, user name

## v0.14.0 (2024-08-27)

### Feat

- add basic support for wutta-continuum

## v0.13.1 (2024-08-26)

### Fix

- allow custom base template to add params to feedback form

## v0.13.0 (2024-08-26)

### Feat

- use native wuttjamaican app to send feedback email
- add basic user feedback email mechanism
- add "progress" page for executing upgrades
- add basic support for execute upgrades, download stdout/stderr
- add basic progress page/indicator support
- add basic "delete results" grid tool
- add initial views for upgrades
- allow app db to be rattail-native instead of wutta-native
- add per-row css class support for grids
- improve grid filter API a bit, support string/bool filters

### Fix

- tweak max image size for full logo on home, login pages
- improve handling of boolean form fields
- misc. improvements for display of grids, form errors
- use autocomplete for grid filter verb choices
- small cleanup for grid filters template
- add once-button action for grid Reset View
- set sort defaults for users, roles
- add override hook for base form template

## v0.12.1 (2024-08-22)

### Fix

- improve home, login page styles for large logo image

## v0.12.0 (2024-08-22)

### Feat

- add "copy link" button for sharing a grid view
- add initial support for proper grid filters
- add initial filtering logic to grid class
- add "searchable" column support for grids
- improve page linkage between role/user/person
- add basic autocomplete support, for Person

### Fix

- cleanup templates for home, login pages
- cleanup logic for appinfo/configure
- expose settings for app node title, type
- show installed python packages on appinfo page
- tweak login form to stop extending size of background card
- add setting to auto-redirect anon users to login, from home page
- add form padding, validators for /configure pages
- add padding around main form, via wrapper css
- show CRUD buttons in header only if relevant and user has access
- tweak style config for home link app title in main menu

## v0.11.0 (2024-08-20)

### Feat

- split up base templates into more sections (def blocks)
- simplify base/page/form template structure; add docs

## v0.10.2 (2024-08-19)

### Fix

- add `render_vue_finalize()` methods for grids, forms
- avoid error when checking model for column property

## v0.10.1 (2024-08-19)

### Fix

- make `util.get_model_fields()` work with more model classes

## v0.10.0 (2024-08-18)

### Feat

- add multi-column sorting (frontend or backend) for grids

### Fix

- improve grid display when data is empty

## v0.9.0 (2024-08-16)

### Feat

- add backend pagination support for grids
- add initial/basic pagination for grids

## v0.8.1 (2024-08-15)

### Fix

- improve backward compat for `util.get_liburl()`

## v0.8.0 (2024-08-15)

### Feat

- add form/grid label auto-overrides for master view

### Fix

- add `person` to template context for `PersonView.view_profile()`

## v0.7.0 (2024-08-15)

### Feat

- add sane views for 403 Forbidden and 404 Not Found
- add permission checks for menus, view routes
- add first-time setup page to create admin user
- expose User password for editing in master views
- expose Role permissions for editing
- expose User "roles" for editing
- improve widget, rendering for Role notes

### Fix

- add stub for `PersonView.make_user()`
- allow arbitrary kwargs for `Form.render_vue_field()`
- make some tweaks for better tailbone compatibility
- prevent delete for built-in roles

## v0.6.0 (2024-08-13)

### Feat

- add basic Roles view
- add Users view; improve CRUD master for SQLAlchemy models
- add People view; improve CRUD master for SQLAlchemy models
- add basic support for SQLAlchemy model in master view
- add basic Create support for CRUD master view
- add basic Delete support for CRUD master view
- add basic Edit support for CRUD master view
- add auto-link (to "View") behavior for grid columns
- add basic support for "view" part of CRUD
- add basic `Grid` class, and /settings master view

### Fix

- rename MasterView method to `configure_grid()`
- replace default logo, favicon images
- tweak labels for Web Libraries config

## v0.5.0 (2024-08-06)

### Feat

- add basic support for fanstatic / libcache
- expose Web Libraries in app info config page
- add basic configure view for appinfo

### Fix

- bump min version for wuttjamaican

## v0.4.0 (2024-08-05)

### Feat

- add basic App Info view (index only)
- add initial `MasterView` support

### Fix

- add `notfound()` View method; auto-append trailing slash
- bump min version for wuttjamaican

## v0.3.0 (2024-08-05)

### Feat

- add support for admin user to become / stop being root
- add view to change current user password
- add basic logo, favicon images
- add auth views, for login/logout
- add custom security policy, login/logout for pyramid
- add `wuttaweb.views.essential` module
- add initial/basic forms support
- add `wuttaweb.db` module, with `Session`
- add `util.get_form_data()` convenience function

### Fix

- allow custom user getter for `new_request_set_user()` hook

## v0.2.0 (2024-07-14)

### Feat

- add basic support for menu handler

- add "web handler" feature; it must get the menu handler

## v0.1.0 (2024-07-12)

### Feat

- basic support for WSGI app, views, templates
