diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-12-02 17:05:24 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:20:59 +0100 |
commit | 2ae9416836be2d8c3f8e27803b49a415f1202144 (patch) | |
tree | e142adcdc5c488f4947a3eca57fd05e404fa28b0 /ishtar_common/views_item.py | |
parent | 1a4606529b2a67ffc21f299fe218492888a5347d (diff) | |
download | Ishtar-2ae9416836be2d8c3f8e27803b49a415f1202144.tar.bz2 Ishtar-2ae9416836be2d8c3f8e27803b49a415f1202144.zip |
Syndication - translate queries before passing them to external source
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r-- | ishtar_common/views_item.py | 24 |
1 files changed, 24 insertions, 0 deletions
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, |