Back to list
phrazzld

python-standards

by phrazzld

2🍴 1📅 Jan 25, 2026

SKILL.md


name: python-standards description: | Modern Python development with uv, ruff, mypy, and pytest. Use when:

  • Writing or reviewing Python code
  • Setting up Python projects or pyproject.toml
  • Choosing dependency management (uv, poetry, pip)
  • Configuring linting, formatting, or type checking
  • Organizing Python packages Keywords: Python, pyproject.toml, uv, ruff, mypy, pytest, type hints, virtual environment, lockfile, package structure

Python Standards

Modern Python with uv + ruff + mypy + pytest. All config in pyproject.toml.

Toolchain

ToolPurpose
uvDependencies + virtual envs (lockfile: uv.lock)
ruffLinting + formatting (replaces black, isort, flake8)
mypyType checking (strict mode)
pytestTesting + coverage
# Setup
uv init && uv add <deps> && uv sync

# Daily workflow
uv run ruff check . --fix && uv run ruff format .
uv run mypy . && uv run pytest

Type Hints

All functions and classes must have explicit type hints:

def fetch_user(user_id: str) -> User | None:
    """Fetch user by ID."""
    ...

def process_items(items: list[Item]) -> dict[str, int]:
    ...

mypy strict mode:

[tool.mypy]
strict = true
disallow_untyped_defs = true
disallow_any_generics = true

Package Structure

Feature-based, not layer-based:

src/myproject/
  users/           # Domain
    __init__.py    # Public API: __all__ = ['User', 'UserService']
    models.py
    services.py
  orders/          # Another domain
  shared/          # Cross-cutting concerns

Error Handling

Catch specific exceptions with context:

try:
    result = parse_config(path)
except FileNotFoundError:
    logger.warning(f"Config not found: {path}")
    return defaults
except json.JSONDecodeError as e:
    raise ConfigError(f"Invalid JSON in {path}") from e

Never: bare except:, silent swallowing, except Exception.

pyproject.toml

Single source of truth (no setup.py, requirements.txt):

[project]
name = "myproject"
version = "1.0.0"
requires-python = ">=3.11"
dependencies = ["httpx", "pydantic"]

[project.optional-dependencies]
dev = ["pytest", "mypy", "ruff"]

[tool.ruff]
select = ["E", "W", "F", "I", "B", "UP", "SIM", "S", "ANN"]
line-length = 88

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = ["--cov=src", "--cov-fail-under=85"]

Anti-Patterns

  • Any without documented justification
  • Layer-based folders (/controllers, /models, /views)
  • Circular imports
  • Legacy tools (pip, black+isort, flake8)
  • Multiple config files
  • noqa comments without justification

References

Score

Total Score

50/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon