From 6d80937e0c31aad382cabf620e4369f672494784 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Fri, 6 Mar 2026 21:59:38 -0600 Subject: [PATCH] feat: expose Assets field when editing a Log record --- src/wuttafarm/web/views/logs.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/wuttafarm/web/views/logs.py b/src/wuttafarm/web/views/logs.py index 9c983b7..0a893c2 100644 --- a/src/wuttafarm/web/views/logs.py +++ b/src/wuttafarm/web/views/logs.py @@ -256,10 +256,9 @@ class LogMasterView(WuttaFarmMasterView): f.set_default("timestamp", self.app.make_utc()) # assets - if self.creating or self.editing: - f.remove("assets") # TODO: need to support this - else: - f.set_node("assets", AssetRefs(self.request)) + f.set_node("assets", AssetRefs(self.request)) + f.set_required("assets", False) + if not self.creating: # nb. must explicity declare value for non-standard field f.set_default("assets", log.assets) @@ -324,13 +323,33 @@ class LogMasterView(WuttaFarmMasterView): def objectify(self, form): log = super().objectify(form) + data = form.validated if self.creating: model_class = self.get_model_class() log.log_type = self.get_farmos_log_type() + self.set_assets(log, data["assets"] or []) + return log + def set_assets(self, log, desired): + model = self.app.model + session = self.Session() + current = [a.uuid for a in log.assets] + + for uuid in desired: + if uuid not in current: + asset = session.get(model.Asset, uuid) + assert asset + log.assets.append(asset) + + for uuid in current: + if uuid not in desired: + asset = session.get(model.Asset, uuid) + assert asset + log.assets.remove(asset) + def get_farmos_url(self, log): return self.app.get_farmos_url(f"/log/{log.drupal_id}")