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
|
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
|
||||||
|
|
||||||
|
|
@ -155,6 +156,12 @@ class Log(model.Base):
|
||||||
|
|
||||||
_assets = orm.relationship("LogAsset", back_populates="log")
|
_assets = orm.relationship("LogAsset", back_populates="log")
|
||||||
|
|
||||||
|
assets = association_proxy(
|
||||||
|
"_assets",
|
||||||
|
"asset",
|
||||||
|
creator=lambda asset: LogAsset(asset=asset),
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.message or ""
|
return self.message or ""
|
||||||
|
|
||||||
|
|
@ -184,6 +191,7 @@ def add_log_proxies(subclass):
|
||||||
Log.make_proxy(subclass, "log", "timestamp")
|
Log.make_proxy(subclass, "log", "timestamp")
|
||||||
Log.make_proxy(subclass, "log", "status")
|
Log.make_proxy(subclass, "log", "status")
|
||||||
Log.make_proxy(subclass, "log", "notes")
|
Log.make_proxy(subclass, "log", "notes")
|
||||||
|
Log.make_proxy(subclass, "log", "assets")
|
||||||
|
|
||||||
|
|
||||||
class LogAsset(model.Base):
|
class LogAsset(model.Base):
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ Base views for Logs
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
import colander
|
import colander
|
||||||
|
from webhelpers2.html import tags
|
||||||
|
|
||||||
from wuttaweb.forms.schema import WuttaDictEnum
|
from wuttaweb.forms.schema import WuttaDictEnum
|
||||||
from wuttaweb.db import Session
|
from wuttaweb.db import Session
|
||||||
|
|
@ -89,78 +90,6 @@ class LogTypeView(WuttaFarmMasterView):
|
||||||
return buttons
|
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):
|
class LogMasterView(WuttaFarmMasterView):
|
||||||
"""
|
"""
|
||||||
Base class for Asset master views
|
Base class for Asset master views
|
||||||
|
|
@ -212,7 +141,10 @@ class LogMasterView(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.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):
|
def configure_grid(self, grid):
|
||||||
g = grid
|
g = grid
|
||||||
|
|
@ -250,7 +182,17 @@ class LogMasterView(WuttaFarmMasterView):
|
||||||
g.set_renderer("assets", self.render_assets_for_grid)
|
g.set_renderer("assets", self.render_assets_for_grid)
|
||||||
|
|
||||||
def render_assets_for_grid(self, log, field, value):
|
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):
|
def grid_row_class(self, log, data, i):
|
||||||
if log.status == "pending":
|
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):
|
def defaults(config, **kwargs):
|
||||||
base = globals()
|
base = globals()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue