python

dralgorhythm's avatarfrom dralgorhythm

Write Python code following best practices. Use when developing Python applications. Covers type hints, async, and modern tooling.

⭐1stars🔀0forks📁View on GitHub🕐Updated Dec 20, 2025

When & Why to Use This Skill

This Claude skill provides a comprehensive framework for modern Python development, focusing on industry best practices and high-performance patterns. It enables the generation of type-safe, asynchronous, and well-tested code while leveraging modern tooling like uv, Ruff, and MyPy to ensure project scalability and maintainability.

Use Cases

  • Case 1: Bootstrapping new Python projects with modern dependency management (uv) and optimized pyproject.toml configurations.
  • Case 2: Implementing high-performance asynchronous patterns for concurrent API requests, data streaming, and file I/O operations.
  • Case 3: Developing robust, type-safe applications using advanced Python type hints and functional error handling patterns (Ok/Err results).
  • Case 4: Automating code quality and testing workflows by generating comprehensive Pytest suites and configuring strict linting and formatting rules.
namepython
descriptionWrite Python code following best practices. Use when developing Python applications. Covers type hints, async, and modern tooling.
allowed-toolsRead, Write, Edit, Bash, Glob, Grep

Python Development

Project Setup

# Create project with uv
uv init my-project
cd my-project

# Add dependencies
uv add litestar
uv add --dev pytest ruff mypy

pyproject.toml

[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.13"
dependencies = ["litestar>=2.0"]

[tool.ruff]
line-length = 88
target-version = "py313"

[tool.mypy]
strict = true
python_version = "3.13"

Type Hints

from typing import TypeVar, Generic
from collections.abc import Sequence

T = TypeVar('T')

class Repository(Generic[T]):
    async def find_by_id(self, id: str) -> T | None:
        ...

    async def save(self, entity: T) -> T:
        ...

def process_items(items: Sequence[str]) -> list[str]:
    return [item.upper() for item in items]

Async Patterns

import asyncio
from collections.abc import AsyncIterator

async def fetch_all(urls: list[str]) -> list[Response]:
    async with aiohttp.ClientSession() as session:
        tasks = [fetch_one(session, url) for url in urls]
        return await asyncio.gather(*tasks)

async def stream_data() -> AsyncIterator[bytes]:
    async with aiofiles.open('large.csv', 'rb') as f:
        async for chunk in f:
            yield chunk

Error Handling

from dataclasses import dataclass
from typing import TypeVar, Generic

T = TypeVar('T')
E = TypeVar('E')

@dataclass
class Ok(Generic[T]):
    value: T

@dataclass
class Err(Generic[E]):
    error: E

Result = Ok[T] | Err[E]

def divide(a: int, b: int) -> Result[float, str]:
    if b == 0:
        return Err("Division by zero")
    return Ok(a / b)

Testing with pytest

import pytest
from unittest.mock import AsyncMock

@pytest.mark.asyncio
async def test_create_user():
    repo = AsyncMock()
    service = UserService(repo)

    user = await service.create("test@example.com")

    assert user.email == "test@example.com"
    repo.save.assert_called_once()

@pytest.fixture
def mock_database():
    with patch('app.database') as mock:
        yield mock

Tooling

# Ruff (linting + formatting)
ruff check --fix .
ruff format .

# MyPy (type checking)
mypy --strict .

# pytest
pytest -v --cov=src