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-метрикам.

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

Курсы:


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

  • ✅ Запуск решений против наборов тест-кейсов (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) и интеграция с VS Code / PyCharm
  • 🧩 pytest-плагин (pytest --grader-mode), кэш результатов и --watch (опционально: требует extra [watch]pip install -e ".[watch]", зависит от watchfiles)
  • 🧪 Playwright e2e-смоук фронтенда + регрессия на XSS (опционально: extra [e2e] — см. CONTRIBUTING.md § E2E-тесты)
  • 📚 Локальный глоссарий-модуль (число готовых карточек — в бейдже Glossary выше; эпик #363 завершён, черновиков нет): функции/исключения/конструкции, детектор недостающих терминов, deep-link из error cards
  • 🎓 Правила PEP 8 и раздел «Подучить» — частые ошибки из истории прогонов с затуханием (--insights / --lint, эпик #342)
  • 📈 Локальная статистика прогонов (--stats) и SQLite-история (--history) — без сети
  • 🔒 Опциональная OS-песочница исполнения решений (--sandbox, issue #266)
  • 🔍 Диагностика окружения и авторизация через Stepik API

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


Чем отличается от оригинала

Возможность Оригинал Этот форк
Проверка одного файла на корректность
Сравнение и бенчмарк решений (режимы 3/4, оценка по median, вердикты SIMILAR/SLOWER, профили нагрузки)
Интеграция со Stepik — OAuth2, автоскачивание задачи и тест-кейсов, диагностика API
Локальный веб-интерфейс (--serve) + интеграция с VS Code / PyCharm
Локальный глоссарий Python — карточки + детектор недостающих терминов + deep-link из error cards
Правила PEP 8 + раздел «Подучить» (частые ошибки из истории прогонов с затуханием)
Опциональная OS-песочница исполнения (--sandbox) с сетевой/ФС-изоляцией
Двуязычный интерфейс RU/EN — CLI, web-оболочка, глоссарий
Локальная история прогонов (SQLite) + статистика — офлайн
Инженерная база — src-layout, pyproject.toml, CI (pytest + ruff + mypy) на 3 ОС, 1700+ тестов

Эволюция по релизам (v1.0.0 … v1.8.0) — в docs/versions.md.


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

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

pipx install stepik-python-grader

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

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

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

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

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


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

Полная база знаний — в docs/:

Тема Документ
Установка, OAuth, secrets.json, диагностика docs/installation.md
Режимы работы, CLI-флаги, web/IDE, скачивание задачи docs/grader-workflow.md
WEB MVP (проверка решений + Downloader + Глоссарий-модуль, микро-бенчмарк, error/action cards) docs/web-current.md
Справочник HTTP API (эндпоинты, параметры, лимиты, коды ответов, curl) docs/api.md
Справочник: конфигурация, форматы тест-кейсов, ограничения и безопасность docs/configuration.md
Архитектура: модули, слои, граф зависимостей docs/architecture.md
Контракт результата проверки (CLI/Web/API), дизайн server mode, ADR docs/result-contract.md, docs/server-mode.md, docs/adr/README.md
Локальный глоссарий: формат, API, источник истины контента docs/glossary.md
Структура проекта (дерево файлов) docs/project-structure.md
Версии и сравнение с оригиналом docs/versions.md
Полный список изменений CHANGELOG.md
Как внести вклад, код-стайл, версионирование CONTRIBUTING.md
Инварианты ядра и правила для агентов CLAUDE.md

Правило против дублей: каждая тема канонически живёт в одном файле, остальные ссылаются — см. docs/README.md § Канонические источники.


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

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


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

  • 1700+ автотестов (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.9.0.tar.gz (1.6 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.9.0-py3-none-any.whl (874.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for stepik_python_grader-1.9.0.tar.gz
Algorithm Hash digest
SHA256 5aea5029ce7e1332290379e2f2f964c70cbe9b907cf329b0792f29bc8eec5244
MD5 301212c6b68e4b1800d1ea426bcfc086
BLAKE2b-256 349eb7367d37a1f742a337f405f90f707a9d1761e88a5b9df2b1afc0d0211d46

See more details on using hashes here.

Provenance

The following attestation bundles were made for stepik_python_grader-1.9.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.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for stepik_python_grader-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1667e5e1827ef52aefb16d8450bfd7eb95c3e8b2e83b77721cf5869ce94a8385
MD5 fe97405b0334c1f8ee786c8d2e5a2681
BLAKE2b-256 364b4cb0855edb3597f932219fa4f5410450499a1d0912d685fdf9efab25aff1

See more details on using hashes here.

Provenance

The following attestation bundles were made for stepik_python_grader-1.9.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