Skip to main content

Stepik Python Grader

CI Release Version Coverage (ubuntu) Coverage (all OS combined) Glossary Python

Status: Stable  ·  🇬🇧 English quick start & generic mode

Локальный грейдер для курсов «Поколение Python» на Stepik. Скачивает данные задачи с сайта и позволяет не только проверить решение локально, но и сравнить несколько решений более честно: сначала по корректности, потом по benchmark-метрикам.

Веб-интерфейс --serve: грейдинг папки решений против тест-кейсов с вердиктом OK и таблицей результатов

Форк / продолжение проекта: Первоисточник грейдера

💬 Нашли баг или есть идея? Пункт 9 в меню грейдера и кнопка 💬 в веб-интерфейсе открывают форму issue уже заполненной (версия, ОС, Python подставятся сами). Вопрос, а не баг — в Discussions.

Курсы:


Зачем это, если Stepik уже проверяет решения?

Встроенный чекер Stepik даёт «зачёт / не зачёт» — и только после сабмита. Грейдер закрывает то, чего у него нет:

  • Мгновенный офлайн-цикл. Правишь решение и проверяешь локально за секунды — без сабмита, без лимита попыток, без сети.
  • 📊 Честное сравнение нескольких решений. Stepik не покажет, какое из ваших решений быстрее и экономнее по памяти — грейдер прогоняет их бок о бок (median-время, RSS, вердикты SIMILAR/SLOWER) в режимах 3/4.
  • 🎓 «Подучить», а не просто вердикт. Частые ошибки из вашей истории прогонов с затуханием карточек — инструмент учит, а не только оценивает.
  • 📚 Офлайн-глоссарий Python с deep-link прямо из ошибок исполнения.
  • 🔒 Свой код не покидает машину (кроме явного скачивания задачи со Stepik и opt-in AI-подсказок с отдельным согласием).

Детальное сравнение с проектом-первоисточником — в docs/use/versions.md.


