Skip to content

Commit cf4d6ee

Browse files
committed
Speed up /keyvals by fetching only key/value field, return only unique results
1 parent 5183b8f commit cf4d6ee

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/server.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -686,20 +686,23 @@ def get(self):
686686

687687
keyvals = args['tables'] or ""
688688
ret = {}
689+
natsort = lambda s: [int(t) if t.isdigit() else t.lower() for t in re.split(r'(\d+)', s)]
689690
for (idx, keyval) in enumerate(keyvals.split(",")):
690691
try:
691692
table, key_field_name, value_field_name = keyval.split(":")
692693
except:
693694
continue
694695
ret[table] = []
695696
result = data_service.index(
696-
get_identity(), translator, table, None, None, json.dumps(filterexpr[idx]) if filterexpr and len(filterexpr) > idx and filterexpr[idx] else None, None, None
697+
get_identity(), translator, table, None, None, json.dumps(filterexpr[idx]) if filterexpr and len(filterexpr) > idx and filterexpr[idx] else None, None, [key_field_name, value_field_name]
697698
)
698699
if 'feature_collection' in result:
700+
entries = {}
699701
for feature in result['feature_collection']['features']:
700-
record = {"key": feature["id"] if key_field_name == "id" else feature['properties'][key_field_name], "value": str(feature['properties'][value_field_name]).strip()}
701-
ret[table].append(record)
702-
natsort = lambda s: [int(t) if t.isdigit() else t.lower() for t in re.split(r'(\d+)', s)]
702+
key = feature["id"] if key_field_name == "id" else feature['properties'][key_field_name]
703+
value = str(feature['properties'][value_field_name]).strip()
704+
entries[key] = value
705+
ret[table] = [{"key": kv[0], "value": kv[1]} for kv in entries.items()]
703706
ret[table].sort(key=lambda record: natsort(record["value"]))
704707
elif 'error' in result:
705708
app.logger.debug(f"Failed to query relation values for {keyval}: {result['error']}")

0 commit comments

Comments
 (0)