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:
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.
El compromiso relacionado en Django:
https://github.com/django/django/commit/0cd465b63aa7c03a3d14bd5fd6543628d585f8da
La entrada:
¿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.
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 elutf-8
predeterminadoSi 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:
Si tal solución le parece bien, puedo proporcionar un PR.