Django-compressor: RemovedInDjango31 Предупреждение: параметр FILE_CHARSET устарел

Созданный на 2 апр. 2019  ·  10Комментарии  ·  Источник: django-compressor/django-compressor

Я встретил следующее предупреждение, когда запускал тест в своей среде 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.

версии:

  • django 2.2.0
  • Джанго-компрессор 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.

Все 10 Комментарий

В примечании к выпуску говорится:

Параметр FILE_CHARSET устарел. Начиная с Django 3.1 файлы, считываемые с диска, должны иметь кодировку UTF-8.

Достаточно ли просто заменить все 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 и соответствующее предупреждение больше не выходит), и он работает без каких-либо обнаруживаемых проблем.

Приносим извинения за неудобства. Думаю, можно закрыть (снова) вопрос.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги