X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/98b2c09ef1f1c8288a31517f61423264c6b3291c..ce3795b6c4f878c496b4d46193e3379f8efb077b:/src/contact/admin.py diff --git a/src/contact/admin.py b/src/contact/admin.py index af14c6b02..cf8d06cd0 100644 --- a/src/contact/admin.py +++ b/src/contact/admin.py @@ -1,11 +1,13 @@ -# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# import csv import json from django.contrib import admin from django.utils.translation import ugettext as _ from django.utils.safestring import mark_safe -from django.conf.urls import patterns, url +from django.conf.urls import url from django.http import HttpResponse, Http404 from wolnelektury.utils import UnicodeCSVWriter @@ -20,8 +22,7 @@ class ContactAdminMeta(admin.ModelAdmin.__class__): raise AttributeError(name) -class ContactAdmin(admin.ModelAdmin): - __metaclass__ = ContactAdminMeta +class ContactAdmin(admin.ModelAdmin, metaclass=ContactAdminMeta): date_hierarchy = 'created_at' list_display = ['created_at', 'contact', 'form_tag'] + \ ["admin_list_%d" % i for i in range(admin_list_width)] @@ -36,7 +37,7 @@ class ContactAdmin(admin.ModelAdmin): except BaseException: return '' else: - return Contact.pretty_print(obj.body.get(field_name, ''), for_html=True) + return Contact.pretty_print(obj.get_body_json().get(field_name, ''), for_html=True) def __getattr__(self, name): if name.startswith('admin_list_'): @@ -48,13 +49,14 @@ class ContactAdmin(admin.ModelAdmin): if object_id: try: instance = Contact.objects.get(pk=object_id) - assert isinstance(instance.body, dict) + body = instance.get_body_json() + assert isinstance(body, dict) except (Contact.DoesNotExist, AssertionError): pass else: # Create readonly fields from the body JSON. attachments = list(instance.attachment_set.all()) - body_keys = instance.body.keys() + [a.tag for a in attachments] + body_keys = body.keys() + [a.tag for a in attachments] # Find the original form. try: @@ -82,7 +84,7 @@ class ContactAdmin(admin.ModelAdmin): f.short_description = orig_fields[key].label if key in orig_fields else _(key) setattr(self, "body__%s" % key, f) - for k, v in instance.body.items(): + for k, v in body.items(): attach_getter(k, Contact.pretty_print(v, for_html=True)) download_link = "%(url)s" @@ -104,12 +106,10 @@ class ContactAdmin(admin.ModelAdmin): return super(ContactAdmin, self).changelist_view(request, extra_context=context) def get_urls(self): - # urls = super(ContactAdmin, self).get_urls() - return patterns( - '', + return [ url(r'^extract/(?P[\w-]+)/(?P[\w-]+)/$', self.admin_site.admin_view(extract_view), name='contact_extract') - ) + super(ContactAdmin, self).get_urls() + ] + super(ContactAdmin, self).get_urls() def extract_view(request, form_tag, extract_type_slug): @@ -135,7 +135,7 @@ def extract_view(request, form_tag, extract_type_slug): if extract_type_slug == 'contacts': keys = ['contact'] elif extract_type_slug == 'all': - keys = contact.body.keys() + ['contact'] + keys = contact.get_body_json().keys() + ['contact'] keys = [key for key in orig_keys if key in keys] + [key for key in keys if key not in orig_keys] else: keys = form.get_extract_fields(contact, extract_type_slug) @@ -151,7 +151,7 @@ def extract_view(request, form_tag, extract_type_slug): if extract_type_slug == 'contacts': records = [dict(contact=contact.contact)] elif extract_type_slug == 'all': - records = [dict(contact=contact.contact, **contact.body)] + records = [dict(contact=contact.contact, **contact.get_body_json())] else: records = form.get_extract_records(keys, contact, extract_type_slug) @@ -159,11 +159,11 @@ def extract_view(request, form_tag, extract_type_slug): for key in keys: if key not in record: record[key] = '' - if isinstance(record[key], basestring): + if isinstance(record[key], str): pass elif isinstance(record[key], bool): record[key] = 'tak' if record[key] else 'nie' - elif isinstance(record[key], (list, tuple)) and all(isinstance(v, basestring) for v in record[key]): + elif isinstance(record[key], (list, tuple)) and all(isinstance(v, str) for v in record[key]): record[key] = ', '.join(record[key]) else: record[key] = json.dumps(record[key])