summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
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
commitdb6f3f2152bfb480915a63ae04e88f2979d23341 (patch)
tree5632d4e651df050c97c33574327e40448cdcd721 /ishtar_common/admin.py
parent183c1422d978e2b1cbb1d47e0a024dcee57ae3f9 (diff)
downloadIshtar-db6f3f2152bfb480915a63ae04e88f2979d23341.tar.bz2
Ishtar-db6f3f2152bfb480915a63ae04e88f2979d23341.zip
Syndication - search interface
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py106
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: