diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-10-28 23:23:26 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:20:59 +0100 |
commit | db6f3f2152bfb480915a63ae04e88f2979d23341 (patch) | |
tree | 5632d4e651df050c97c33574327e40448cdcd721 /ishtar_common/admin.py | |
parent | 183c1422d978e2b1cbb1d47e0a024dcee57ae3f9 (diff) | |
download | Ishtar-db6f3f2152bfb480915a63ae04e88f2979d23341.tar.bz2 Ishtar-db6f3f2152bfb480915a63ae04e88f2979d23341.zip |
Syndication - search interface
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: |