Django-compressor: RemovedInDjango31Warning: a configuração FILE_CHARSET está obsoleta

Criado em 2 abr. 2019  ·  10Comentários  ·  Fonte: django-compressor/django-compressor

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:

  • django 2.2.0
  • django-compressor 2.2
bug

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ã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.

Todos 10 comentários

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.

É 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.

Esta página foi útil?
0 / 5 - 0 avaliações