diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-10-19 22:19:45 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:20:59 +0100 |
commit | dce7ab14dfb23d953598a92a578b8cb9e0738fff (patch) | |
tree | 19988c86ec4f03874017d54b3ad5a9ec6276a0a4 /ishtar_common/admin.py | |
parent | d15d5ec54c73e657370cc8d4d7e1c1e7e6f40af4 (diff) | |
download | Ishtar-dce7ab14dfb23d953598a92a578b8cb9e0738fff.tar.bz2 Ishtar-dce7ab14dfb23d953598a92a578b8cb9e0738fff.zip |
Syndication - generate libreoffice match document
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) |