mgaitan / preciosa

Inteligencia colectiva contra la inflación
http://preciosdeargentina.com.ar
Other
68 stars 40 forks source link

[Bug] error Unicode con subiendo fotos con caracteres no ascii #228

Closed mgaitan closed 10 years ago

mgaitan commented 10 years ago

Via admin se adjunta una imágen con caracteres especiales (por ejemplo costeño700.jpg) y falla.

Environment:

Request Method: POST
Request URL: http://107.170.28.160/admin/precios/producto/add/

Django Version: 1.6.2
Python Version: 2.7.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.gis',
 'django.contrib.messages',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'django.contrib.flatpages',
 'bootstrapform',
 'pinax_theme_bootstrap',
 'pinax_theme_bootstrap_account',
 'annoying',
 'account',
 'metron',
 'eventlog',
 'treebeard',
 'django_extensions',
 'cities_light',
 'autocomplete_light',
 'easy_thumbnails',
 'image_cropping',
 'floppyforms',
 'djorm_pgtrgm',
 'feedback',
 'analytical',
 'south',
 'dbbackup',
 'django_nose',
 'rest_framework',
 'rest_framework.authtoken',
 'corsheaders',
 'radpress',
 'imperavi',
 'sorl.thumbnail',
 'newsletter',
 'preciosa',
 'preciosa.precios',
 'preciosa.voluntarios',
 'preciosa.datos',
 'preciosa.acuerdos',
 'preciosa.api',
 'preciosa.flatpagex',
 'django_pdb']
Installed Middleware:
['django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
 'corsheaders.middleware.CorsMiddleware']

Traceback:
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
  432.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  52.         response = view_func(request, *args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
  198.             return view(request, *args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
  25.                 return func(self, *args2, **kwargs2)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/transaction.py" in inner
  339.                 return func(*args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
  1131.                 self.save_model(request, new_object, form, False)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in save_model
  860.         obj.save()
File "/projects/preciosa/preciosa/precios/models.py" in save
  158.         super(Producto, self).save(*args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/base.py" in save
  545.                        force_update=force_update, update_fields=update_fields)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/base.py" in save_base
  573.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/base.py" in _save_table
  654.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/base.py" in _do_insert
  687.                                using=using, raw=raw)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/manager.py" in _insert
  232.         return insert_query(self.model, objs, fields, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/query.py" in insert_query
  1511.     return query.get_compiler(using=using).execute_sql(return_id)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  898.         for sql, params in self.as_sql():
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in as_sql
  856.                 for obj in self.query.objs
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/fields/files.py" in pre_save
  252.             file.save(file.name, file, save=False)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/easy_thumbnails/files.py" in save
  626.                                                     **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/easy_thumbnails/files.py" in save
  546.         super(ThumbnailerFieldFile, self).save(name, content, *args, **kwargs)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/db/models/fields/files.py" in save
  86.         self.name = self.storage.save(name, content)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/core/files/storage.py" in save
  48.         name = self.get_available_name(name)
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/core/files/storage.py" in get_available_name
  74.         while self.exists(name):
File "/virtualenvs/preciosa/local/lib/python2.7/site-packages/django/core/files/storage.py" in exists
  245.         return os.path.exists(self.path(name))
File "/virtualenvs/preciosa/lib/python2.7/genericpath.py" in exists
  18.         os.stat(path)

Exception Type: UnicodeEncodeError at /admin/precios/producto/add/
Exception Value: 'ascii' codec can't encode character u'\xf1' in position 60: ordinal not in range(128)
mgaitan commented 10 years ago

En el script de arranque init_internal_service.sh (que se demoniza con supervisor) agregué

export LANG=en_US.UTF-8, LC_ALL=en_US.UTF-8, LC_LANG=en_US.UTF-8

antes de

exec gunicorn preciosa.wsgi:application -w $NUM_WORKERS -t $TIMEOUT_WORKERS -b $BIND_DIR \
    --user=$USER --group=$GROUP --log-level=debug \
        --log-file=$LOGFILE  2>&1