Django-compressor: RemovedInDjango31Warning: La configuración FILE_CHARSET está obsoleta

Creado en 2 abr. 2019  ·  10Comentarios  ·  Fuente: django-compressor/django-compressor

Encontré la siguiente advertencia cuando ejecuté una prueba con mi entorno Django.

/path/to/lib/python3.7/site-packages/compressor/filters/base.py:115: RemovedInDjango31Warning: The FILE_CHARSET setting is deprecated. Starting with Django 3.1, all files read from disk must be UTF-8 encoded.
    default_encoding = settings.FILE_CHARSET

Parece que se desaconseja el uso de settings.FILE_CHARSET .

En desuso desde la versión 2.2:
Esta configuración está obsoleta. A partir de Django 3.1, los archivos leídos desde el disco deben estar codificados en UTF-8.

versiones:

  • django 2.2.0
  • compresor django 2.2
bug

Comentario más útil

Parece que cualquier acceso a la propiedad settings.FILE_CHARSET , incluso para probar si se anula, activará la advertencia. Y esto es exactamente lo que hacemos para verificar si necesitamos usar el utf-8 predeterminado

Si queremos mantener la compatibilidad con versiones anteriores, la forma más sencilla es deshabilitar esta advertencia para esta línea específica del código usando algo como esto:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", message="popo popo")
    warnings.warn("popo popo")  # the code that will trigger the warning
# warnings are back to normal filtering from here

Si tal solución le parece bien, puedo proporcionar un PR.

Todos 10 comentarios

La nota de lanzamiento dice:

La configuración FILE_CHARSET está obsoleta. A partir de Django 3.1, los archivos leídos desde el disco deben estar codificados en UTF-8.

¿Es suficiente reemplazar todo settings.FILE_CHARSET en django-compressor por utf-8 para solucionar este problema, tal vez ...?

gracias por informar. reemplazar todas las ocurrencias con utf-8 podría romper las cosas para aquellos que realmente usan esta configuración. la solución adecuada probablemente sería usar la configuración si está presente, y no establecer los parámetros en cuestión si no está presente.

@karyon gracias por tu respuesta. Intenté escribir un parche. Me gustaría que revisara si mi comprensión es correcta.

Esta es la primera vez que envío relaciones públicas a este repositorio y es posible que me haya perdido algo importante. Si encuentra algún problema, hágamelo saber. Gracias de antemano.

arreglado en # 934

El nuevo código parece causar una advertencia muy similar en mi configuración:

  /usr/local/lib/python3.7/site-packages/compressor/filters/base.py:123: RemovedInDjango31Warning: The FILE_CHARSET setting is deprecated. Starting with Django 3.1, all files read from disk must be UTF-8 encoded.
    settings.FILE_CHARSET if settings.is_overridden('FILE_CHARSET') else

con

django-compressor==2.3
Django==2.2.2

Parece que cualquier acceso a la propiedad settings.FILE_CHARSET , incluso para probar si se anula, activará la advertencia. Y esto es exactamente lo que hacemos para verificar si necesitamos usar el utf-8 predeterminado

Si queremos mantener la compatibilidad con versiones anteriores, la forma más sencilla es deshabilitar esta advertencia para esta línea específica del código usando algo como esto:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", message="popo popo")
    warnings.warn("popo popo")  # the code that will trigger the warning
# warnings are back to normal filtering from here

Si tal solución le parece bien, puedo proporcionar un PR.

sí, un PR estaría bien. si es necesario, puede comenzar revirtiendo el PR original :)

Mientras escribía el parche para el PR, descubrí que la advertencia fue provocada por una detección errónea muy extraña de is_overridden('FILE_CHARSET') . Parece que en mi proyecto, mientras que no configuro FILE_CHARSET en mi configuración, is_overridden('FILE_CHARSET') devuelve True.

Pero si pruebo en un proyecto mínimo de django con solo django-compressor instalado -> sin advertencia

Entonces, mi PR de hecho no es necesario: is_overridden('FILE_CHARSET') no debería devolver True, por lo tanto compress() y CompilerFilter() no deberían generar la advertencia. En circunstancias normales.

Incluso la prueba que agregué a la base de código del compresor de django para detectar cualquier regresión en este pb de advertencia, no es tan inútil: django / django @ 3d716467 commit (incluido en django 3.1, que pronto línea de tiempo de desaprobación de django .

El lado positivo de las cosas: probé el compresor de django con el nuevo código de django (aquel en el que FILE_CHARSET y la advertencia asociada ya no salen) y funciona sin ningún problema detectable.

Lo siento por los inconvenientes ocasionados. Creo que puedes cerrar (nuevamente) el problema.

¿Fue útil esta página
0 / 5 - 0 calificaciones