Skip to content

Commit b668ddc

Browse files
committed
fix(AttributeMetadata): metadata extraction for multi-valued and invalid attributes
1 parent c4c3a18 commit b668ddc

1 file changed

Lines changed: 18 additions & 7 deletions

File tree

src/opengeodeweb_back/routes/blueprint_routes.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import time
44
import shutil
5+
import math
56
from typing import Any
67

78
# Third party imports
@@ -267,20 +268,30 @@ def texture_coordinates() -> flask.Response:
267268

268269
def attributes_metadata(manager: og.AttributeManager) -> dict[str, list[float]]:
269270
metadata: dict[str, list[float]] = {}
271+
nb_elements = manager.nb_elements()
270272
for name in manager.attribute_names():
271273
attribute = manager.find_generic_attribute(name)
272274
if not attribute.is_genericable():
273275
metadata[name] = [-1.0, -1.0]
274276
continue
275277
min_value = None
276278
max_value = None
277-
nb_items = attribute.nb_items()
278-
for i in range(nb_items):
279-
generic_value = attribute.generic_value(i)
280-
if min_value is None or generic_value < min_value:
281-
min_value = generic_value
282-
if max_value is None or generic_value > max_value:
283-
max_value = generic_value
279+
for i in range(nb_elements):
280+
if hasattr(attribute, "value"):
281+
val = attribute.value(i)
282+
if isinstance(val, list):
283+
values_to_check = val
284+
else:
285+
values_to_check = [val]
286+
else:
287+
values_to_check = [attribute.generic_value(i)]
288+
289+
for v in values_to_check:
290+
if v is not None and not math.isnan(v):
291+
if min_value is None or v < min_value:
292+
min_value = v
293+
if max_value is None or v > max_value:
294+
max_value = v
284295
metadata[name] = (
285296
[min_value, max_value]
286297
if min_value is not None and max_value is not None

0 commit comments

Comments
 (0)