Python Automation Skill
This skill provides concrete Python patterns to implement robust REST API automations.
When to use this skill
- •Python scripts that call one or more REST APIs
- •ETL jobs, sync tools, webhook handlers
- •CLI tools or small services that integrate external systems
Preferred stack (defaults)
- •HTTP client: httpx (preferred) or requests
- •Config: env vars +
.env(optional) with pydantic-settings if appropriate - •Logging: stdlib
loggingwith structured-ish fields - •Testing: pytest (+ respx for httpx mocking when useful)
If the project already uses different tools, follow project conventions.
Reference architecture (small but scalable)
- •
client.py: API client wrapper (auth headers, retries, pagination helpers) - •
models.py: typed payload models (dataclasses or pydantic) - •
sync.py: orchestration logic (fetch -> transform -> upsert) - •
main.py: CLI entrypoint - •
tests/: unit tests for transform + client behavior
HTTP rules (mandatory)
- •Always set timeouts (connect + read)
- •Centralize request sending in one function so retries/logging are consistent
- •Never log secrets (Authorization headers, tokens)
Retry policy guidance
Retry on:
- •network errors/timeouts
- •429 (respect Retry-After when present)
- •500–599 Optional: 408, and 409 only if operation is safe and semantics known
Do NOT retry on:
- •most 400–499 (unless explicitly safe)
Timeouts
- •Set explicit timeouts; do not rely on defaults.
- •Use smaller connect timeout; moderate read timeout.
Pagination patterns
Support at least one helper that can handle:
- •
nextURL in response - •cursor token in response
- •page/limit parameters
Add a hard stop:
- •max pages OR max items OR max elapsed time
Idempotency patterns (Python)
Choose and document:
- •Use an
Idempotency-Keyheader when supported - •Upsert using a stable
external_id - •Persist a lightweight state store:
- •simplest: SQLite file (recommended for OSS)
- •alternative: JSONL log + compaction
Minimum: ensure repeated runs don’t create duplicates.
Observability (Python)
Minimum logs should include:
- •
run_id - •request: method, url/path, status_code, elapsed_ms, attempt
- •record counts: processed/created/updated/skipped/failed
Also include a final summary log line.
Verification requirements
For non-trivial work, add:
- •unit tests for mapping/transform logic
- •at least one test for pagination or retry behavior (mocked)
- •a “dry-run” CLI flag (prints intended writes)
Output format when writing code
- •Provide a small directory layout
- •Explain how to configure env vars
- •Include exact commands to run (and test)