Загрузка данных


Ты работаешь в текущем проекте:

/home/work/skil-scrap/adt-markdownify-meta

Задача:
Реализовать только файл:

scripts/config_loader.py

Важно:
- Не трогай другие файлы.
- Не меняй README.md.
- Не меняй SKILL.md.
- Не меняй meta_exporter.yaml.example.
- Не меняй run_exporter.py.
- Сейчас нужна только логика чтения YAML-конфига.

Нужно реализовать:

1. Функцию find_config(start_dir: Path) -> Path

Логика:
- ищет файл meta_exporter.yaml в текущей директории;
- если не нашла, ищет выше по директориям максимум на 3 уровня;
- если meta_exporter.yaml не найден, но найден meta_exporter.yaml.example, выбрасывает FileNotFoundError с понятным текстом:
  "Не найден meta_exporter.yaml. Скопируйте meta_exporter.yaml.example в meta_exporter.yaml"
- если не найден ни meta_exporter.yaml, ни meta_exporter.yaml.example, выбрасывает FileNotFoundError с понятным текстом.

2. Функцию load_config(config_path: Path) -> dict

Логика:
- открывает YAML-файл;
- читает его через yaml.safe_load;
- если файл пустой, возвращает пустой dict;
- если YAML сломан, выбрасывает ValueError с понятным текстом;
- если YAML содержит не dict, выбрасывает ValueError.

3. Функцию get_config() -> dict

Логика:
- вызывает find_config(Path.cwd());
- вызывает load_config(config_path);
- возвращает dict.

Требования к коду:
- Используй pathlib.Path.
- Используй yaml.
- Код должен быть простым и понятным.
- Не используй лишние зависимости.
- Не добавляй API.
- Не добавляй requests/httpx/aiohttp/urllib.
- Не добавляй токены, cookie, login, password.

После реализации покажи полный код файла scripts/config_loader.py.