coding-python
Purpose
This skill equips the AI to generate, debug, and optimize Python 3.12+ code using core features and libraries, focusing on practical implementations for data handling, async operations, and web services.
When to Use
Use this skill for tasks involving data analysis (e.g., with pandas/numpy), building RESTful APIs (e.g., FastAPI), asynchronous processing (e.g., async/await), data validation (e.g., pydantic), or environment management (e.g., venv/uv). Apply it when code requires type hints for maintainability or dataclasses for simple structs, especially in projects needing fast iteration.
Key Capabilities
- Python 3.12 Features: Use async/await for non-blocking I/O; define dataclasses with
@dataclassdecorator; enforce type hints viafrom typing import List(e.g.,def func(x: int) -> str:). - Standard Library: Leverage
asynciofor event loops (e.g.,asyncio.run(main())); usevenvfor isolated environments (e.g.,python -m venv myenv). - uv Tool: Alternative to venv; install with
pip install uv, then create env viauv venv myenvand activate withsource myenv/bin/activate. - Libraries: FastAPI for async web apps (e.g., define routes with
@app.get("/")); pandas for data frames (e.g.,df = pd.DataFrame(data)); numpy for arrays (e.g.,np.array([1, 2, 3])); pydantic for models (e.g.,from pydantic import BaseModel; class Item(BaseModel): name: str).
Usage Patterns
To accomplish tasks, structure code as follows: Import necessary modules first (e.g., import asyncio, fastapi); use async functions for I/O-bound operations (e.g., async def fetch_data(): await asyncio.sleep(1)); wrap scripts in virtual environments for dependency isolation. For projects, initialize with python -m venv .venv then install dependencies via pip install fastapi pandas numpy pydantic. When generating code, ensure type hints are included (e.g., def add(a: float, b: float) -> float: return a + b). For async patterns, run the event loop explicitly: asyncio.run(main()). Always check for compatibility with Python 3.12+ by specifying in shebang or requirements.txt.
Common Commands/API
- CLI Commands: Create venv with
python -m venv env_name --prompt env_name(use--copiesflag for Windows); activate viasource env_name/bin/activateon Unix orenv_name\Scripts\activateon Windows; run scripts withuv run script.py --watchfor auto-reload. Install packages:pip install fastapi[all]oruv add fastapi. - API Endpoints/Methods: In FastAPI, define an endpoint like:
from fastapi import FastAPI; app = FastAPI(); @app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id}. For pandas, usedf.groupby('column').mean(); for numpy,np.dot(array1, array2); for pydantic, validate data withitem = Item(name="example"). - Config Formats: Use JSON for FastAPI configs (e.g.,
{"debug": true}in settings.py); environment variables for keys (e.g.,os.environ.get('API_KEY')); requirements.txt for dependencies (e.g.,fastapi>=0.95.0\npandas==2.0.0).
Integration Notes
Integrate this skill by setting up a Python project: First, create a venv and install libraries with pip install -r requirements.txt. For external services, use env vars for authentication (e.g., set export API_KEY=your_key and access via os.getenv('API_KEY') in code). When combining with other tools, import as needed (e.g., for async database queries, use async with database.connect() as conn:). Ensure compatibility: Python 3.12+ is required, so specify in pyproject.toml with [tool.poetry.dependencies] python = "^3.12". For testing, use pytest with pytest --asyncio-mode=auto to handle async tests.
Error Handling
Always wrap potentially failing code in try-except blocks: try: result = await fetch_data() except asyncio.TimeoutError as e: print(f"Timeout: {e}"). Handle specific library errors, like pandas' KeyError for missing columns (e.g., try: df['nonexistent'] except KeyError: df['nonexistent'] = 0). For pydantic, catch ValidationError (e.g., from pydantic import ValidationError; try: item = Item(name=123) except ValidationError as e: log_error(e)). Use FastAPI's exception handlers: @app.exception_handler(RequestValidationError) async def validation_exception_handler(request, exc): return JSONResponse(status_code=400, content={"detail": exc.errors()}). Log errors with import logging; logging.error("Message") and ensure graceful shutdown in async code via try-finally.
Usage Examples
- Build a FastAPI Endpoint: To create a simple async API for data retrieval, use:
from fastapi import FastAPI; import asyncio; app = FastAPI(); async def get_data(): await asyncio.sleep(1); return {"data": "fetched"}; @app.get("/") async def root(): return await get_data(). Run withuvicorn main:app --reload --port 8000. - Data Analysis with Pandas and Numpy: For processing a dataset, import libraries and compute:
import pandas as pd; import numpy as np; df = pd.DataFrame({'A': [1, 2]}); result = np.mean(df['A']); print(result) # Outputs mean value. Use in a script: Save as analyze.py and run viapython analyze.py.
Graph Relationships
- Related to: coding cluster (e.g., shares tags with "coding-general" for broader scripting; connects to "web-dev" via FastAPI for API building; links to "data-science" through pandas/numpy for analysis workflows).