diff options
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) | 
