diff --git a/konova/models/geometry.py b/konova/models/geometry.py index 43c94368..081757c1 100644 --- a/konova/models/geometry.py +++ b/konova/models/geometry.py @@ -132,9 +132,9 @@ class Geometry(BaseResource): lock_id = f"parcel_calc-lock-{flr_id}" with cache_lock(lock_id) as acquired: while not acquired: - print(f"Am locked. Need to rest. Calculating: {parcel_properties}") sleep(0.5) acquired = cache_lock(lock_id) + district = District.objects.get_or_create( key=parcel_properties["kreisschl"], name=parcel_properties["kreis"], diff --git a/konova/utils/wfs/spatial.py b/konova/utils/wfs/spatial.py index e6cae847..1c7367f0 100644 --- a/konova/utils/wfs/spatial.py +++ b/konova/utils/wfs/spatial.py @@ -86,13 +86,14 @@ class ParcelWFSFetcher(AbstractWFSFetcher): from konova.models import Geometry if filter_srid is None: filter_srid = DEFAULT_SRID_RLP - geom_gml = Geometry.objects.filter( + geom = Geometry.objects.filter( id=self.geometry_id ).annotate( transformed=Transform(srid=filter_srid, expression="geom") ).annotate( gml=AsGML(MakeValid('transformed')) - ).first().gml + ).first() + geom_gml = geom.gml spatial_filter = f"<{geometry_operation}>{self.geometry_property_name}{geom_gml}" return spatial_filter @@ -163,7 +164,28 @@ class ParcelWFSFetcher(AbstractWFSFetcher): if rerun_on_exception: # Wait a second before another try sleep(1) - self.get_features( + return self.get_features( + typenames, + spatial_operator, + filter_srid, + start_index, + rerun_on_exception=False + ) + else: + e.msg += content + raise e + + try: + fetched_features = content.get( + "features", + {}, + ) + except AttributeError as e: + # Might occur if returned content is no json but something different (maybe an error message) + if rerun_on_exception: + # Wait a second before another try + sleep(1) + return self.get_features( typenames, spatial_operator, filter_srid, @@ -173,10 +195,6 @@ class ParcelWFSFetcher(AbstractWFSFetcher): else: e.msg += content raise e - fetched_features = content.get( - "features", - {}, - ) found_features += fetched_features @@ -187,4 +205,7 @@ class ParcelWFSFetcher(AbstractWFSFetcher): # If a 'full' response returned, there might be more to fetch. Increase the start_index! start_index += self.count + if not found_features: + print(f"No features found. Fetched content: {content}\nUsed POST body: {post_body}") + return found_features