Основные возможности

  • ✅ Запуск решений против наборов тест-кейсов (tests/N + tests/N.clue)
  • 📋 Автоматическое извлечение тест-кейсов из HTML-таблицы в тексте задачи Stepik
  • 📦 Автоскачивание тестов из ZIP-архива по ссылке в тексте задачи
  • 🔗 Обнаружение ссылок на GitHub-тесты с подсказкой скачать вручную
  • 📊 Сравнение нескольких решений одной задачи в таблице
  • 🚀 Subprocess-бенчмарк с замером времени и памяти (режим 3)
  • ⚡ Timeit-микробенчмарк через subprocess (режим 4)
  • 🎨 Цветной вывод через rich — зелёный OK/AC, красный WA/TLE/RE, жёлтый SLOWER
  • 🔍 Diff при WA — сравнение ожидаемого и фактического вывода при провале теста
  • ⚖️ Вердикты AC / WA / TLE / RE по каждому тест-кейсу
  • 🌐 Локальный веб-интерфейс (--serve, http://127.0.0.1:8000) и интеграция с VS Code / PyCharm
  • 🖥 GUI-лаунчер веб-интерфейса без командной строки (stepik-grader-gui) — на Windows ярлык без консольного окна
  • 🧩 pytest-плагин (pytest --grader-mode), кэш результатов и --watch (опционально: требует extra [watch]pip install -e ".[watch]", зависит от watchfiles)
  • 🧪 Playwright e2e-смоук фронтенда + регрессия на XSS (опционально: extra [e2e] — см. CONTRIBUTING.md § E2E-тесты)
  • 📚 Локальный глоссарий-модуль (число готовых карточек — в бейдже Glossary выше, черновиков нет): функции/исключения/конструкции, детектор недостающих терминов, deep-link из error cards
  • 🎓 Правила PEP 8 и раздел «Подучить» — частые ошибки из истории прогонов с затуханием (--insights / --lint)
  • 📈 Локальная статистика прогонов (--stats) и SQLite-история (--history) — без сети
  • 🔒 Опциональная OS-песочница исполнения решений (--sandbox)
  • 🔍 Диагностика окружения и авторизация через Stepik API

Только в вебе — CLI-аналога нет. Раздел «Песочница» (не путать с OS-изоляцией --sandbox) — запуск произвольного кода со своим stdin; пошаговый трейс исполнения (плеер шагов, кадры стека, memory-graph); редактор решения с сохранением; кнопка «Отправить в Stepik» в режиме 1 интерактивные разделы «Глоссарий», «Правила (PEP)», «Подучить» и «Прогресс» — в терминале от них есть только сводки --insights/--lint и экспорт --export-progress. Обзор разделов — docs/use/web-interface.md.

Разбор по модулям и слоям — в docs/dev/architecture.md.

Как это выглядит (--serve)

Проверка папки решений (режим 2) Офлайн-глоссарий Python
Таблица результатов веб-интерфейса: task.py — 5 из 5 тест-кейсов пройдено, вердикт OK, время и память Раздел «Глоссарий»: список карточек и открытая карточка оператора % с синтаксисом и примерами кода

Быстрый старт

Установить (проще всего через pipx):

pipx install stepik-python-grader

Запустить интерактивное меню:

python -m stepik_grader       # надёжный способ (работает всегда)
stepik-grader                 # если команда в PATH

Или веб-интерфейс (только localhost) — те же режимы 1–4 в браузере плюс разделы, которых в CLI нет (см. § Основные возможности):

stepik-grader --serve         # http://127.0.0.1:8000 (другой порт — --port)

Совсем без командной строки — окно-лаунчер веб-интерфейса: выбор варианта запуска («Простой сервер» / «Сервер с изоляцией --sandbox»), порта (с проверкой «занят») и рабочей папки, кнопки «Запустить»/«Остановить» и авто-открытие браузера:

stepik-grader-gui                  # на Windows — ярлык без консольного окна
python -m stepik_grader.launcher   # то же окно из терминала

Или проверить одно решение без интерактива:

stepik-grader --mode 1 --file task.py

Полная установка (из исходников, venv, Windows-заметки, настройка OAuth) — в docs/use/installation.md. Пошаговый первый пример, режимы 1–4, CLI-флаги, скачивание задач и форматы тестов — в docs/use/grader-workflow.md.


Документация

База знаний — в docs/, разложена по четырём направлениям:

Направление Для кого Что внутри
docs/use/ пользователь установка и OAuth, режимы 1–4 и CLI-флаги, веб-интерфейс, конфигурация, форматы тест-кейсов, отличия от первоисточника
docs/dev/ контрибьютор архитектура и дерево модулей, HTTP API, контракты данных, 11 ADR, дизайн незапущенного server mode
docs/agent/ Claude Code шаблон ролей, очередь работ после крупного аудита
docs/archive/ по необходимости история разработки, архив CHANGELOG, разовые аудиты

Рядом с кодом: CHANGELOG.md — что изменилось в релизах, CONTRIBUTING.md — как внести вклад, CLAUDE.md — инварианты ядра для агентов.

Два правила этой документации: одна тема — один файл (остальные ссылаются, а не копируют) и в активном документе нет журнала работ (что сделано — в CHANGELOG, что предстоит — в Issues). Подробнее — docs/README.md.


Безопасность (кратко)

По умолчанию решения запускаются БЕЗ полноценного sandbox на уровне ОС. Есть таймаут выполнения (всегда) и best-effort лимит памяти на POSIX; изоляции ФС/сети по умолчанию нет. Опциональная OS-изоляция включается флагом --sandbox (core/sandbox/, три backend'а) — и в CLI (режимы 1–4), и в web (--serve --sandbox; пошаговый трейс под ней недоступен). Без --sandbox запускай только доверенные решения (свои или скачанные из Stepik as-is). Подробная threat model — в docs/configuration.md § Ограничения и безопасность. Как сообщить об уязвимости — SECURITY.md.


Прозрачность и доверие

  • Автотесты на каждый PR (pytest), CI-матрица на 3 ОС × Python 3.12/3.13 (+3.14 экспериментально) — живые бейджи покрытия single-OS и cross-OS в шапке.
  • 🧠 Строгий mypy (disallow_untyped_defs, warn_return_any, …) + ruff (lint + format) в pre-commit и CI — типы и стиль проверяются на каждый PR.
  • 🔐 Приватный репорт уязвимостей (GitHub Private Vulnerability Reporting) + документированная threat model — SECURITY.md.
  • 📦 Публикация на PyPI через OIDC trusted publishing — без хранимого токена в секретах; релизный dist собирается один раз в CI.
  • 📜 MIT, открытая история изменений — CHANGELOG.md.

Первый вклад за 15 минут

Новичок? Возьмите issue с меткой good first issue — это задачи с понятным объёмом и ссылками на канон. Пошаговый онбординг (форк → ветка от main → локальные гейты pytest/ruff/mypy → PR по Conventional Commits) — в CONTRIBUTING.md § Первый вклад за 15 минут. Вопросы, идеи и «покажу своё» — в Discussions.


Python версия

Python 3.12+ (3.14 — экспериментальная).


Лицензия

MIT © Artem Markitanov (ArtVsMark).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stepik_python_grader-1.10.0.tar.gz (3.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stepik_python_grader-1.10.0-py3-none-any.whl (1.5 MB view details)

Uploaded Python 3

File details

Details for the file stepik_python_grader-1.10.0.tar.gz.

File metadata

  • Download URL: stepik_python_grader-1.10.0.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for stepik_python_grader-1.10.0.tar.gz
Algorithm Hash digest
SHA256 a2d0036512e234c5f4c57ca6daeded92fa59d05207c4f9ec136d904ae443d29a
MD5 c01db25f352079f261c58adee284b4a8
BLAKE2b-256 960f97bbf6f5083bf372bcbeafa7bcf4642a5ff4a624fa2a4e9335d37fd8ff21

See more details on using hashes here.

Provenance

The following attestation bundles were made for stepik_python_grader-1.10.0.tar.gz:

Publisher: release.yml on ArtVsMark/Stepik-Python-Grader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stepik_python_grader-1.10.0-py3-none-any.whl.

File metadata

File hashes

Hashes for stepik_python_grader-1.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 195be64fb5392c60decac6cdd8a58ba3ff3fded7e7d9d2e0712ab83bf3890015
MD5 e5d5fa6b7b9299ee28e94a9dd137c511
BLAKE2b-256 568340541aef4263b37b88a23758138975586745fb2185876a3f5565ba477bda

See more details on using hashes here.

Provenance

The following attestation bundles were made for stepik_python_grader-1.10.0-py3-none-any.whl:

Publisher: release.yml on ArtVsMark/Stepik-Python-Grader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page