一键导入
python-dev
Python development. Use for Python, FastAPI, Pydantic, asyncpg, pytest, pandas, SQLAlchemy.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Python development. Use for Python, FastAPI, Pydantic, asyncpg, pytest, pandas, SQLAlchemy.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Compare Claude Code and Codex on the same real code-change task with isolated worktrees, identical gates, transcripts, time, and cost.
Align AGENTS.md, rules, README, plans, and chronicles with the codebase; use --clean to archive obsolete task docs into ATLAS.md.
Research current best practices and turn the evidence into a clear recommendation. Use for state-of-the-art, evidence-based, optimal-approach, comparison, or pros-and-cons questions in any field.
Clarify an ambiguous or consequential change before planning or implementation when more than one sound approach exists.
Add CHANGELOG.md entries, derive them from commits, or cut a Keep a Changelog and SemVer release.
Create a user-requested Conventional Commit from the staged changes.
基于 SOC 职业分类
| name | python-dev |
| description | Python development. Use for Python, FastAPI, Pydantic, asyncpg, pytest, pandas, SQLAlchemy. |
| user-invocable | true |
| allowed-tools | Glob, Read, Grep, Bash, Task, Skill, Edit, Write, AskUserQuestion |
Announce: "I'm using the python-dev skill. Following the 4-phase workflow."
You MUST read workflow.md NOW and follow ALL 4 phases defined there. The sections below provide Python-specific inputs for each phase.
Read patterns.md during Phase 1.
If you lost workflow.md from context: Re-read ../../shared/workflow.md NOW before continuing.
WORKFLOW STATE Verification line: pytest tests/ -x -q, ruff check, ruff format --check
Phase 3 Tier A commands:
pytest tests/ -x -q — default suite (unit + golden); excludes e2e and integration markerspytest tests/ -x -q -m e2e — e2e replay tests (no DB)pytest tests/ -x -q -m integration — integration tests (requires real DB)pytest tests/ -x -q -m '' — everythingruff check . — lintingruff format --check . — formattingpre-commit run --files <touched> — full hook chain (ruff + ruff-format + check-toml/yaml/merge-conflict + commitizen)Phase 3 Tier B additional MCP verifications:
app/model/<domain>/{models.py, requests.py, responses.py}; cross-cutting types in model/common/. Separate *Request from *Response; never merge. When a response carries both DB-mapped fields AND computed/Python-only fields, split into a *DbRow base (SELECT columns only) + a *Model subclass that adds enrichment and @computed_field properties. Query builders and aggregation utilities receive the DB-row base. Composition over deep inheritance.BaseSettings hierarchy, SecretStr for sensitive values, @lru_cache(maxsize=1) on the get_settings accessor. Tests that mutate env call get_settings.cache_clear().Exception handler in create_app + a per-domain-error handler in app/exception_handlers.py. Domain errors raised straight from service/repository; never wrapped in HTTPException. Handler detail strings hardcoded — never str(exc).except asyncio.CancelledError: raise separately from except Exception. Bounded asyncio.Queue for background work. asyncio.gather for independent queries. Heavy SDK clients constructed once at lifespan; blocking calls wrapped in asyncio.to_thread at adapter seams.patterns.mdpatterns.md.pytest tests/ -x -q.Exception handler in create_app; never per-endpoint try / except → HTTPException.TestClient(app, raise_server_exceptions=False) for any test that exercises the global handler.Add these to the shared workflow's verification checklist:
list[str] / dict[str, int], PEP 604 str | None; no from __future__ import annotations)from typing import List, Dict, Optional — use built-insBaseSettings for configuration; SecretStr for sensitive values*DbRow base + *Model subclass where DB-mapped and computed fields coexistjson_schema_extra used ONLY for OpenAPI examples — never for internal flagsException handler + per-domain handlers in app/exception_handlers.py; routes/services raise domain errors, never HTTPExceptionstr(exc) to clientsexcept asyncio.CancelledError re-raised; never swallowed in except BaseException@lru_cache(maxsize=1) on get_settings; tests call cache_clear() after env mutationsasyncio.to_thread at adapter seamsasyncpg.Record$1, $2) — no f-string interpolation of user inputasyncio.gather)IN (subquery) in one round tripasyncio_mode="auto" in pyproject.toml; markers golden, e2e, integrationTestClient(app, raise_server_exceptions=False) for tests that exercise the global handlerMagicMock(spec=Class) + AsyncMock for async methods; autouse fixture clears app.dependency_overridesiterrows()ruff check . passes; ruff format --check . passespytest tests/ -x -q passes (or alternative verification documented)