Per decision to use common industry practice now and tune later: - structures: standard layouts (go cmd/internal/pkg, python src-layout, rust cargo, ts pnpm workspaces, kotlin Gradle modules, swift SwiftPM) - linters: default rulesets (golangci base, clippy -D warnings, ruff+mypy, typescript-eslint+prettier, ktlint+detekt, swiftlint+swiftformat) - test runners: TS=vitest; coverage soft targets (~70-80%) marked '(пороги уточним)' - swift deps: SwiftPM (Package.resolved), CocoaPods legacy-only - reworded intros: values are industry defaults to be tuned, no raw TODO markers left Verified: no TODO markers remain in *-standards; all six skills load via pi.
61 lines
3.6 KiB
Markdown
61 lines
3.6 KiB
Markdown
---
|
||
name: python-standards
|
||
description: Используй при написании, ревью и проверке кода на Python в наших сервисах — структура проекта, запуск ruff/mypy, тесты, формат коммитов и merge request. Применяй всегда, когда пишешь или правишь Python-код, готовишь MR, а также в командах /bugfix, /feature и /review для Python-репозиториев.
|
||
---
|
||
|
||
# Стандарты Python
|
||
|
||
Один из наших языков — **Python**. Ниже — общепринятые дефолты экосистемы; специфичное для
|
||
компании заполнено дефолтами индустрии — тюним под M.Video позже.
|
||
|
||
## Структура
|
||
|
||
Ориентир (уточняется под компанию):
|
||
|
||
```
|
||
pyproject.toml
|
||
src/<package>/ # src-layout
|
||
__init__.py
|
||
tests/
|
||
```
|
||
|
||
> Ориентир: src-layout, `pyproject.toml`, окружение через uv. Эталон уточним.
|
||
|
||
## Линтеры и форматирование
|
||
|
||
- Линтер + форматтер: **ruff** — `ruff check .` и `ruff format --check .`
|
||
(локально `ruff format .`). Конфиг — в `pyproject.toml` (`[tool.ruff]`).
|
||
- Типы: **mypy** — `mypy .` (конфиг `[tool.mypy]`).
|
||
Дефолт: ruff (правила `E`,`F`,`I`,`UP`,`B`) + mypy строгий для нового кода. Корпоративный пресет уточним.
|
||
|
||
## Тесты
|
||
|
||
- Прогон: **pytest** — `pytest` (с покрытием — `pytest --cov`).
|
||
- Покрытие: `uv run pytest --cov`, мягкий ориентир ~80% для бизнес-логики. (пороги уточним)
|
||
|
||
## Окружение и зависимости
|
||
|
||
- Менеджер зависимостей: **uv** — `uv sync` (установка), `uv add <pkg>`; lock `uv.lock` коммитим.
|
||
- Команды запускай через `uv run …` (напр. `uv run pytest`, `uv run ruff check .`, `uv run mypy .`).
|
||
- Виртуальное окружение (`.venv`) создаёт uv; глобально пакеты не ставим.
|
||
|
||
## Коммиты и MR
|
||
|
||
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
|
||
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
|
||
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
|
||
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
|
||
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
|
||
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
|
||
- Перед MR: `ruff check .`, `ruff format --check .`, `mypy .`, `pytest` — всё зелёное.
|
||
- Описание MR: что и зачем, как проверено, ссылка на тикет (скилл `jira-workflow`).
|
||
|
||
## Чек-лист перед MR
|
||
|
||
- [ ] `ruff check .` чисто
|
||
- [ ] `ruff format --check .` чисто
|
||
- [ ] `mypy .` чисто
|
||
- [ ] `pytest` зелёные, есть тесты на новую логику / фикс
|
||
- [ ] нет секретов и закоммиченных `.env`
|
||
- [ ] описание MR со ссылкой на тикет
|