Rozdział 23 · Część IV · Wdrażamy SafeSort

Ustawienia projektu

Plik ustawień jest opcjonalny: bez niego wbudowane domyślne ustawienia wchodzą w życie, a dzięki niemu można nadpisać część zachowania.

SafeSort · Część 4 z 6Wdrożenie

Domyślne kategorie i katalog wyników są w większości przypadków w porządku, ale Czasem warto je ustawić — na przykład rozłożone pliki nie powinny trafiać do Sorted/, a do katalogu o innej nazwie. Bez pliku konfiguracyjnego SafeSort używa wartości wbudowanych:

Wbudowane wartości domyślne (nigdzie w pliku nie zapisane — to zachowanie programu)
destination = "Sorted"
exclude = [".git", ".venv"]

Aby je zmienić, SafeSort szuka opcjonalnego pliku safesort.toml bezpośrednio w głównym katalogu skanowanym:

SytuacjaCo się stanie
safesort.toml jest u podstaw kataloguczytać i stosować ustawienia
safesort.toml nieobecnyużywanie wbudowanych ustawień domyślnych
safesort.toml - Nadpisuje nazwę katalogu wyników i dodaje kategorię
destination = "Organized"
exclude = [".git", ".venv"]

[extensions]
books = [".epub"]
Wbudowanedefaultsdocuments, images,video, audio,archives, code, datasafesort.tomldodaje nowąkategorii lubzastępuje tylko...Effective Configwszystkich innychwbudowane kategorieuratowany
Priorytet ustawień: defaults → ustawienia użytkownika additions/overrides → efektywny Config

Tabela [extensions] działa jako overlay. String books = [".epub"] dodaje kategorię books i nie usuwa documents lub images. Jeśli użytkownik ustawia to wyraźnie documents = [".md"]tylko lista documents zostanie wymienionych.

safesort.toml pozostaje wejściem konfiguracyjnym
Skaner zawsze pomija ten plik. Po plan, apply i ponownym uruchomieniu konfiguracja pozostaje na bazie głównej, więc następne uruchomienie ma te same ustawienia.
Żadna komenda SafeSort nie wymaga pliku ustawień
Jeśli safesort.toml nie znaleziono, używa się wbudowanych ustawień domyślnych. Program działa przewidywalnie i bez żadnej linii ustawień. Plik konfiguracyjny nadpisuje defaults, ale nie jest warunkiem wstępnym do uruchomienia.

Odczyt pliku używa tomllib, standard Biblioteki parsowania tylko do odczytu Python TOML:

src/safesort/config.py
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
    # ...
tomllib.load() akceptuje otwarty plik w trybie binarnym
Zwróć uwagę na open("rb"), nie open("r"): tomllib decyduje, jak zdekodować bajty pliku na tekst zgodnie ze specyfikacją TOML, więc oczekuje binarnego strumienia jako wejścia, a nie już odczytanego łańcuch znaków.

Jeśli plik ustawień istnieje, ale zawiera niepoprawny TOML, SafeSort nie próbuje zgadywać zamiaru użytkownika. Wyświetla zrozumiały błąd ConfigError z plikiem i powodem, zamiast odpadać trudne do odczytania prześladowanie lub ciche kontynuowanie z domyślnymi ustawieniami.

Praktyka: przeczytaj i sprawdź ustawienia TOML-
Interaktywny Laptop w przeglądarce: Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Oficjalna dokumentacja
tomllib — Parse TOML files
Checkpoint · Issue #11
git commit -m "feat: add directory scanner and configuration"
Podobnie jak Issue #10, to zadanie nie ma własnego rejestrowania PR:, a ustawienia są w tym samym commite co skaner (PR #15), a Issue #11 zamknęliśmy ręcznie. Książka dzieli logging (23-21) i safesort.toml (ta strona) na dwa lekcje, ponieważ są to dwie różne idee. W repozytorium odpowiadają im jeden Issue i jeden commit.
Status prawdziwego Project: Done