3
0
Fork 0

Compare commits

..

No commits in common. "9541bc6a27c4e6ec04ed11656410a78eb2068088" and "204548e4f2dd79525e02edb3100134c3bab09088" have entirely different histories.

7 changed files with 9 additions and 50 deletions

View file

@ -5,18 +5,6 @@ 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/) 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). and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## 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) ## v0.27.1 (2026-01-03)
### Fix ### Fix

View file

@ -6,7 +6,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "WuttaWeb" name = "WuttaWeb"
version = "0.27.2" version = "0.27.1"
description = "Web App for Wutta Framework" description = "Web App for Wutta Framework"
readme = "README.md" readme = "README.md"
authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}] authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]

View file

@ -2030,10 +2030,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
grid.set_renderer('foo', 'date') grid.set_renderer('foo', 'date')
""" """
try: dt = getattr(obj, key)
dt = getattr(obj, key)
except AttributeError:
dt = obj[key]
return self.app.render_date(dt) return self.app.render_date(dt)
def render_datetime(self, obj, key, value): # pylint: disable=unused-argument def render_datetime(self, obj, key, value): # pylint: disable=unused-argument
@ -2049,10 +2046,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
grid.set_renderer('foo', 'datetime') grid.set_renderer('foo', 'datetime')
""" """
try: dt = getattr(obj, key)
dt = getattr(obj, key)
except AttributeError:
dt = obj[key]
return self.app.render_datetime(dt, html=True) return self.app.render_datetime(dt, html=True)
def render_enum(self, obj, key, value, enum=None): def render_enum(self, obj, key, value, enum=None):

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# wuttaweb -- Web App for Wutta Framework # wuttaweb -- Web App for Wutta Framework
# Copyright © 2024-2026 Lance Edgar # Copyright © 2024-2025 Lance Edgar
# #
# This file is part of Wutta Framework. # This file is part of Wutta Framework.
# #
@ -47,15 +47,14 @@ class AuthView(View):
* route: ``login`` * route: ``login``
* template: ``/auth/login.mako`` * template: ``/auth/login.mako``
""" """
# pylint: disable=duplicate-code
model = self.app.model model = self.app.model
session = session or Session() session = session or Session()
auth = self.app.get_auth_handler()
# nb. redirect to /setup if no users exist # nb. redirect to /setup if no users exist
user = session.query(model.User).first() user = session.query(model.User).first()
if not user: if not user:
return self.redirect(self.request.route_url("setup")) return self.redirect(self.request.route_url("setup"))
# pylint: enable=duplicate-code
referrer = self.request.get_referrer() referrer = self.request.get_referrer()
@ -80,9 +79,8 @@ class AuthView(View):
if data: if data:
# truly validate user credentials # truly validate user credentials
if user := self.authenticate_user( user = auth.authenticate_user(session, data["username"], data["password"])
session, data["username"], data["password"] if user:
):
# okay now they're truly logged in # okay now they're truly logged in
headers = login_user(self.request, user) headers = login_user(self.request, user)
@ -97,12 +95,6 @@ class AuthView(View):
# 'referrer': referrer, # 'referrer': referrer,
} }
def authenticate_user(
self, session, username, password
): # pylint: disable=missing-function-docstring
auth = self.app.get_auth_handler()
return auth.authenticate_user(session, username, password)
def login_make_schema(self): # pylint: disable=empty-docstring def login_make_schema(self): # pylint: disable=empty-docstring
""" """ """ """
schema = colander.Schema() schema = colander.Schema()

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# wuttaweb -- Web App for Wutta Framework # wuttaweb -- Web App for Wutta Framework
# Copyright © 2024-2026 Lance Edgar # Copyright © 2024-2025 Lance Edgar
# #
# This file is part of Wutta Framework. # This file is part of Wutta Framework.
# #
@ -51,7 +51,6 @@ class CommonView(View):
This is normally the view shown when a user navigates to the This is normally the view shown when a user navigates to the
root URL for the web app. root URL for the web app.
""" """
# pylint: disable=duplicate-code
model = self.app.model model = self.app.model
session = session or Session() session = session or Session()
@ -59,7 +58,6 @@ class CommonView(View):
user = session.query(model.User).first() user = session.query(model.User).first()
if not user: if not user:
return self.redirect(self.request.route_url("setup")) return self.redirect(self.request.route_url("setup"))
# pylint: enable=duplicate-code
# maybe auto-redirect anons to login # maybe auto-redirect anons to login
if not self.request.user: if not self.request.user:

View file

@ -1682,12 +1682,6 @@ class TestGrid(WebTestCase):
result = grid.render_date(obj, "dt", str(dt)) result = grid.render_date(obj, "dt", str(dt))
self.assertEqual(result, "2025-01-13") self.assertEqual(result, "2025-01-13")
# object as dict
dt = datetime.date(2025, 1, 13)
obj = {"dt": dt}
result = grid.render_date(obj, "dt", str(dt))
self.assertEqual(result, "2025-01-13")
def test_render_datetime(self): def test_render_datetime(self):
tzlocal = get_timezone_by_name("America/Los_Angeles") tzlocal = get_timezone_by_name("America/Los_Angeles")
with patch.object(self.app, "get_timezone", return_value=tzlocal): with patch.object(self.app, "get_timezone", return_value=tzlocal):
@ -1705,13 +1699,6 @@ class TestGrid(WebTestCase):
self.assertTrue(result.startswith('<span title="')) self.assertTrue(result.startswith('<span title="'))
self.assertIn("2024-12-12 05:44-0800", result) self.assertIn("2024-12-12 05:44-0800", result)
# object as dict
dt = datetime.datetime(2024, 12, 12, 13, 44)
obj = {"dt": dt}
result = grid.render_datetime(obj, "dt", str(dt))
self.assertTrue(result.startswith('<span title="'))
self.assertIn("2024-12-12 05:44-0800", result)
def test_render_vue_tag(self): def test_render_vue_tag(self):
grid = self.make_grid(columns=["foo", "bar"]) grid = self.make_grid(columns=["foo", "bar"])
html = grid.render_vue_tag() html = grid.render_vue_tag()

View file

@ -23,7 +23,7 @@ commands = pylint wuttaweb
basepython = python3.11 basepython = python3.11
commands = commands =
pytest -m 'not versioned and not functional' --cov=wuttaweb pytest -m 'not versioned and not functional' --cov=wuttaweb
pytest -m 'versioned' --cov-append --cov=wuttaweb pytest -m 'versioned' --cov-append --cov=wuttaweb --cov-report=html
pytest -m 'functional' --cov-append --cov=wuttaweb --cov-report=html --cov-fail-under=100 pytest -m 'functional' --cov-append --cov=wuttaweb --cov-report=html --cov-fail-under=100
[testenv:docs] [testenv:docs]