refactor: remove import-time side effects
Импорт модулей больше не мутирует процесс:
- config.py: module-level load_dotenv(override=False) мутировал os.environ
при любом импорте. Вызов перенесён в Config.load_yaml() — точку явной
загрузки конфигурации, семантика override=False и путь по умолчанию
сохранены. --config PATH (load_dotenv(path, override=True)) не затронут.
- mailer.py: глобальная регистрация email.charset.add_charset('utf-8', ...)
меняла кодировку для всего процесса. Заменена на точечное применение
8bit UTF-8 к телу письма в _utf8_text_part() — payload в UTF-8
(surrogateescape) + Content-Transfer-Encoding: 8bit на конкретной части.
Проверено: сериализация в байты (BytesGenerator, как в send_message)
побайтово совпадает со старым поведением.
Тест test_env_var_takes_priority_over_dotenv адаптирован к новой точке
вызова load_dotenv; test_body_substitution переведён с as_string() на
декодированный payload (str-сериализация не-ASCII части без глобальной
мутации реестра теперь даёт base64; wire-формат 8bit сохранён и
зафиксирован test_wire_format_is_8bit_utf8).
Closes #64
This commit is contained in:
@@ -216,14 +216,10 @@ class TestWarnWhenTlsVerificationDisabled:
|
||||
# -- #15: .env не должен переопределять переменные окружения --
|
||||
|
||||
|
||||
@mock.patch("dotenv.load_dotenv")
|
||||
@mock.patch("redmine_reporter.config.load_dotenv")
|
||||
def test_env_var_takes_priority_over_dotenv(mock_load):
|
||||
"""load_dotenv вызывается с override=False — env vars не перебиваются .env."""
|
||||
import importlib
|
||||
|
||||
from redmine_reporter import config as cfg_mod
|
||||
|
||||
importlib.reload(cfg_mod)
|
||||
Config.load_yaml("/nonexistent/config.yml")
|
||||
|
||||
mock_load.assert_called_once_with(override=False)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user