diff options
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 |
commit | 86c03a98d11e93880b4568776e0939113a92a707 (patch) | |
tree | e07ad2e91e2544f7b2d61e8f3f653fdda26bfd52 /ishtar_common/admin.py | |
parent | 52f442699a72ff5d0341a7d15d5b966a3cc2bd60 (diff) | |
download | Ishtar-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.py | 84 |
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) |