Задача курса
Python: Валидатор pyproject.toml
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «pyproject.toml, editable install и воспроизводимый запуск»
Условие
Валидатор pyproject.toml
Ты пишешь утилиту, которая проверяет минимальную корректность файла pyproject.toml по его текстовому содержимому.
В реальных проектах такой скрипт помогает быстро найти пропущенные секции до того, как запускать pip install.
Что уже дано
Проверяющая система ничего не создаёт заранее. Программа получает данные через stdin и должна напечатать результат в stdout.
Что нужно сделать
Напиши программу, которая:
- Читает из
stdinмногострочный текст — содержимое файлаpyproject.toml. - Проверяет наличие каждого из следующих требований:
- присутствует секция
[build-system]; - присутствует секция
[project]; - присутствует поле
name =(внутри[project]); - присутствует поле
version =(внутри[project]); - присутствует секция
[project.optional-dependencies]; - в блоке
[project.optional-dependencies]есть строка, начинающаяся сdev =илиdev=.
- Для каждого отсутствующего требования выводит строку вида
MISSING: <описание>(см. формат ниже). - Если все требования выполнены — выводит единственную строку
OK.
Проверку выполняй текстовым поиском по строкам файла: считай требование выполненным, если хотя бы одна строка (после strip()) начинается с нужного маркера или точно равна ему.
Маркеры и соответствующие описания для вывода:
| Маркер (строка начинается с) | Описание для MISSING |
|---|---|
[build-system] |
[build-system] section |
[project] |
[project] section |
name = |
name field |
version = |
version field |
[project.optional-dependencies] |
[project.optional-dependencies] section |
dev = или dev= |
dev group |
Выводи строки MISSING: в том порядке, в котором маркеры перечислены в таблице выше.
Важно: строка [project] является префиксом строки [project.optional-dependencies]. Считай маркер [project] найденным только если строка (после strip()) равна [project], а не просто начинается с него.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
Произвольное число строк — содержимое pyproject.toml. Ввод завершается концом файла.
Формат вывода
Либо строка OK, либо одна или несколько строк вида:
MISSING: <описание>
в порядке, определённом таблицей выше.
Примеры
Пример 1
- Ввод
[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "mypackage" version = "0.1.0" requires-python = ">=3.11" dependencies = [] [project.optional-dependencies] dev = [ "pytest>=8.0", "mypy>=1.9", ]- Ожидаемый результат
OK
