summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py54
1 files changed, 51 insertions, 3 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 59dc99f15..8124bbeed 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -2218,10 +2218,58 @@ def update_types_from_source(modeladmin, request, queryset):
return response
-class ApiExternalSource(admin.ModelAdmin):
+def generate_match_document(modeladmin, request, queryset):
+ return_url = (
+ reverse(
+ "admin:%s_%s_changelist"
+ % (modeladmin.model._meta.app_label, modeladmin.model._meta.model_name)
+ )
+ + "?"
+ + urllib.parse.urlencode(request.GET)
+ )
+ if queryset.count() != 1:
+ return send_error_message(
+ request,
+ str(_("Select only one source.")),
+ return_url,
+ message_type=messages.WARNING,
+ )
+ src_doc = queryset.all()[0].generate_match_document()
+ in_memory = BytesIO()
+ with open(src_doc, "rb") as fle:
+ in_memory.write(fle.read())
+ filename = src_doc.split(os.sep)[-1]
+
+ response = HttpResponse(
+ content_type="application/vnd.oasis.opendocument.spreadsheet"
+ )
+ response["Content-Disposition"] = "attachment; filename=%s" % filename.replace(
+ " ", "_"
+ )
+ in_memory.seek(0)
+ response.write(in_memory.read())
+ return response
+
+
+class ApiExternalSourceAdmin(admin.ModelAdmin):
model = models_rest.ApiExternalSource
- actions = [update_types_from_source]
+ actions = [update_types_from_source, generate_match_document]
list_display = ("name", "url", "key")
-admin_site.register(models_rest.ApiExternalSource, ApiExternalSource)
+admin_site.register(models_rest.ApiExternalSource, ApiExternalSourceAdmin)
+
+
+class ApiKeyMatchAdmin(admin.ModelAdmin):
+ model = models_rest.ApiKeyMatch
+ list_display = ["source", "search_model", "associated_type",
+ "distant_slug", "distant_label", "local_slug",
+ "local_label", "do_not_match"]
+ list_filter = ["source", "do_not_match"]
+ search_fields = ["associated_type__model", "distant_slug", "distant_label"]
+ actions = [
+ change_value("do_not_match", False, _("Enable match")),
+ change_value("do_not_match", True, _("Disable match")),
+ ]
+
+admin_site.register(models_rest.ApiKeyMatch, ApiKeyMatchAdmin)