-# -*- 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
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)]
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_'):
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 = list(body.keys()) + [a.tag for a in attachments]
# Find the original form.
try:
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 = "<a href='%(url)s'>%(url)s</a>"
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<form_tag>[\w-]+)/(?P<extract_type_slug>[\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):
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)
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)
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])