Eu encontrei o seguinte aviso quando executei um teste com meu ambiente 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 o uso de settings.FILE_CHARSET
é recomendado.
Obsoleto desde a versão 2.2:
Esta configuração está obsoleta. A partir do Django 3.1, os arquivos lidos do disco devem ser codificados em UTF-8.
versões:
A nota de lançamento diz:
A configuração
FILE_CHARSET
está obsoleta. A partir do Django 3.1, os arquivos lidos do disco devem ser codificados em UTF-8.
O commit relacionado no Django:
https://github.com/django/django/commit/0cd465b63aa7c03a3d14bd5fd6543628d585f8da
O ingresso:
É suficiente apenas substituir todos os settings.FILE_CHARSET
no django-compressor por utf-8
para resolver este problema, talvez ...?
obrigado por relatar. substituir todas as ocorrências por utf-8
pode quebrar as coisas para aqueles que realmente usam esta configuração. a correção apropriada provavelmente seria usar a configuração, se ela estiver presente, e não definir os parâmetros em questão se ela não estiver presente.
@karyon, obrigado por sua resposta. Tentei escrever um patch. Gostaria que você revisse se meu entendimento está correto.
Esta é a primeira vez que envio RP para este repo e posso ter perdido algo importante. Se você encontrar algo errado, por favor me avise. Agradeço antecipadamente.
corrigido em # 934
O novo código parece causar um aviso muito semelhante em minha configuração:
/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
com
django-compressor==2.3
Django==2.2.2
Parece que qualquer acesso à propriedade settings.FILE_CHARSET
, mesmo para testar se ela foi substituída, disparará o aviso. E isso é exatamente o que fazemos para verificar se precisamos usar o padrão utf-8
.
Se quisermos manter a compatibilidade com versões anteriores, a maneira mais simples é desativar esse aviso para esta linha específica do código usando algo assim:
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
Se essa solução parecer adequada para você, posso fornecer um PR.
sim, um PR seria bom. se necessário, você pode começar revertendo o PR original :)
Enquanto escrevia o patch para o PR, descobri que o aviso foi na verdade acionado por uma detecção falty muito estranha de is_overridden('FILE_CHARSET')
. Parece que em meu projeto, embora eu não defina FILE_CHARSET
em minhas configurações, is_overridden('FILE_CHARSET')
retorna Verdadeiro.
Mas se eu testar em um projeto mínimo de django com apenas django-compressor instalado -> sem aviso
Portanto, meu PR na verdade não é necessário: is_overridden('FILE_CHARSET')
não deve retornar True, portanto, compress()
e CompilerFilter()
não devem gerar o aviso. Em circunstâncias normais.
Até mesmo o teste que adicionei à base de código do django-compressor para detectar qualquer regressão neste pb de aviso, não é muito ineficaz: django / django @ 3d716467 commit (incluído no próximo django 3.1) acaba de remover o referido aviso , seguindo o cronograma de depreciação do
O lado bom das coisas: Eu testei o django-compressor contra o novo código django (aquele em que FILE_CHARSET
e o aviso associado não saem mais) e ele funciona sem nenhum problema detectável.
Desculpe pela inconveniência. Acho que você pode encerrar (novamente) o problema.
Comentários muito úteis
Parece que qualquer acesso à propriedade
settings.FILE_CHARSET
, mesmo para testar se ela foi substituída, disparará o aviso. E isso é exatamente o que fazemos para verificar se precisamos usar o padrãoutf-8
.Se quisermos manter a compatibilidade com versões anteriores, a maneira mais simples é desativar esse aviso para esta linha específica do código usando algo assim:
Se essa solução parecer adequada para você, posso fornecer um PR.