From 43eb598d3f457fefa52bbf0b810974e3c56e60ce Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Wed, 3 Dec 2025 13:38:13 +0100 Subject: [PATCH 1/2] # HOTFIX: empty geometry save * fixes a bug where the saving of an empty geometry could lead into a json decode error --- konova/forms/geometry_form.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/konova/forms/geometry_form.py b/konova/forms/geometry_form.py index f5143509..04d13b06 100644 --- a/konova/forms/geometry_form.py +++ b/konova/forms/geometry_form.py @@ -54,7 +54,7 @@ class SimpleGeomForm(BaseForm): geom = json.dumps(geojson) except AttributeError: # If no geometry exists for this form, we simply set the value to None and zoom to the maximum level - geom = "" + geom = json.dumps({}) self.empty = True self.initialize_form_field("output", geom) -- 2.47.2 From fbde03caecede9ddc1439610f468c2b95ceb3a34 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Wed, 3 Dec 2025 13:48:58 +0100 Subject: [PATCH 2/2] # Optimization * optimizes logic in case of empty geometry by dropping redundant pre-check on emptiness --- konova/forms/geometry_form.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/konova/forms/geometry_form.py b/konova/forms/geometry_form.py index 04d13b06..cc4fcaf5 100644 --- a/konova/forms/geometry_form.py +++ b/konova/forms/geometry_form.py @@ -72,20 +72,12 @@ class SimpleGeomForm(BaseForm): self.initialize_form_field("output", json.dumps(submitted_data)) # Get geojson from form for validity checking - geom = self.data.get("output", None) - geom_is_empty = geom is None or len(geom) == 0 - if geom_is_empty: - # If no geometry has been submitted, we create an empty geometry object since - # an empty geometry is a valid geometry - self.cleaned_data["output"] = MultiPolygon(srid=DEFAULT_SRID_RLP).ewkt - return is_valid + geom = self.data.get("output", json.dumps({})) + geom = json.loads(geom) # Initialize features list with empty MultiPolygon, so that an empty input will result in a # proper empty MultiPolygon object features = [] - - # Prepare geometry for validity checks (create iterable dict) - geom = json.loads(geom) features_json = geom.get("features", []) accepted_ogr_types = [ "Polygon", @@ -141,6 +133,7 @@ class SimpleGeomForm(BaseForm): if features: form_geom = MultiPolygon(*features, srid=DEFAULT_SRID_RLP).unary_union else: + # If no features have been processed, this indicates an empty geometry - so we store an empty geometry form_geom = MultiPolygon(srid=DEFAULT_SRID_RLP) # Make sure to convert into a MultiPolygon. Relevant if a single Polygon is provided. -- 2.47.2