Python Pro

by jeffallan1be15d8064f8MIT11K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 5 days ago

Use when building Python 3.11+ applications requiring type safety, async programming, or robust error handling. Generates type-annotated Python code, configures mypy in strict mode, writes pytest test suites with fixtures and mocking, and validates code with black and ruff. Invoke for type hints, async/await patterns, dataclasses, dependency injection, logging configuration, and structured error handling.

Instructions onlySoftware Development
AI-generated overview

Guides writing type-safe, async-first Python 3.11+ code with pytest tests and strict mypy, black and ruff validation.

What it does
This skill provides instructions for implementing modern Python 3.11+ applications with full type annotations, async/await patterns, dataclasses, dependency injection, logging and structured error handling. It defines a workflow of analyzing the codebase, designing interfaces, implementing code, writing pytest suites with fixtures and mocking, and validating with mypy --strict, black and ruff. It also points to bundled reference documents on the type system, async patterns, the standard library, testing and packaging, and specifies output templates such as a module file, a test file and type-checking confirmation.
When to use it
Use it when building or extending Python 3.11+ applications that need type safety, async I/O, or robust error handling. It also fits setting up pytest test suites, configuring strict mypy, or applying Pythonic patterns such as dataclasses, comprehensions and context managers.
Requirements
Requires a Python 3.11+ environment with mypy, pytest, black and ruff available for validation, plus the bundled reference markdown files. No scripts ship with the skill; it is instructions only.

Python Pro

Modern Python 3.11+ specialist focused on type-safe, async-first, production-ready code.

When to Use This Skill

  • Writing type-safe Python with complete type coverage
  • Implementing async/await patterns for I/O operations
  • Setting up pytest test suites with fixtures and mocking
  • Creating Pythonic code with comprehensions, generators, context managers
  • Building packages with Poetry and proper project structure
  • Performance optimization and profiling

Core Workflow

  1. Analyze codebase — Review structure, dependencies, type coverage, test suite
  2. Design interfaces — Define protocols, dataclasses, type aliases
  3. Implement — Write Pythonic code with full type hints and error handling
  4. Test — Create comprehensive pytest suite with >90% coverage
  5. Validate — Run mypy --strict, black, ruff
    • If mypy fails: fix type errors reported and re-run before proceeding
    • If tests fail: debug assertions, update fixtures, and iterate until green
    • If ruff/black reports issues: apply auto-fixes, then re-validate

Reference Guide

Load detailed guidance based on context:

TopicReferenceLoad When
Type Systemreferences/type-system.mdType hints, mypy, generics, Protocol
Async Patternsreferences/async-patterns.mdasync/await, asyncio, task groups
Standard Libraryreferences/standard-library.mdpathlib, dataclasses, functools, itertools
Testingreferences/testing.mdpytest, fixtures, mocking, parametrize
Packagingreferences/packaging.mdpoetry, pip, pyproject.toml, distribution

Constraints

MUST DO

  • Type hints for all function signatures and class attributes
  • PEP 8 compliance with black formatting
  • Comprehensive docstrings (Google style)
  • Test coverage exceeding 90% with pytest
  • Use X | None instead of Optional[X] (Python 3.10+)
  • Async/await for I/O-bound operations
  • Dataclasses over manual init methods
  • Context managers for resource handling

MUST NOT DO

  • Skip type annotations on public APIs
  • Use mutable default arguments
  • Mix sync and async code improperly
  • Ignore mypy errors in strict mode
  • Use bare except clauses
  • Hardcode secrets or configuration
  • Use deprecated stdlib modules (use pathlib not os.path)

Code Examples

Type-annotated function with error handling

python
from pathlib import Path
def read_config(path: Path) -> dict[str, str]:    """Read configuration from a file.
    Args:        path: Path to the configuration file.
    Returns:        Parsed key-value configuration entries.
    Raises:        FileNotFoundError: If the config file does not exist.        ValueError: If a line cannot be parsed.    """    config: dict[str, str] = {}    with path.open() as f:        for line in f:            key, _, value = line.partition("=")            if not key.strip():                raise ValueError(f"Invalid config line: {line!r}")            config[key.strip()] = value.strip()    return config

Dataclass with validation

python
from dataclasses import dataclass, field
@dataclassclass AppConfig:    host: str    port: int    debug: bool = False    allowed_origins: list[str] = field(default_factory=list)
    def __post_init__(self) -> None:        if not (1 <= self.port <= 65535):            raise ValueError(f"Invalid port: {self.port}")

Async pattern

python
import asyncioimport httpx
async def fetch_all(urls: list[str]) -> list[bytes]:    """Fetch multiple URLs concurrently."""    async with httpx.AsyncClient() as client:        tasks = [client.get(url) for url in urls]        responses = await asyncio.gather(*tasks)        return [r.content for r in responses]

pytest fixture and parametrize

python
import pytestfrom pathlib import Path
@pytest.fixturedef config_file(tmp_path: Path) -> Path:    cfg = tmp_path / "config.txt"    cfg.write_text("host=localhost\nport=8080\n")    return cfg
@pytest.mark.parametrize("port,valid", [(8080, True), (0, False), (99999, False)])def test_app_config_port_validation(port: int, valid: bool) -> None:    if valid:        AppConfig(host="localhost", port=port)    else:        with pytest.raises(ValueError):            AppConfig(host="localhost", port=port)

mypy strict configuration (pyproject.toml)

toml
[tool.mypy]python_version = "3.11"strict = truewarn_return_any = truewarn_unused_configs = truedisallow_untyped_defs = true

Clean mypy --strict output looks like:

Success: no issues found in 12 source files

Any reported error (e.g., error: Function is missing a return type annotation) must be resolved before the implementation is considered complete.

Output Templates

When implementing Python features, provide:

  1. Module file with complete type hints
  2. Test file with pytest fixtures
  3. Type checking confirmation (mypy --strict passes)
  4. Brief explanation of Pythonic patterns used

Knowledge Reference

Python 3.11+, typing module, mypy, pytest, black, ruff, dataclasses, async/await, asyncio, pathlib, functools, itertools, Poetry, Pydantic, contextlib, collections.abc, Protocol

Maintained by @jeffallan, Principal Consultant at Synergetic Solutions

Documentation

Source and attribution

Source:jeffallan/claude-skillsinskills/python-proat commit1be15d8

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal