fix: add links for Parents column in All Assets grid
This commit is contained in:
parent
547cc6e4ae
commit
ce103137a5
2 changed files with 55 additions and 78 deletions
|
|
@ -26,6 +26,7 @@ Model definition for Asset Types
|
|||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy.ext.declarative import declared_attr
|
||||
from sqlalchemy.ext.associationproxy import association_proxy
|
||||
|
||||
from wuttjamaican.db import model
|
||||
|
||||
|
|
@ -186,6 +187,12 @@ class Asset(model.Base):
|
|||
cascade_backrefs=False,
|
||||
)
|
||||
|
||||
parents = association_proxy(
|
||||
"_parents",
|
||||
"parent",
|
||||
creator=lambda parent: AssetParent(parent=parent),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.asset_name or ""
|
||||
|
||||
|
|
|
|||
|
|
@ -49,79 +49,6 @@ def get_asset_type_enum(config):
|
|||
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):
|
||||
"""
|
||||
Base class for "Asset Type" master views.
|
||||
|
|
@ -181,7 +108,10 @@ class AssetMasterView(WuttaFarmMasterView):
|
|||
model = self.app.model
|
||||
model_class = self.get_model_class()
|
||||
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):
|
||||
g = grid
|
||||
|
|
@ -212,19 +142,17 @@ class AssetMasterView(WuttaFarmMasterView):
|
|||
g.set_filter("archived", model.Asset.archived)
|
||||
|
||||
def render_parents_for_grid(self, asset, field, value):
|
||||
parents = asset.asset._parents
|
||||
|
||||
if self.farmos_style_grid_links:
|
||||
links = []
|
||||
for parent in parents:
|
||||
parent = parent.parent
|
||||
for parent in asset.parents:
|
||||
url = self.request.route_url(
|
||||
f"{parent.asset_type}_assets.view", uuid=parent.uuid
|
||||
)
|
||||
links.append(tags.link_to(str(parent), url))
|
||||
return ", ".join(links)
|
||||
|
||||
parents = [str(p.parent) for p in parents]
|
||||
parents = [str(p.parent) for p in asset.parents]
|
||||
return ", ".join(parents)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
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):
|
||||
base = globals()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue