From 2ae9416836be2d8c3f8e27803b49a415f1202144 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 2 Dec 2021 17:05:24 +0100 Subject: Syndication - translate queries before passing them to external source --- ishtar_common/views_item.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'ishtar_common/views_item.py') diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 468312046..242e57b2a 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -2408,11 +2408,35 @@ def get_distant_item( return HttpResponse("{}", content_type="text/plain") url = src.url url += reverse(f"api-search-{model}") + params = {k: v for k, v in dict(request.GET).items() if not k.startswith("columns")} params["submited"] = 1 params["data_type"] = "json" if data_type: params["data_type"] = data_type + if "search_vector" in params and params["search_vector"]: + search_vector = params["search_vector"][0] + match = RE_FACET.search(search_vector) + final_search_vector = "" + while match: + key, value, __ = match.groups() + q = models_rest.ApiKeyMatch.objects.filter( + source=src, + search_model__model__iexact=model, + search_keys__contains=[key], + local_label=value + ) + up, down = match.span() + if q.count(): + api_key = q.all()[0] + final_search_vector += search_vector[0:up] + final_search_vector += f'{key}="{api_key.distant_label}" ' + else: + final_search_vector += search_vector[0:down] + " " + search_vector = search_vector[down:] + match = RE_FACET.search(search_vector) + final_search_vector += search_vector + params["search_vector"] = [final_search_vector] try: response = requests.get( url, -- cgit v1.2.3