summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2026-05-18 18:32:26 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2026-05-18 18:32:26 +0200
commitdaf76f988a5327cc9ed6c9dbceb3c6886a75e93a (patch)
treebbe4e5252fd0354088efc1416963891af415b9ce
parenta8634208215a0b7ac2e163086453a4d262a5256f (diff)
downloadIshtar-daf76f988a5327cc9ed6c9dbceb3c6886a75e93a.tar.bz2
Ishtar-daf76f988a5327cc9ed6c9dbceb3c6886a75e93a.zip
🐛 GIS API more explicit error on importer configuration errordevelop-5.0
-rw-r--r--ishtar_common/views_item.py43
1 files changed, 29 insertions, 14 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 03120ccda..ccc514070 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -36,7 +36,8 @@ from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.contrib.gis.geos import GEOSException
from django.core.cache import cache
-from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, PermissionDenied
+from django.core.exceptions import FieldDoesNotExist, FieldError, ObjectDoesNotExist,\
+ PermissionDenied
from django.db.models import (
F,
Q,
@@ -1942,7 +1943,8 @@ def _format_geojson(rows, link_template, display_polygon):
def _get_data_from_query(items, query_table_cols, extra_request_keys,
- geo_fields=None, geo_import_key=None, geo_type=None, q_slice=None):
+ geo_fields=None, geo_import_key=None, geo_type=None,
+ q_slice=None):
# TODO: manage data json field
for query_keys in query_table_cols:
if not isinstance(query_keys, (tuple, list)):
@@ -1982,10 +1984,15 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys,
values.append("locked")
values.append("lock_user_id")
values = [v for v in values if v] # filter empty values
- if q_slice:
- result = items[q_slice[0]:q_slice[1]].values_list(*values)
- else:
- result = items.values_list(*values)
+ try:
+ if q_slice:
+ result = items[q_slice[0]:q_slice[1]].values_list(*values)
+ else:
+ result = items.values_list(*values)
+ except FieldError as e:
+ error = str(e)[:100] + " (...)"
+ error = str(_("Importer configuration error: {}.")).format(error)
+ raise ValueError(error)
if not geo_import_key and not geo_type:
return result
@@ -3305,15 +3312,23 @@ def get_item(
geo_fields = query_table_cols[-4:]
else:
geo_fields = query_table_cols[-2:]
- datas = _get_data_from_query(
- items, query_table_cols, my_extra_request_keys,
- geo_fields=geo_fields, q_slice=q_slice
- )
+ try:
+ datas = _get_data_from_query(
+ items, query_table_cols, my_extra_request_keys,
+ geo_fields=geo_fields, q_slice=q_slice
+ )
+ except ValueError as e:
+ data = json.dumps({"error": str(e)})
+ return HttpResponse(data, content_type="application/json")
elif data_type != "csv" and getattr(model, "NEW_QUERY_ENGINE", False):
- datas = _get_data_from_query(
- items, query_table_cols, my_extra_request_keys,
- geo_import_key=geo_import_key, geo_type=geo_type, q_slice=q_slice,
- )
+ try:
+ datas = _get_data_from_query(
+ items, query_table_cols, my_extra_request_keys,
+ geo_import_key=geo_import_key, geo_type=geo_type, q_slice=q_slice,
+ )
+ except ValueError as e:
+ data = json.dumps({"error": str(e)})
+ return HttpResponse(data, content_type="application/json")
else:
if q_slice:
items = items[q_slice[0]:q_slice[1]]