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)  | 
