Задача курса

Python: Валидатор pyproject.toml

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «pyproject.toml, editable install и воспроизводимый запуск»

Условие

Валидатор pyproject.toml

Ты пишешь утилиту, которая проверяет минимальную корректность файла pyproject.toml по его текстовому содержимому.

В реальных проектах такой скрипт помогает быстро найти пропущенные секции до того, как запускать pip install.

Что уже дано

Проверяющая система ничего не создаёт заранее. Программа получает данные через stdin и должна напечатать результат в stdout.

Что нужно сделать

Напиши программу, которая:

  1. Читает из stdin многострочный текст — содержимое файла pyproject.toml.
  2. Проверяет наличие каждого из следующих требований:
  • присутствует секция [build-system];
  • присутствует секция [project];
  • присутствует поле name = (внутри [project]);
  • присутствует поле version = (внутри [project]);
  • присутствует секция [project.optional-dependencies];
  • в блоке [project.optional-dependencies] есть строка, начинающаяся с dev = или dev=.
  1. Для каждого отсутствующего требования выводит строку вида MISSING: <описание> (см. формат ниже).
  2. Если все требования выполнены — выводит единственную строку 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

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется