[Code Quality] Side effects при импорте: load_dotenv() в config.py и глобальная мутация email.charset в mailer.py #64
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
1.
load_dotenv()выполняется при импортеconfig.py(redmine_reporter/config.py:13):Любой
import redmine_reporter.config(в том числе из тестов или при использовании пакета как библиотеки) читает.envиз текущей рабочей директории и мутируетos.environ. Результат импорта модуля зависит от CWD — это затрудняет тестирование и переиспользование пакета.2. Глобальная мутация реестра кодировок stdlib при импорте
mailer.py(redmine_reporter/mailer.py:17):Меняет поведение модуля
emailдля всего процесса, а не только для redmine-reporter: любая другая библиотека, формирующая письма в том же процессе, начнёт кодировать UTF-8 как 8bit вместо base64. Хак нужен для корректной отправки русского текста, но его радиус действия избыточен.Рекомендации
load_dotenv()с уровня модуля в явную инициализацию (например, вmain()или отдельную функциюinit()), чтобы импорт пакета был чистым.email.charsetзадавать кодировку точечно при построении письма (например, черезMIMEText(..., _charset="utf-8")илиset_charset()на уровне конкретного сообщения), либо как минимум вынести мутацию вbuild_message().Связанные места
redmine_reporter/config.py:13redmine_reporter/mailer.py:15-20Критерии приёмки
import redmine_reporter.configиimport redmine_reporter.mailerне имеют side effects.