Настройки проекта
Файл настроек необязателен: без него в силу вступают встроенные значения по умолчанию, а с ним можно переопределить часть поведения.
Категории по умолчанию и каталог результата подходят для большинства случаев, но
иногда их стоит настроить — например, разложенные файлы должны попадать не в
Sorted/, а в каталог с другим именем. Без файла настроек
SafeSort использует встроенные значения:
destination = "Sorted"
exclude = [".git", ".venv"]
Чтобы изменить их, SafeSort ищет необязательный файл
safesort.toml прямо в корне сканируемого каталога:
| Ситуация | Что произойдёт |
|---|---|
| safesort.toml есть в корне каталога | читаем и применяем настройки |
| safesort.toml отсутствует | используем встроенные значения по умолчанию |
destination = "Organized"
exclude = [".git", ".venv"]
[extensions]
books = [".epub"]
Таблица [extensions] работает как overlay. Строка
books = [".epub"] добавляет категорию books и не удаляет
documents или images. Если пользователь явно задаст
documents = [".md"], только список documents будет заменён.
plan, apply и повторного запуска конфигурация остаётся в корне, поэтому следующий запуск получает те же настройки.safesort.toml не найден, в дело идут встроенные значения по умолчанию. Программа работает предсказуемо и без единой строчки настроек. Файл конфигурации переопределяет defaults, но не служит обязательным условием для запуска.Чтение файла использует tomllib, модуль стандартной
библиотеки Python для разбора TOML, доступный только на чтение:
def load_config(root: Path) -> Config:
config_path = root / "safesort.toml"
if not config_path.is_file():
return Config()
try:
with config_path.open("rb") as handle:
raw = tomllib.load(handle)
except tomllib.TOMLDecodeError as exc:
raise ConfigError(f"Could not parse config file {config_path}: {exc}") from exc
# ...
open("rb"), а не open("r"): tomllib сам решает, как декодировать байты файла в текст согласно спецификации TOML, поэтому ожидает на входе именно бинарный поток, а не уже прочитанную строку.Если файл настроек существует, но содержит некорректный TOML, SafeSort не пытается
угадать намерение пользователя. Он поднимает понятную ошибку
ConfigError с указанием файла и причины, вместо того чтобы либо упасть с
трудночитаемой трассировкой, либо молча продолжить с настройками по умолчанию.