fix: add WuttaFarm -> farmOS export for Plant Assets

This commit is contained in:
Lance Edgar 2026-02-18 19:31:41 -06:00
parent 185cd86efb
commit e7b493d7c9
3 changed files with 91 additions and 2 deletions

View file

@ -333,6 +333,59 @@ class LandAssetImporter(ToFarmOSAsset):
return payload return payload
class PlantAssetImporter(ToFarmOSAsset):
model_title = "PlantAsset"
farmos_asset_type = "plant"
supported_fields = [
"uuid",
"asset_name",
"plant_type_uuids",
"notes",
"archived",
]
def normalize_target_object(self, plant):
data = super().normalize_target_object(plant)
data.update(
{
"plant_type_uuids": [
UUID(p["id"]) for p in plant["relationships"]["plant_type"]["data"]
],
}
)
return data
def get_asset_payload(self, source_data):
payload = super().get_asset_payload(source_data)
attrs = {}
if "sex" in self.fields:
attrs["sex"] = source_data["sex"]
if "is_sterile" in self.fields:
attrs["is_sterile"] = source_data["is_sterile"]
if "birthdate" in self.fields:
attrs["birthdate"] = self.format_datetime(source_data["birthdate"])
rels = {}
if "plant_type_uuids" in self.fields:
rels["plant_type"] = {"data": []}
for uuid in source_data["plant_type_uuids"]:
rels["plant_type"]["data"].append(
{
"id": str(uuid),
"type": "taxonomy_term--plant_type",
}
)
payload["attributes"].update(attrs)
if rels:
payload.setdefault("relationships", {}).update(rels)
return payload
class StructureAssetImporter(ToFarmOSAsset): class StructureAssetImporter(ToFarmOSAsset):
model_title = "StructureAsset" model_title = "StructureAsset"

View file

@ -98,6 +98,7 @@ class FromWuttaFarmToFarmOS(FromWuttaFarmHandler, ToFarmOSHandler):
importers["AnimalType"] = AnimalTypeImporter importers["AnimalType"] = AnimalTypeImporter
importers["AnimalAsset"] = AnimalAssetImporter importers["AnimalAsset"] = AnimalAssetImporter
importers["GroupAsset"] = GroupAssetImporter importers["GroupAsset"] = GroupAssetImporter
importers["PlantAsset"] = PlantAssetImporter
importers["ActivityLog"] = ActivityLogImporter importers["ActivityLog"] = ActivityLogImporter
importers["HarvestLog"] = HarvestLogImporter importers["HarvestLog"] = HarvestLogImporter
importers["MedicalLog"] = MedicalLogImporter importers["MedicalLog"] = MedicalLogImporter
@ -239,6 +240,32 @@ class LandAssetImporter(FromWuttaFarm, farmos_importing.model.LandAssetImporter)
} }
class PlantAssetImporter(FromWuttaFarm, farmos_importing.model.PlantAssetImporter):
"""
WuttaFarm farmOS API exporter for Plant Assets
"""
source_model_class = model.PlantAsset
supported_fields = [
"uuid",
"asset_name",
"plant_type_uuids",
"notes",
"archived",
]
def normalize_source_object(self, plant):
return {
"uuid": plant.farmos_uuid or self.app.make_true_uuid(),
"asset_name": plant.asset_name,
"plant_type_uuids": [t.plant_type.farmos_uuid for t in plant._plant_types],
"notes": plant.notes,
"archived": plant.archived,
"_src_object": plant,
}
class StructureAssetImporter( class StructureAssetImporter(
FromWuttaFarm, farmos_importing.model.StructureAssetImporter FromWuttaFarm, farmos_importing.model.StructureAssetImporter
): ):

View file

@ -183,8 +183,17 @@ class PlantAssetView(AssetMasterView):
plant = f.model_instance plant = f.model_instance
# plant_types # plant_types
if self.creating or self.editing:
f.remove("plant_types") # TODO: add support for this
else:
f.set_node("plant_types", PlantTypeRefs(self.request)) f.set_node("plant_types", PlantTypeRefs(self.request))
f.set_default("plant_types", [t.plant_type_uuid for t in plant._plant_types]) f.set_default(
"plant_types", [t.plant_type_uuid for t in plant._plant_types]
)
# season
if self.creating or self.editing:
f.remove("season") # TODO: add support for this
def defaults(config, **kwargs): def defaults(config, **kwargs):