Skip to content

Releases: ArtVsMark/Stepik-Python-Grader

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 09:56

What's Changed

  • feat(glossary): link RE verdicts to Glossary-Python (#72, epic #96) by @ArtVsMark in #158
  • chore(packaging): MIT LICENSE + py.typed (PR-1, #98/#100/#101) by @ArtVsMark in #159
  • docs: split README into docs/ knowledge base (PR-2, #102) by @ArtVsMark in #160
  • docs: split README into focused documentation by @ArtVsMark in #179
  • docs: add configuration reference by @ArtVsMark in #180
  • docs: specify web MVP UX and local UI architecture by @ArtVsMark in #181
  • docs: remove stale release plan and trim contributing guide by @ArtVsMark in #182
  • chore: derive package version from git tags by @ArtVsMark in #183
  • docs: clarify versioning policy and prepare Claude handoff by @ArtVsMark in #184
  • docs: clarify web MVP downloader, microbench, and glossary scope by @ArtVsMark in #185
  • docs: fix microbench entrypoint references by @ArtVsMark in #188
  • feat: add JSON glossary provider foundation by @ArtVsMark in #189
  • docs: clean up markdown drift after glossary foundation by @ArtVsMark in #192
  • docs: add glossary source-of-truth and security policy by @ArtVsMark in #203
  • docs: sync changelog and Claude handoff before glossary work by @ArtVsMark in #205
  • refactor(glossary): add origin/module/qualname to GlossaryMissingEntry by @ArtVsMark in #206
  • feat(glossary): stdlib inventory scanner for official Python coverage by @ArtVsMark in #207
  • feat(glossary): coverage report and missing JSON generator by @ArtVsMark in #208
  • feat(glossary): CLI entrypoint for coverage scan by @ArtVsMark in #209
  • feat(version): distinguish dev vs release in --version by @ArtVsMark in #210
  • feat(ci): auto-update README coverage badge by @ArtVsMark in #211
  • feat(ci): live current-version badge alongside Release by @ArtVsMark in #212

Full Changelog: v1.5.0...v1.6.0

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 08:51
5941b5f

What's Changed

  • Audit backlog cleanup: prlimit memory cap (#67) + remove unwired code (#69) by @ArtVsMark in #90
  • feat(cache): opt-in result caching to skip unchanged solutions (#56) by @ArtVsMark in #91
  • feat(pytest): run grader as a pytest plugin via --grader-mode (#57) by @ArtVsMark in #92
  • feat(watch): incremental --mode 2 re-run via the #56 cache (#71) by @ArtVsMark in #93
  • fix(ide): launch tasks via the editor interpreter + version consistency audit by @ArtVsMark in #94
  • chore(release): prepare v1.5.0 by @ArtVsMark in #95

Full Changelog: v1.4.0...v1.5.0

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 16:12
1802511

What's Changed

  • docs(readme): PyPI install is live — pipx install stepik-python-grader (#70) by @ArtVsMark in #85
  • feat(web): local web UI — stepik-grader --serve (epic #80 Tier 1, #58) by @ArtVsMark in #86
  • feat(web): polish Web UI — benchmark mode, default path, localStorage, summary by @ArtVsMark in #87
  • feat(ide): IDE integration — stepik-grader --init-vscode + PyCharm docs (Tier 2, #58) by @ArtVsMark in #88
  • chore(release): prepare v1.4.0 — version bump + docs sync by @ArtVsMark in #89

Full Changelog: v1.3.0...v1.4.0

What's Changed

  • docs(readme): PyPI install is live — pipx install stepik-python-grader (#70) by @ArtVsMark in #85
  • feat(web): local web UI — stepik-grader --serve (epic #80 Tier 1, #58) by @ArtVsMark in #86
  • feat(web): polish Web UI — benchmark mode, default path, localStorage, summary by @ArtVsMark in #87
  • feat(ide): IDE integration — stepik-grader --init-vscode + PyCharm docs (Tier 2, #58) by @ArtVsMark in #88
  • chore(release): prepare v1.4.0 — version bump + docs sync by @ArtVsMark in #89

Full Changelog: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 05:29
575adc7

What's Changed

  • Onboarding UX: beginner-proof README + native file-dialog fallback (#79) by @ArtVsMark in #77
  • docs/housekeeping: version-evolution comparison + fix stale root_dir in config example by @ArtVsMark in #81
  • ci(release): PyPI trusted-publishing job (#70) — pivot from standalone .exe (#78) by @ArtVsMark in #82
  • chore(release): prepare v1.3.0 — version bump + docs sync by @ArtVsMark in #84

Full Changelog: v1.2.0...v1.3.0

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 19:03
7e82bbe

What's Changed

  • Audit v1.1.0 epic: Sprints A-E, #45 A-01, roadmap #53/#54/#58 by @ArtVsMark in #63
  • Release v1.2.0 — UTF-8 stdio, python -m entry point, mode-4 Py-heap column, versioning docs by @ArtVsMark in #76

Full Changelog: v1.1.0...v1.2.0

Stepik Python Grader v1.1.0 — Sprint 6–8

Choose a tag to compare

@ArtVsMark ArtVsMark released this 03 Jul 12:03
c86798b

What's Changed

  • refactor: core/ restructuring, dedup, grader.py split, Sprints 6–8.1 by @ArtVsMark in #22
  • Add claude GitHub actions 1783010684945 by @ArtVsMark in #40
  • release: v1.1.0 — Sprint 6–8 backlog, src-layout, docs sync by @ArtVsMark in #41
  • docs(claude): update Glossary-Python status (closes #38) by @ArtVsMark in #42

Full Changelog: v1.0.0...v1.1.0

Stepik Python Grader v1.0.0 — Stable Release

Choose a tag to compare

@ArtVsMark ArtVsMark released this 24 Jun 16:21

🚀 Stepik Python Grader v1.0.0 — Stable Release

Первый стабильный релиз. Полный рефакторинг с нуля: переименование модулей, OAuth-фасад, rich-вывод, 260 тестов, CI на Python 3.11–3.14.

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


✨ Ключевые возможности

  • 4 режима работы: одиночный тест / все тесты в папке / subprocess-бенчмарк / timeit-микробенчмарк
  • Вердикты AC / WA / TLE / RE с подсветкой через rich
  • OAuth 2.0 авторизация для скачивания тестов со Stepik (browser-flow + refresh-токены)
  • Автоизвлечение тест-кейсов из HTML-таблицы и ZIP-архивов в тексте задачи
  • Поддержка 3 репозиториев с тестами python-generation: Professional, OOP, Samurai
  • Прогресс-бары и цветные таблицы результатов, diff при WA
  • Профили нагрузки (low / medium / high / custom) и оценка по median, а не по одиночному замеру

🏗️ Архитектура

Слоистая структура, граф зависимостей — DAG без циклов:

  • Domain / Applicationdownloader.py, grader.py, diagnostik_stepik.py
  • Infrastructurestepik_client.py (OAuth2 + HTTP), executor.py (compile + exec с таймаутом), microbench_runner.py (timeit через subprocess), oauth_flow.py (OAuth-фасад)
  • Infrastructure / Utilities (leaf, без project-зависимостей)storage.py (JSON I/O), normalizers.py (нормализация вывода)

oauth_flow.py — единая точка входа для авторизации, устраняет дублирование load_secrets между downloader.py и diagnostik_stepik.py. Ребро downloader.py → grader.py сделано локальным импортом внутри функции, чтобы не нарушать слоистость и избежать циклов.


🔧 Что изменилось (основные изменения)

Рефакторинг

  • Переименование модулей: at_first.py → downloader.py, test.py → grader.py (полная замена, 16 файлов)
  • Создан oauth_flow.py — unified OAuth facade, устранено дублирование load_secrets
  • grader.py импортирует run_microbench из microbench_runner.py и _normalize_output_line из normalizers.py
  • Удалены мёртвые функции, убран chardet, StepikTasks/ добавлен в .gitignore

Тесты

  • 260 тестов (pytest, 0 failures)
  • OAuth safety net: load_secrets, token_is_valid, wait_for_auth_code, OAuthHandler
  • Покрытие oauth_flow.py доведено до 100%
  • 45+ тестов для run_microbench, normalizers, _is_python_code_block, load_test_cases

CI/CD

  • GitHub Actions workflow: pytest + ruff на Python 3.11 / 3.12 / 3.13 / 3.14 (3.14 — experimental)
  • Консолидация workflow'ов: удалены дублирующие lint.yml и test.yml, остался единый ci.yml
  • Bump ruff до 0.15.19

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

  • Полный README: дерево файлов, DAG зависимостей, таблица модулей, режимы работы, конфигурация
  • CHANGELOG, бейджи (CI, version, coverage, Python)
  • Строгий README review — 11 исправлений; Issue #1 closed

Исправления

  • grader.py: fallback-стабы для Console/Table/Text, инициализация mem_thread, удаление неиспользуемых переменных
  • Режимы меню 2/3/4: per-solution test_dir, run_benchmark, function-mode для микробенчмарка
  • Audit fixes для rich-вывода и вердиктов

📊 Статистика

  • Тестов: 260 (pytest, 0 failures)
  • Python: 3.11 | 3.12 | 3.13 | 3.14
  • Линтер: ruff (профиль E, F, W, I, UP, B, S102) — clean
  • Coverage: 59%

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

git clone https://github.com/ArtVsMark/Stepik-Python-Grader.git
cd Stepik-Python-Grader

# Виртуальное окружение
python3 -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# Зависимости
pip install -r requirements.txt  # для разработки: pip install -e ".[dev]"

# Запуск грейдера
python grader.py

При запуске появится меню с выбором режима [0–4]. Для скачивания данных задачи со Stepik настройте OAuth-приложение и secrets.json, затем запустите python downloader.py (подробности — в README).