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 | |
| parent | 1a4606529b2a67ffc21f299fe218492888a5347d (diff) | |
| download | Ishtar-2ae9416836be2d8c3f8e27803b49a415f1202144.tar.bz2 Ishtar-2ae9416836be2d8c3f8e27803b49a415f1202144.zip  | |
Syndication - translate queries before passing them to external source
| -rw-r--r-- | ishtar_common/admin.py | 4 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 24 | ||||
| -rw-r--r-- | ishtar_common/wizards.py | 2 | 
3 files changed, 27 insertions, 3 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index daee5d521..bb8daa372 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -2338,10 +2338,10 @@ class ApiKeyMatchAdmin(admin.ModelAdmin):          "source",          "search_model",          "associated_type", -        "distant_slug", -        "distant_label",          "local_slug",          "local_label", +        "distant_slug", +        "distant_label",          "do_not_match",      ]      list_filter = ["source", "do_not_match"] 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, diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 80054ca0c..5f3606a5e 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -121,7 +121,7 @@ class IshtarWizard(NamedUrlWizardView):          )          if (              self.model -            and hasattr(form, "field") +            and hasattr(form, "fields")              and "pk" in form.fields              and self.request.session.get("EXTERNAL_SOURCES", {})          ):  | 
