Я встретил следующее предупреждение, когда запускал тест в своей среде 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:
https://github.com/django/django/commit/0cd465b63aa7c03a3d14bd5fd6543628d585f8da
Билет:
Достаточно ли просто заменить все settings.FILE_CHARSET
в django-Compressor на utf-8
чтобы решить эту проблему, может быть ...?
спасибо за сообщение. замена всех вхождений на utf-8
может нарушить работу тех, кто действительно использует этот параметр. правильным исправлением, вероятно, было бы использовать параметр, если он присутствует, и не устанавливать рассматриваемые параметры, если он отсутствует.
@karyon спасибо за ваш ответ. Пытался написать патч. Я хотел бы, чтобы вы проверили, правильно ли я понимаю.
Я впервые отправляю пиар на это репо и, возможно, пропустил что-то важное. Если вы обнаружите, что что-то не так, дайте мне знать. Заранее спасибо.
исправлено в # 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 я обнаружил, что предупреждение на самом деле было вызвано очень странным ошибочным обнаружением is_overridden('FILE_CHARSET')
. Кажется, что в моем проекте, хотя я не устанавливаю FILE_CHARSET
в своих настройках, is_overridden('FILE_CHARSET')
возвращает True.
Но если я тестирую минимальный проект django с установленным только django-компрессором -> без предупреждения
Так что мой PR на самом деле не нужен: is_overridden('FILE_CHARSET')
не должен возвращать True, поэтому compress()
и CompilerFilter()
не должны вызывать предупреждение. При нормальных обстоятельствах.
Даже тест, который я добавил в базу кода django-Compressor для обнаружения регресса в этом предупреждении pb, не так уж и неприятен: фиксация django / django @ 3d716467 (включенная в грядущий django 3.1) только что удалила указанное предупреждение , следуя графику прекращения поддержки django .
Яркая сторона вещей: я протестировал django-компрессор на новый код django (тот, где FILE_CHARSET
и соответствующее предупреждение больше не выходит), и он работает без каких-либо обнаруживаемых проблем.
Приносим извинения за неудобства. Думаю, можно закрыть (снова) вопрос.
Самый полезный комментарий
Похоже, что любой доступ к свойству
settings.FILE_CHARSET
, даже для проверки его переопределения, вызовет предупреждение. И это именно то, что мы делаем, чтобы проверить, нужно ли нам использовать значение по умолчаниюutf-8
.Если мы хотим сохранить обратную совместимость, самый простой способ - отключить это предупреждение для этой конкретной строки кода, используя что-то вроде этого:
Если такое решение вам подходит, я могу предоставить PR.