diff options
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 54 |
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) |