feat: auto-delete asset from farmOS if deleting via mirror app

This commit is contained in:
Lance Edgar 2026-02-26 17:36:37 -06:00
parent 38dad49bbd
commit 96ccf30e46

View file

@ -33,6 +33,7 @@ from wuttafarm.db.model import Asset, Log
from wuttafarm.web.forms.schema import AssetParentRefs from wuttafarm.web.forms.schema import AssetParentRefs
from wuttafarm.web.forms.widgets import ImageWidget from wuttafarm.web.forms.widgets import ImageWidget
from wuttafarm.util import get_log_type_enum from wuttafarm.util import get_log_type_enum
from wuttafarm.web.util import get_farmos_client_for_user
def get_asset_type_enum(config): def get_asset_type_enum(config):
@ -267,11 +268,30 @@ class AssetMasterView(WuttaFarmMasterView):
asset = super().objectify(form) asset = super().objectify(form)
if self.creating: if self.creating:
model_class = self.get_model_class() asset.asset_type = self.get_asset_type()
asset.asset_type = model_class.__wutta_hint__["farmos_asset_type"]
return asset return asset
def get_asset_type(self):
model_class = self.get_model_class()
return model_class.__wutta_hint__["farmos_asset_type"]
def delete_instance(self, obj):
# save farmOS UUID if we need it
farmos_uuid = None
if self.app.is_farmos_mirror() and hasattr(obj, "farmos_uuid"):
farmos_uuid = obj.farmos_uuid
# delete per usual
super().delete_instance(obj)
# maybe delete from farmOS also
if farmos_uuid:
client = get_farmos_client_for_user(self.request)
asset_type = self.get_asset_type()
client.asset.delete(asset_type, farmos_uuid)
def get_farmos_url(self, asset): def get_farmos_url(self, asset):
return self.app.get_farmos_url(f"/asset/{asset.drupal_id}") return self.app.get_farmos_url(f"/asset/{asset.drupal_id}")
@ -279,7 +299,7 @@ class AssetMasterView(WuttaFarmMasterView):
buttons = super().get_xref_buttons(asset) buttons = super().get_xref_buttons(asset)
if asset.farmos_uuid: if asset.farmos_uuid:
asset_type = self.get_model_class().__wutta_hint__["farmos_asset_type"] asset_type = self.get_asset_type()
route = f"farmos_{asset_type}_assets.view" route = f"farmos_{asset_type}_assets.view"
url = self.request.route_url(route, uuid=asset.farmos_uuid) url = self.request.route_url(route, uuid=asset.farmos_uuid)
buttons.append( buttons.append(