SuperAPI AI Directory

python

Coding & development

View repository

Updated 10-15 19:53

About this skill

Python Domain Skill

Modern Type Hints (3.10+)

# Union with | operator
def process(value: int | str | None) -> dict[str, int]: ...

# Type aliases
type UserID = int
type Config = dict[str, str | int | bool]

# See references/type-hints-advanced.md for:
# - Generics and TypeVars
# - Protocols (structural typing)
# - Function overloading

Testing with Pytest

# Fixtures
@pytest.fixture
def sample_user():
    return {"name": "Alice", "email": "alice@example.com"}

# Parametrize
@pytest.mark.parametrize("input,expected", [
    (0, 0), (1, 1), (2, 4),
])
def test_square(input, expected):
    assert input ** 2 == expected

# Mock with pytest-mock
def test_api(mocker):
    mock_get = mocker.patch("requests.get")
    mock_get.return_value.json.return_value = {"status": "ok"}
    result = fetch_data()
    assert result["status"] == "ok"

Coverage target: 80%+

pytest --cov=myapp --cov-report=term-missing --cov-fail-under=80

See references/testing-pytest.md for advanced fixtures, mocking patterns, markers, plugins.

Tooling

Ruff (Linting + Formatting)

Replaces Black, isort, flake8, pyupgrade.

ruff check --fix . && ruff format .
# pyproject.toml
[tool.ruff]
line-length = 88
target-version = "py310"

[tool.ruff.lint]
select = ["E", "W", "F", "I", "N", "UP", "B", "C4", "SIM"]
ignore = ["E501"]

[tool.ruff.format]
quote-style = "double"

Mypy (Type Checking)

[tool.mypy]
python_version = "3.10"
strict = true
warn_return_any = true
disallow_untyped_defs = true

Poetry (Dependency Management)

poetry init
poetry add requests
poetry add --group dev pytest pytest-cov ruff mypy
poetry install
poetry run pytest

See references/tooling-config.md for complete ruff rule sets, mypy options, pre-commit hooks, CI/CD.

Async Programming

# Concurrent execution
async def fetch_all(urls: list[str]) -> list[dict]:
    return await asyncio.gather(*[fetch_data(url) for url in urls])

# Async context manager
class AsyncDatabase:
    async def __aenter__(self):
        self.connection = await connect()
        return self

    async def __aexit__(self, *args):
        await self.connection.close()

See references/async-patterns.md for task management, semaphores, queues, error handling, pitfalls.

Data Modeling

Use case Choose Why
Internal data, simple containers @dataclass Stdlib, fast, no deps
Performance-critical, immutable @dataclass(frozen=True, slots=True) Minimal overhead
External/untrusted data, APIs pydantic.BaseModel Auto-validation, serialization
Config from environment pydantic_settings.BaseSettings Env var parsing, type coercion
# Dataclass: internal data
@dataclass(frozen=True)
class Point:
    x: float
    y: float

# Pydantic: external data with validation
class UserCreate(BaseModel):
    name: str = Field(..., min_length=1, max_length=100)
    email: EmailStr
    age: int = Field(..., ge=0, le=150)

    @field_validator("email")
    @classmethod
    def normalize_email(cls, v: str) -> str:
        return v.lower().strip()

See references/dataclasses-pydantic.md for advanced features, nested models, settings, JSON schema.

Anti-patterns Quick Reference

Anti-pattern Fix
Mutable default def f(x=[]) def f(x=None) then x = x or []
Bare except: except SpecificError as e:
== None / == True is None / is True
Modify list while iterating List comprehension filter
f = open() without with with open() as f:
String concat in loop += "".join(...)
Manual index counter enumerate()
type(x) == list isinstance(x, list)
print() debugging logging.getLogger(__name__)
Star imports from x import * Explicit imports

Project Setup Checklist

# 1. Initialize
poetry init
poetry add <dependencies>
poetry add --group dev pytest pytest-cov ruff mypy pre-commit

# 2. Configure pyproject.toml
# [tool.ruff], [tool.mypy], [tool.pytest.ini_options]

# 3. Install hooks
pre-commit install

# 4. Full quality check
ruff check --fix . && ruff format . && mypy . && pytest --cov=myapp --cov-fail-under=80

Commands

ruff format . && ruff check --fix .                              # Format + lint
mypy .                                                           # Type check
pytest --cov=myapp --cov-report=term-missing --cov-fail-under=80 # Test + coverage

Reference Files

  • references/type-hints-advanced.md - Generics, Protocols, TypeVars, overloads, TypedDict
  • references/async-patterns.md - Task management, queues, synchronization, performance
  • references/testing-pytest.md - Fixtures, parametrize, mocking, markers, plugins
  • references/tooling-config.md - ruff, mypy, poetry, pre-commit, bandit configs
  • references/dataclasses-pydantic.md - Data modeling, validation, serialization, settings