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
|
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 ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue