diff options
Diffstat (limited to 'ishtar_common/admin.py')
| -rw-r--r-- | ishtar_common/admin.py | 106 | 
1 files changed, 61 insertions, 45 deletions
| diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index b1f32620c..94306f6b6 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -2126,13 +2126,12 @@ class ApiSearchModelAdmin(admin.ModelAdmin):  admin_site.register(models.ApiSearchModel, ApiSearchModelAdmin) -def send_error_message(request, msg, return_url, message_type=messages.ERROR): +def send_error_message(request, msg, message_type=messages.ERROR):      messages.add_message(          request,          message_type,          msg,      ) -    return HttpResponseRedirect(return_url)  def update_types_from_source(modeladmin, request, queryset): @@ -2145,74 +2144,90 @@ def update_types_from_source(modeladmin, request, queryset):          + urllib.parse.urlencode(request.GET)      )      if queryset.count() != 1: -        return send_error_message( +        send_error_message(              request,              str(_("Select only one source.")), -            return_url,              message_type=messages.WARNING,          ) +        return HttpResponseRedirect(return_url)      source = queryset.all()[0] -    try: -        response = requests.get( -            source.url, -            timeout=20, -            headers={"Authorization": f"access_token {source.key}"}, -        ) -    except requests.exceptions.Timeout: -        return send_error_message( -            request, -            str(_("Timeout: failed to join {}.")).format(source.url), -            return_url, -        ) -    if response.status_code != 200: -        return send_error_message( -            request, -            str( -                _( -                    "Bad response for {}. Response status code {} != 200. Check your key?" -                ) -            ).format(source.name, response.status_code), -            return_url, -        ) -    try: -        content = response.json() -    except ValueError: -        return send_error_message( -            request, -            str(_("Response of {} is not a valid JSON message.")).format(source.url), -            return_url, -        ) -    result = source.update_matches(content) -    if result.get("created", None): +    created, updated, deleted = 0, 0, 0 +    missing_models, missing_types = [], [] +    for item_type in ("operation",): +        curl = source.url +        if not curl.endswith("/"): +            curl += "/" +        curl += f"api/facets/{item_type}/" +        try: +            response = requests.get( +                curl, +                timeout=20, +                headers={"Authorization": f"Token {source.key}"}, +            ) +        except requests.exceptions.Timeout: +            send_error_message( +                request, +                str(_("Timeout: failed to join {}.")).format(curl), +            ) +            continue +        if response.status_code != 200: +            send_error_message( +                request, +                str( +                    _( +                        "Bad response for {} - {}. Response status code {} != 200. Check your key?" +                    ) +                ).format(source.name, curl, response.status_code), +            ) +            continue +        try: +            content = response.json() +        except ValueError: +            send_error_message( +                request, +                str(_("Response of {} is not a valid JSON message.")).format(curl), +                return_url, +            ) +            continue +        result = source.update_matches(content) +        if result.get("created", None): +            created += result['created'] +        if result.get("updated", None): +            updated += result['updated'] +        if result.get("search_model do not exist", None): +            missing_models += result["search_model do not exist"] +        if result.get("type do not exist", None): +            missing_types += result["type do not exist"] +    if created:          messages.add_message(              request,              messages.INFO, -            str(_(f"{result['created']} matches created")), +            str(_(f"{created} matches created")),          ) -    if result.get("updated", None): +    if updated:          messages.add_message(              request,              messages.INFO, -            str(_(f"{result['updated']} matches updated")), +            str(_(f"{updated} matches updated")),          ) -    if result.get("deleted", None): +    if deleted:          messages.add_message(              request,              messages.INFO,              str(_(f"{result['deleted']} matches deleted")),          ) -    if result.get("search_model do not exist", None): -        missing_search_models = ", ".join(result["search_model do not exist"]) +    if missing_models: +        missing_models = ", ".join(missing_models)          messages.add_message(              request,              messages.INFO,              str(                  _( -                    f"Theses search models have not been found: {missing_search_models}. Not the same Ishtar version?" +                    f"Theses search models have not been found: {missing_models}. Not the same Ishtar version?"                  )              ),          ) -    if result.get("type do not exist", None): +    if missing_types:          missing_types = ", ".join(result["type do not exist"])          messages.add_message(              request, @@ -2239,12 +2254,13 @@ def generate_match_document(modeladmin, request, queryset):          + urllib.parse.urlencode(request.GET)      )      if queryset.count() != 1: -        return send_error_message( +        send_error_message(              request,              str(_("Select only one source.")),              return_url,              message_type=messages.WARNING,          ) +        return HttpResponseRedirect(return_url)      src_doc = queryset.all()[0].generate_match_document()      in_memory = BytesIO()      with open(src_doc, "rb") as fle: | 
