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
settings.FILE_CHARSET
は推奨されていないようです。
バージョン2.2以降非推奨:
この設定は非推奨です。 Django 3.1以降、ディスクから読み取られるファイルはUTF-8でエンコードする必要があります。
バージョン:
リリースノートには次のように書かれています。
FILE_CHARSET
設定は非推奨です。 Django 3.1以降、ディスクから読み取られるファイルはUTF-8でエンコードする必要があります。
この問題に対処するには、django-compressorのすべてのsettings.FILE_CHARSET
をutf-8
に置き換えるだけで十分ですか?
報告してくれてありがとう。 すべてのオカレンスをutf-8
置き換えると、実際にこの設定を使用している人にとっては問題が発生する可能性があります。 適切な修正は、設定が存在する場合はその設定を使用し、存在しない場合は問題のパラメーターを設定しないことです。
@karyonお返事ありがとうございます。 パッチを書いてみました。 私の理解が正しいかどうかを確認していただきたいと思います。
このレポにPRを送るのはこれが初めてで、何か重要なことを見逃したかもしれません。 何かおかしいと思ったら教えてください。 前もって感謝します。
#934で修正
新しいコードは、私のセットアップで非常によく似た警告を引き起こすようです:
/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
と
django-compressor==2.3
Django==2.2.2
settings.FILE_CHARSET
プロパティにアクセスすると、オーバーライドされているかどうかをテストする場合でも、警告がトリガーされるようです。 これは、 utf-8
デフォルトを使用する必要があるかどうかを確認するために行うことです。
下位互換性を維持したい場合、最も簡単な方法は、次のようなコードを使用して、コードのこの特定の行に対してこの警告を無効にすることです。
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
そのような解決策があなたにとって大丈夫だと思われる場合、私はPRを提供することができます。
はい、PRがいいでしょう。 必要に応じて、元のPRを元に戻すことから始めることができます:)
PRのパッチを作成しているときに、警告が実際にはis_overridden('FILE_CHARSET')
非常に奇妙な偽の検出によってトリガーされていることを発見しました。 私のプロジェクトでは、設定でFILE_CHARSET
を設定していませんが、 is_overridden('FILE_CHARSET')
はTrueを返しているようです。
しかし、django-compressorをインストールしただけの最小限のdjangoプロジェクトでテストした場合->警告なし
したがって、私のPRは実際には必要ありません。 is_overridden('FILE_CHARSET')
はTrueを返さないため、 compress()
とCompilerFilter()
は警告を表示しません。 通常の状況下で。
この警告pbのリグレッションを検出するためにdjango-compressorコードベースに追加したテストでさえ、それほど煩わしいものではありません:django / django @ 3d716467 commit(間もなく登場するdjango 3.1に含まれています)は、前述の警告を削除しました、 djangoの非推奨タイムラインに従い
明るい面:新しいdjangoコード( FILE_CHARSET
と関連する警告が表示されなくなったコード)に対してdjango-compressorをテストしたところ、検出可能な問題は発生しませんでした。
ご不便おかけしてすみません。 私はあなたが(再び)問題を閉じることができると思います。
最も参考になるコメント
settings.FILE_CHARSET
プロパティにアクセスすると、オーバーライドされているかどうかをテストする場合でも、警告がトリガーされるようです。 これは、utf-8
デフォルトを使用する必要があるかどうかを確認するために行うことです。下位互換性を維持したい場合、最も簡単な方法は、次のようなコードを使用して、コードのこの特定の行に対してこの警告を無効にすることです。
そのような解決策があなたにとって大丈夫だと思われる場合、私はPRを提供することができます。