summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-02-27 20:44:52 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-06-17 13:21:27 +0200
commit86c03a98d11e93880b4568776e0939113a92a707 (patch)
treee07ad2e91e2544f7b2d61e8f3f653fdda26bfd52 /ishtar_common/admin.py
parent52f442699a72ff5d0341a7d15d5b966a3cc2bd60 (diff)
downloadIshtar-86c03a98d11e93880b4568776e0939113a92a707.tar.bz2
Ishtar-86c03a98d11e93880b4568776e0939113a92a707.zip
Migrate to python 3 - Clean old migrations and some old scripts
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py84
1 files changed, 40 insertions, 44 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 3a7ea4a12..d439c9c67 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -19,6 +19,7 @@
import csv
import json
+from io import TextIOWrapper
import os
import shutil
import tempfile
@@ -100,7 +101,7 @@ def change_value(attribute, value, description):
'admin:%s_%s_changelist' % (
modeladmin.model._meta.app_label,
modeladmin.model._meta.model_name)
- ) + '?' + urllib.urlencode(request.GET)
+ ) + '?' + urllib.parse.urlencode(request.GET)
return HttpResponseRedirect(url)
_change_value.short_description = description
_change_value.__name__ = str(slugify(description))
@@ -130,7 +131,7 @@ def export_as_csv_action(description=_(u"Export selected as CSV file"),
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s.csv' % \
- unicode(opts).replace('.', '_')
+ str(opts).replace('.', '_')
writer = csv.writer(response)
if header:
@@ -146,7 +147,7 @@ def export_as_csv_action(description=_(u"Export selected as CSV file"),
elif value is None:
value = ""
else:
- value = unicode(value).encode("utf-8", "replace")
+ value = str(value)
row.append(value)
writer.writerow(row)
@@ -343,7 +344,9 @@ class ImportActionAdmin(admin.ModelAdmin):
if 'apply' in request.POST:
form = ImportGenericForm(request.POST, request.FILES)
if form.is_valid():
- csv_file = request.FILES['csv_file']
+ encoding = request.encoding or 'utf-8'
+ csv_file = TextIOWrapper(request.FILES['csv_file'].file,
+ encoding=encoding)
reader = csv.DictReader(csv_file)
created, updated, missing_parent = 0, 0, []
for row in reader:
@@ -355,9 +358,9 @@ class ImportActionAdmin(admin.ModelAdmin):
if not slug_col:
self.message_user(
request,
- unicode(_(u"The CSV file should at least have a "
- u"{} column")).format(
- u"/".join(self.import_keys)))
+ str(_("The CSV file should at least have a "
+ "{} column")).format(
+ "/".join(self.import_keys)))
return
slug = row.pop(slug_col)
if 'id' in row:
@@ -376,8 +379,6 @@ class ImportActionAdmin(admin.ModelAdmin):
if isinstance(field, CharField):
if not value:
value = u""
- else:
- value = value.decode('utf-8')
if isinstance(field, IntegerField):
if not value:
value = None
@@ -422,17 +423,16 @@ class ImportActionAdmin(admin.ModelAdmin):
if created:
self.message_user(
request,
- unicode(_(u"%d item(s) created.")) % created)
+ str(_("%d item(s) created.")) % created)
if updated:
self.message_user(
request,
- unicode(_(u"%d item(s) updated.")) % updated)
+ str(_("%d item(s) updated.")) % updated)
if missing_parent:
self.message_user(
request,
- unicode(_(u"These parents are missing: {}")).format(
- u" ; ".join(missing_parent)
- ))
+ str(_("These parents are missing: {}")).format(
+ " ; ".join(missing_parent)))
url = reverse(
'admin:%s_%s_changelist' % (
self.model._meta.app_label, self.model._meta.model_name)
@@ -490,8 +490,8 @@ class ImportGEOJSONActionAdmin(object):
if key in feature:
continue
if trace_error:
- error = unicode(
- _(u"\"{}\" not found in feature {}")
+ error = str(
+ _("\"{}\" not found in feature {}")
).format(key, idx)
self.message_user(request, error, level=messages.ERROR)
return False
@@ -505,8 +505,8 @@ class ImportGEOJSONActionAdmin(object):
continue
if keys[key] not in feature['properties']:
if trace_error:
- error = unicode(
- _(u"\"{}\" not found in properties of feature {}")
+ error = str(
+ _("\"{}\" not found in properties of feature {}")
).format(keys[key], idx)
self.message_user(request, error,
level=messages.ERROR)
@@ -519,8 +519,8 @@ class ImportGEOJSONActionAdmin(object):
geom = GEOSGeometry(json.dumps(feature['geometry']))
except (GEOSException, GDALException):
if trace_error:
- error = unicode(
- _(u"Bad geometry for feature {}")
+ error = str(
+ _("Bad geometry for feature {}")
).format(idx)
self.message_user(request, error,
level=messages.ERROR)
@@ -533,8 +533,8 @@ class ImportGEOJSONActionAdmin(object):
values['limit'] = MultiPolygon(geom)
else:
if trace_error:
- error = unicode(
- _(u"Geometry {} not managed for towns - feature {}")
+ error = str(
+ _("Geometry {} not managed for towns - feature {}")
).format(geom.geom_type, idx)
self.message_user(request, error,
level=messages.ERROR)
@@ -545,8 +545,8 @@ class ImportGEOJSONActionAdmin(object):
values['surface'])
except ValueError:
if trace_error:
- error = unicode(
- _(u"Bad value for surface: {} - feature {}")
+ error = str(
+ _("Bad value for surface: {} - feature {}")
).format(values['surface'], idx)
self.message_user(request, error,
level=messages.ERROR)
@@ -660,15 +660,16 @@ class ImportGEOJSONActionAdmin(object):
if created:
self.message_user(
request,
- unicode(_(u"%d item(s) created.")) % created)
+ str(_("%d item(s) created.")) % created)
if updated:
self.message_user(
request,
- unicode(_(u"%d item(s) updated.")) % updated)
+ str(_("%d item(s) updated.")) % updated)
self.import_geojson_clean(tempdir)
url = reverse(
'admin:%s_%s_changelist' % (
- self.model._meta.app_label, self.model._meta.model_name)
+ self.model._meta.app_label,
+ self.model._meta.model_name)
)
return HttpResponseRedirect(url)
if not form:
@@ -921,17 +922,17 @@ def duplicate_importertype(modeladmin, request, queryset):
tg.pk = None # create new
tg.column = col
tg.save()
- res.append(unicode(obj))
+ res.append(str(obj))
messages.add_message(
request, messages.INFO,
- unicode(_(u"{} importer type(s) duplicated: {}.")).format(
+ str(_("{} importer type(s) duplicated: {}.")).format(
queryset.count(), u" ; ".join(res))
)
url = reverse(
'admin:%s_%s_changelist' % (
modeladmin.model._meta.app_label,
modeladmin.model._meta.model_name)
- ) + '?' + urllib.urlencode(request.GET)
+ ) + '?' + urllib.parse.urlencode(request.GET)
return HttpResponseRedirect(url)
@@ -984,17 +985,17 @@ def duplicate_importercolumn(modeladmin, request, queryset):
tg.pk = None # create new
tg.column = col
tg.save()
- res.append(unicode(col))
+ res.append(str(col))
messages.add_message(
request, messages.INFO,
- unicode(_(u"{} importer column(s) duplicated: {}.")).format(
+ str(_("{} importer column(s) duplicated: {}.")).format(
queryset.count(), u" ; ".join(res))
)
url = reverse(
'admin:%s_%s_changelist' % (
modeladmin.model._meta.app_label,
modeladmin.model._meta.model_name)
- ) + '?' + urllib.urlencode(request.GET)
+ ) + '?' + urllib.parse.urlencode(request.GET)
return HttpResponseRedirect(url)
@@ -1012,15 +1013,13 @@ def shift_right(modeladmin, request, queryset):
col.save()
messages.add_message(
request, messages.INFO,
- unicode(_(u"{} importer column(s) right-shifted.")).format(
- queryset.count())
+ str(_("{} importer column(s) right-shifted.")).format(queryset.count())
)
url = reverse(
'admin:%s_%s_changelist' % (
modeladmin.model._meta.app_label,
modeladmin.model._meta.model_name)
- ) + '?' + urllib.urlencode(request.GET)
- # for Python 3, use urllib.parse.urlencode
+ ) + '?' + urllib.parse.urlencode(request.GET)
return HttpResponseRedirect(url)
@@ -1049,22 +1048,19 @@ def shift_left(modeladmin, request, queryset):
if oks:
messages.add_message(
request, messages.INFO,
- unicode(_(u"{} importer column(s) left-shifted.")).format(
- oks)
+ str(_("{} importer column(s) left-shifted.")).format(oks)
)
if errors:
messages.add_message(
request, messages.ERROR,
- unicode(_(u"{} importer column(s) not left-shifted: no "
- u"place available.")).format(
- errors)
+ str(_("{} importer column(s) not left-shifted: no "
+ "place available.")).format(errors)
)
url = reverse(
'admin:%s_%s_changelist' % (
modeladmin.model._meta.app_label,
modeladmin.model._meta.model_name)
- ) + '?' + urllib.urlencode(request.GET)
- # for Python 3, use urllib.parse.urlencode
+ ) + '?' + urllib.parse.urlencode(request.GET)
return HttpResponseRedirect(url)