fix: add links for Parents column in All Assets grid

This commit is contained in:
Lance Edgar 2026-03-02 18:57:41 -06:00
parent 547cc6e4ae
commit ce103137a5
2 changed files with 55 additions and 78 deletions

View file

@ -26,6 +26,7 @@ Model definition for Asset Types
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.ext.associationproxy import association_proxy
from wuttjamaican.db import model from wuttjamaican.db import model
@ -186,6 +187,12 @@ class Asset(model.Base):
cascade_backrefs=False, cascade_backrefs=False,
) )
parents = association_proxy(
"_parents",
"parent",
creator=lambda parent: AssetParent(parent=parent),
)
def __str__(self): def __str__(self):
return self.asset_name or "" return self.asset_name or ""

View file

@ -49,79 +49,6 @@ def get_asset_type_enum(config):
return asset_types return asset_types
class AllAssetView(WuttaFarmMasterView):
"""
Master view for Assets
"""
model_class = Asset
route_prefix = "assets"
url_prefix = "/assets"
farmos_refurl_path = "/assets"
viewable = False
creatable = False
editable = False
deletable = False
model_is_versioned = False
grid_columns = [
"thumbnail",
"drupal_id",
"asset_name",
"asset_type",
"parents",
"archived",
]
sort_defaults = "asset_name"
filter_defaults = {
"asset_name": {"active": True, "verb": "contains"},
"archived": {"active": True, "verb": "is_false"},
}
def configure_grid(self, grid):
g = grid
super().configure_grid(g)
# thumbnail
g.set_renderer("thumbnail", self.render_grid_thumbnail)
g.set_label("thumbnail", "", column_only=True)
g.set_centered("thumbnail")
# drupal_id
g.set_label("drupal_id", "ID", column_only=True)
# asset_name
g.set_link("asset_name")
# asset_type
g.set_enum("asset_type", get_asset_type_enum(self.config))
# parents
g.set_renderer("parents", self.render_parents_for_grid)
# view action links to final asset record
def asset_url(asset, i):
return self.request.route_url(
f"{asset.asset_type}_assets.view", uuid=asset.uuid
)
g.add_action("view", icon="eye", url=asset_url)
def render_parents_for_grid(self, asset, field, value):
parents = [str(p.parent) for p in asset._parents]
return ", ".join(parents)
def grid_row_class(self, asset, data, i):
""" """
if asset.archived:
return "has-background-warning"
return None
class AssetTypeMasterView(WuttaFarmMasterView): class AssetTypeMasterView(WuttaFarmMasterView):
""" """
Base class for "Asset Type" master views. Base class for "Asset Type" master views.
@ -181,7 +108,10 @@ class AssetMasterView(WuttaFarmMasterView):
model = self.app.model model = self.app.model
model_class = self.get_model_class() model_class = self.get_model_class()
session = session or self.Session() session = session or self.Session()
return session.query(model_class).join(model.Asset) query = session.query(model_class)
if model_class is not model.Asset:
query = query.join(model.Asset)
return query
def configure_grid(self, grid): def configure_grid(self, grid):
g = grid g = grid
@ -212,19 +142,17 @@ class AssetMasterView(WuttaFarmMasterView):
g.set_filter("archived", model.Asset.archived) g.set_filter("archived", model.Asset.archived)
def render_parents_for_grid(self, asset, field, value): def render_parents_for_grid(self, asset, field, value):
parents = asset.asset._parents
if self.farmos_style_grid_links: if self.farmos_style_grid_links:
links = [] links = []
for parent in parents: for parent in asset.parents:
parent = parent.parent
url = self.request.route_url( url = self.request.route_url(
f"{parent.asset_type}_assets.view", uuid=parent.uuid f"{parent.asset_type}_assets.view", uuid=parent.uuid
) )
links.append(tags.link_to(str(parent), url)) links.append(tags.link_to(str(parent), url))
return ", ".join(links) return ", ".join(links)
parents = [str(p.parent) for p in parents] parents = [str(p.parent) for p in asset.parents]
return ", ".join(parents) return ", ".join(parents)
def grid_row_class(self, asset, data, i): def grid_row_class(self, asset, data, i):
@ -365,6 +293,48 @@ class AssetMasterView(WuttaFarmMasterView):
return self.request.route_url(f"logs_{log.log_type}.view", uuid=log.uuid) return self.request.route_url(f"logs_{log.log_type}.view", uuid=log.uuid)
class AllAssetView(AssetMasterView):
"""
Master view for Assets
"""
model_class = Asset
route_prefix = "assets"
url_prefix = "/assets"
farmos_refurl_path = "/assets"
viewable = False
creatable = False
editable = False
deletable = False
model_is_versioned = False
grid_columns = [
"thumbnail",
"drupal_id",
"asset_name",
"asset_type",
"parents",
"archived",
]
def configure_grid(self, grid):
g = grid
super().configure_grid(g)
# asset_type
g.set_enum("asset_type", get_asset_type_enum(self.config))
# view action links to final asset record
def asset_url(asset, i):
return self.request.route_url(
f"{asset.asset_type}_assets.view", uuid=asset.uuid
)
g.add_action("view", icon="eye", url=asset_url)
def defaults(config, **kwargs): def defaults(config, **kwargs):
base = globals() base = globals()