fix: make AllLogView inherit from LogMasterView
and improve asset rendering for those grids
This commit is contained in:
parent
d1817a3611
commit
86e36bc64a
2 changed files with 70 additions and 74 deletions
|
|
@ -26,6 +26,7 @@ Model definition for Logs
|
|||
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
|
||||
|
||||
|
|
@ -155,6 +156,12 @@ class Log(model.Base):
|
|||
|
||||
_assets = orm.relationship("LogAsset", back_populates="log")
|
||||
|
||||
assets = association_proxy(
|
||||
"_assets",
|
||||
"asset",
|
||||
creator=lambda asset: LogAsset(asset=asset),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.message or ""
|
||||
|
||||
|
|
@ -184,6 +191,7 @@ def add_log_proxies(subclass):
|
|||
Log.make_proxy(subclass, "log", "timestamp")
|
||||
Log.make_proxy(subclass, "log", "status")
|
||||
Log.make_proxy(subclass, "log", "notes")
|
||||
Log.make_proxy(subclass, "log", "assets")
|
||||
|
||||
|
||||
class LogAsset(model.Base):
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ Base views for Logs
|
|||
from collections import OrderedDict
|
||||
|
||||
import colander
|
||||
from webhelpers2.html import tags
|
||||
|
||||
from wuttaweb.forms.schema import WuttaDictEnum
|
||||
from wuttaweb.db import Session
|
||||
|
|
@ -89,78 +90,6 @@ class LogTypeView(WuttaFarmMasterView):
|
|||
return buttons
|
||||
|
||||
|
||||
class AllLogView(WuttaFarmMasterView):
|
||||
"""
|
||||
Master view for All Logs
|
||||
"""
|
||||
|
||||
model_class = Log
|
||||
route_prefix = "log"
|
||||
url_prefix = "/logs"
|
||||
|
||||
farmos_refurl_path = "/logs"
|
||||
|
||||
viewable = False
|
||||
creatable = False
|
||||
editable = False
|
||||
deletable = False
|
||||
model_is_versioned = False
|
||||
|
||||
labels = {
|
||||
"message": "Log Name",
|
||||
}
|
||||
|
||||
grid_columns = [
|
||||
"status",
|
||||
"drupal_id",
|
||||
"timestamp",
|
||||
"message",
|
||||
"log_type",
|
||||
"assets",
|
||||
"location",
|
||||
"quantity",
|
||||
"groups",
|
||||
"is_group_assignment",
|
||||
]
|
||||
|
||||
sort_defaults = ("timestamp", "desc")
|
||||
|
||||
filter_defaults = {
|
||||
"message": {"active": True, "verb": "contains"},
|
||||
}
|
||||
|
||||
def configure_grid(self, grid):
|
||||
g = grid
|
||||
super().configure_grid(g)
|
||||
session = self.Session()
|
||||
|
||||
# drupal_id
|
||||
g.set_label("drupal_id", "ID", column_only=True)
|
||||
|
||||
# timestamp
|
||||
g.set_renderer("timestamp", "date")
|
||||
g.set_link("timestamp")
|
||||
|
||||
# message
|
||||
g.set_link("message")
|
||||
|
||||
# log_type
|
||||
g.set_enum("log_type", get_log_type_enum(self.config, session=session))
|
||||
|
||||
# assets
|
||||
g.set_renderer("assets", self.render_assets_for_grid)
|
||||
|
||||
# view action links to final log record
|
||||
def log_url(log, i):
|
||||
return self.request.route_url(f"logs_{log.log_type}.view", uuid=log.uuid)
|
||||
|
||||
g.add_action("view", icon="eye", url=log_url)
|
||||
|
||||
def render_assets_for_grid(self, log, field, value):
|
||||
assets = [str(a.asset) for a in log._assets]
|
||||
return ", ".join(assets)
|
||||
|
||||
|
||||
class LogMasterView(WuttaFarmMasterView):
|
||||
"""
|
||||
Base class for Asset master views
|
||||
|
|
@ -212,7 +141,10 @@ class LogMasterView(WuttaFarmMasterView):
|
|||
model = self.app.model
|
||||
model_class = self.get_model_class()
|
||||
session = session or self.Session()
|
||||
return session.query(model_class).join(model.Log)
|
||||
query = session.query(model_class)
|
||||
if model_class is not model.Log:
|
||||
query = query.join(model.Log)
|
||||
return query
|
||||
|
||||
def configure_grid(self, grid):
|
||||
g = grid
|
||||
|
|
@ -250,7 +182,17 @@ class LogMasterView(WuttaFarmMasterView):
|
|||
g.set_renderer("assets", self.render_assets_for_grid)
|
||||
|
||||
def render_assets_for_grid(self, log, field, value):
|
||||
return ", ".join([a.asset.asset_name for a in log.log._assets])
|
||||
|
||||
if self.farmos_style_grid_links:
|
||||
links = []
|
||||
for asset in log.assets:
|
||||
url = self.request.route_url(
|
||||
f"{asset.asset_type}_assets.view", uuid=asset.uuid
|
||||
)
|
||||
links.append(tags.link_to(str(asset), url))
|
||||
return ", ".join(links)
|
||||
|
||||
return ", ".join([str(a) for a in log.assets])
|
||||
|
||||
def grid_row_class(self, log, data, i):
|
||||
if log.status == "pending":
|
||||
|
|
@ -361,6 +303,52 @@ class LogMasterView(WuttaFarmMasterView):
|
|||
]
|
||||
|
||||
|
||||
class AllLogView(LogMasterView):
|
||||
"""
|
||||
Master view for All Logs
|
||||
"""
|
||||
|
||||
model_class = Log
|
||||
route_prefix = "log"
|
||||
url_prefix = "/logs"
|
||||
|
||||
farmos_refurl_path = "/logs"
|
||||
|
||||
viewable = False
|
||||
creatable = False
|
||||
editable = False
|
||||
deletable = False
|
||||
model_is_versioned = False
|
||||
|
||||
grid_columns = [
|
||||
"status",
|
||||
"drupal_id",
|
||||
"timestamp",
|
||||
"message",
|
||||
"log_type",
|
||||
"assets",
|
||||
"location",
|
||||
"quantity",
|
||||
"groups",
|
||||
"is_group_assignment",
|
||||
"owner",
|
||||
]
|
||||
|
||||
def configure_grid(self, grid):
|
||||
g = grid
|
||||
super().configure_grid(g)
|
||||
session = self.Session()
|
||||
|
||||
# log_type
|
||||
g.set_enum("log_type", get_log_type_enum(self.config, session=session))
|
||||
|
||||
# view action links to final log record
|
||||
def log_url(log, i):
|
||||
return self.request.route_url(f"logs_{log.log_type}.view", uuid=log.uuid)
|
||||
|
||||
g.add_action("view", icon="eye", url=log_url)
|
||||
|
||||
|
||||
def defaults(config, **kwargs):
|
||||
base = globals()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue