Compare commits

...

3 commits

Author SHA1 Message Date
f0fa189bcd bump: version 0.11.0 → 0.11.1 2026-03-21 15:11:36 -05:00
cc4b94a7b8 fix: improve behavior when deleting mirrored record from farmOS
in some cases (maybe just dev?) the record does not exist in farmOS;
if so we should silently ignore.

and there seemed to be a problem with the sequence of events:

- user clicks delete in WF
- record is deleted from WF DB
- delete request sent to farmOS API
- webhook on farmOS side calls back to WF webhook URI

somewhere in there, in practice things seemed to hang after user
clicks delete.  i suppose the thread handling user's request is "tied
up" somehow, such that the webhook receiver can't process that
request?  that doesn't exactly make sense to me, but if we split off
to a separate thread to request the farmOS deletion, things seem to
work okay.  so maybe that idea is more accurate than i'd expect
2026-03-21 15:06:26 -05:00
ca5e1420e4 fix: use correct uuid when processing webhook to delete record 2026-03-21 15:03:06 -05:00
4 changed files with 28 additions and 5 deletions

View file

@ -5,6 +5,13 @@ All notable changes to WuttaFarm will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## v0.11.1 (2026-03-21)
### Fix
- improve behavior when deleting mirrored record from farmOS
- use correct uuid when processing webhook to delete record
## v0.11.0 (2026-03-15)
### Feat

View file

@ -5,7 +5,7 @@ build-backend = "hatchling.build"
[project]
name = "WuttaFarm"
version = "0.11.0"
version = "0.11.1"
description = "Web app to integrate with and extend farmOS"
readme = "README.md"
authors = [

View file

@ -94,8 +94,7 @@ class ChangeProcessor:
return
# delete corresponding record from our app
obj = importer.get_target_object((change.uuid,))
if obj:
if obj := importer.get_target_object((change.farmos_uuid,)):
importer.delete_target_object(obj)
# TODO: this should live elsewhere

View file

@ -23,6 +23,9 @@
Base class for WuttaFarm master views
"""
import threading
import requests
from webhelpers2.html import tags
from wuttaweb.views import MasterView
@ -145,10 +148,24 @@ class WuttaFarmMasterView(MasterView):
# maybe delete from farmOS also
if farmos_uuid:
client = get_farmos_client_for_user(self.request)
# nb. must use separate thread to avoid some kind of race
# condition (?) - seems as though maybe a "boomerang"
# effect is happening; this seems to help anyway
thread = threading.Thread(
target=self.delete_from_farmos, args=(client, farmos_uuid)
)
thread.start()
def delete_from_farmos(self, client, farmos_uuid):
entity_type = self.get_farmos_entity_type()
bundle = self.get_farmos_bundle()
client = get_farmos_client_for_user(self.request)
try:
client.resource.delete(entity_type, bundle, farmos_uuid)
except requests.HTTPError as exc:
# ignore if record not found in farmOS
if exc.response.status_code != 404:
raise
class TaxonomyMasterView(WuttaFarmMasterView):