Предупреждать о несовместимости кода с версией Python шага Stepik (по синтаксису и функциям)

Open
#1,621 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
python

Research direction

Start from stepik_client.fetch_step_languages, which already returns step versions, and from where meta.json is written when a task is downloaded. The checker walks the AST and compares imports and attribute uses against the added/removed fields of the Glossary-Python cards, so read the code that loads those cards. Done means the acceptance checklist in the issue holds: versions are stored, each syntax feature has a test, and the warning appears in the CLI, the web panel and before submission without blocking the check.

Written by the indexing model from the issue text.

Description

area/core difficulty/hard enhancement

Что предлагается

Перед проверкой решения предупреждать, если в коде есть то, чего нет в версии Python, на которой его проверит Stepik. Решение владельца в эпике #1575: интерпретатор не выбираем, грейдер живёт на 3.14, а совместимость с версией Stepik проверяется по коду.

Зачем

Решение проходит у нас на 3.14 и падает на Stepik на 3.10 из-за except*, itertools.batched или str.removeprefix на 3.8. Студент узнаёт об этом только после отправки, по невнятной ошибке платформы.

Как устроено

  • Цель проверки — версии шага. stepik_client.fetch_step_languages уже отдаёт их (python3.10, python3.12, …). При скачивании задачи список кладётся в meta.json; если его нет — набор по умолчанию (минимальная из известных версий Stepik) с пометкой «версии шага не известны».
  • Синтаксис — обход ast: признаки с версией появления (match 3.10, except* 3.11, оператор type и PEP 695 3.12, := 3.8, позиционные / 3.8, f-строки с = 3.8, вложенные кавычки в f-строках 3.12 и т. п.). Таблица признаков — одна, в коде, с тестом на каждый.
  • Имена — импорты и обращения к атрибутам модулей и встроенных типов сверяются с полями added/removed карточек глоссария (выгрузка Glossary-Python; у всех 2656 карточек есть added). Своей таблицы версий не заводим — источник истины у глоссария (CLAUDE.md, инвариант 6).
  • Результат — список «что, в какой строке, с какой версии»: «str.removeprefix (стр. 4) — с 3.9, шаг проверяется на 3.8». Это предупреждение, а не вердикт: проверка идёт как обычно.
  • Где видно: CLI перед прогоном, веб — в панели проверки рядом с результатом, отправка на Stepik — перед отправкой.

Границы (названы, а не подразумеваются)

  • Статический разбор не видит динамики (getattr, importlib) и типов объектов: x.removeprefix у неизвестного x — только если тип выводим из литерала. Ложное «всё совместимо» возможно, ложного «несовместимо» — по возможности нет.
  • Версии других языков Stepik (не Python) вне задачи.

Критерии приемки

  • Версии шага сохраняются в meta.json при скачивании; нет их — набор по умолчанию с пометкой.
  • Синтаксические признаки по версиям — таблица с тестом на каждый признак.
  • Имена сверяются по added/removed глоссария, без своей копии версий.
  • Предупреждение видно в CLI, в вебе и перед отправкой на Stepik; проверку не блокирует.
  • Прогон поверхности: веб — браузером, CLI — командой; живой шаг Stepik — в локальном окне.

Часть #1575


Generated by Claude Code

Dominant language
Python
Stars
3
Forks
6
Avg merge
4h 7m
Merged PRs (30d)
49

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ArtVsMark/Stepik-Python-Grader

All issues in ArtVsMark/Stepik-Python-Grader

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.