diff --git a/CHANGELOG.md b/CHANGELOG.md index cc241e5..ef4a5e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,15 +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/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## 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 diff --git a/pyproject.toml b/pyproject.toml index a7a756e..8ec3f7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" [project] name = "WuttaWeb" -version = "0.20.2" +version = "0.20.1" description = "Web App for Wutta Framework" readme = "README.md" authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}] diff --git a/src/wuttaweb/grids/base.py b/src/wuttaweb/grids/base.py index e65a22e..fb797a4 100644 --- a/src/wuttaweb/grids/base.py +++ b/src/wuttaweb/grids/base.py @@ -2280,10 +2280,6 @@ class GridAction: See also :meth:`get_url()`. - .. attribute:: target - - Optional ``target`` attribute for the ```` tag. - .. attribute:: icon Name of icon to be shown for the action link. @@ -2301,7 +2297,6 @@ class GridAction: key, label=None, url=None, - target=None, icon=None, link_class=None, ): @@ -2310,7 +2305,6 @@ class GridAction: self.app = self.config.get_app() self.key = key self.url = url - self.target = target self.label = label or self.app.make_title(key) self.icon = icon or key self.link_class = link_class or '' diff --git a/src/wuttaweb/templates/base.mako b/src/wuttaweb/templates/base.mako index 486b496..429e9be 100644 --- a/src/wuttaweb/templates/base.mako +++ b/src/wuttaweb/templates/base.mako @@ -155,7 +155,7 @@ } #content-title h1 { - max-width: 85%; + max-width: 80%; overflow: hidden; padding-left: 0.5rem; text-overflow: ellipsis; diff --git a/src/wuttaweb/templates/grids/vue_template.mako b/src/wuttaweb/templates/grids/vue_template.mako index ac0a2a9..746a939 100644 --- a/src/wuttaweb/templates/grids/vue_template.mako +++ b/src/wuttaweb/templates/grids/vue_template.mako @@ -180,9 +180,6 @@ % for action in grid.actions: ${action.render_icon_and_label()} diff --git a/src/wuttaweb/views/master.py b/src/wuttaweb/views/master.py index 61d4d14..cb32ef9 100644 --- a/src/wuttaweb/views/master.py +++ b/src/wuttaweb/views/master.py @@ -2176,28 +2176,6 @@ class MasterView(View): """ return str(instance) or "(no title)" - def get_action_route_kwargs(self, obj): - """ - Get a dict of route kwargs for the given object. - - This is called from :meth:`get_action_url()` and must return - kwargs suitable for use with ``request.route_url()``. - - In practice this should return a dict which has keys for each - field from :meth:`get_model_key()` and values which come from - the object. - - :param obj: Model instance object. - - :returns: The dict of route kwargs for the object. - """ - try: - return dict([(key, obj[key]) - for key in self.get_model_key()]) - except TypeError: - return dict([(key, getattr(obj, key)) - for key in self.get_model_key()]) - def get_action_url(self, action, obj, **kwargs): """ Generate an "action" URL for the given model instance. @@ -2205,21 +2183,22 @@ class MasterView(View): This is a shortcut which generates a route name based on :meth:`get_route_prefix()` and the ``action`` param. - It calls :meth:`get_action_route_kwargs()` and then passes - those along with route name to ``request.route_url()``, and - returns the result. + It returns the URL based on generated route name and object's + model key values. :param action: String name for the action, which corresponds to part of some named route, e.g. ``'view'`` or ``'edit'``. :param obj: Model instance object. - - :param \**kwargs: Additional kwargs to be passed to - ``request.route_url()``, if needed. """ - kw = self.get_action_route_kwargs(obj) - kw.update(kwargs) route_prefix = self.get_route_prefix() + try: + kw = dict([(key, obj[key]) + for key in self.get_model_key()]) + except TypeError: + kw = dict([(key, getattr(obj, key)) + for key in self.get_model_key()]) + kw.update(kwargs) return self.request.route_url(f'{route_prefix}.{action}', **kw) def get_action_url_view(self, obj, i): @@ -2750,7 +2729,7 @@ class MasterView(View): inspector = sa.inspect(model_class) keys = [col.name for col in inspector.primary_key] return tuple([prop.key for prop in inspector.column_attrs - if all([col.name in keys for col in prop.columns])]) + if [col.name for col in prop.columns] == keys]) raise AttributeError(f"you must define model_key for view class: {cls}") diff --git a/tests/views/test_master.py b/tests/views/test_master.py index c259034..d77e2b8 100644 --- a/tests/views/test_master.py +++ b/tests/views/test_master.py @@ -750,29 +750,6 @@ class TestMasterView(WebTestCase): self.request.matchdict = {'name': 'blarg'} self.assertRaises(HTTPNotFound, view.get_instance, session=self.session) - def test_get_action_route_kwargs(self): - model = self.app.model - with patch.object(mod.MasterView, 'model_class', new=model.Setting, create=True): - view = self.make_view() - - # dict object - setting = {'name': 'foo', 'value': 'bar'} - kw = view.get_action_route_kwargs(setting) - self.assertEqual(kw, {'name': 'foo'}) - - # mapped object - setting = model.Setting(name='foo', value='bar') - kw = view.get_action_route_kwargs(setting) - self.assertEqual(kw, {'name': 'foo'}) - - # non-standard object - class MySetting: - def __init__(self, **kw): - self.__dict__.update(kw) - setting = MySetting(name='foo', value='bar') - kw = view.get_action_route_kwargs(setting) - self.assertEqual(kw, {'name': 'foo'}) - def test_get_action_url_for_dict(self): model = self.app.model setting = {'name': 'foo', 'value': 'bar'}