我在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()
不应发出警告。 在正常情况下。
即使是我添加到django-compressor代码库中的测试来检测此警告pb的回归程度,也没有那么多的投入:django / django @ 3d716467 commit(包含在即将推出的django 3.1中)刚刚删除了该警告,遵循django弃用时间表。
美好的一面:我针对新的django代码(其中FILE_CHARSET
和相关警告不再存在的代码)测试了django-compressor,它的工作没有任何可检测到的问题。
抱歉给你带来不便。 我认为您可以(再次)解决问题。
最有用的评论
似乎对
settings.FILE_CHARSET
属性的任何访问,即使测试是否被覆盖,也会触发该警告。 这正是我们要检查是否需要使用utf-8
默认值的操作。如果我们想保持向后兼容性,最简单的方法是使用以下类似的代码禁用此特定代码行的警告:
如果这样的解决方案适合您,我可以提供PR。