playbook/antigravity-awesome-skills/skills/ecl-harness-engineer/references/adapters/python.md

7.3 KiB

adapter
language display_name version detection commands package_manager route_detection import_analysis layer_conventions dependency_detection linter naming ci
python Python 1.0
files content_patterns confidence
pyproject.toml
setup.py
requirements.txt
Pipfile
file pattern
pyproject.toml \[project\]|\[tool\.poetry\]
0.90
build test lint lint_arch format start dev
null pytest ruff check . python scripts/lint_deps.py src/ ruff format . null null
detection default install_command
lockfile manager
poetry.lock poetry
lockfile manager
uv.lock uv
lockfile manager
Pipfile.lock pipenv
lockfile manager
pdm.lock pdm
pip {manager} install
server_indicators cli_indicators frontend_indicators patterns
pattern description frameworks
from fastapi|import fastapi|FastAPI() FastAPI ASGI framework
fastapi
pattern description frameworks
from flask|import flask|Flask(__name__) Flask WSGI framework
flask
pattern description frameworks
from django|import django Django web framework
django
pattern description frameworks
from aiohttp|import aiohttp.web aiohttp async web framework
aiohttp
pattern description frameworks
from starlette|import starlette Starlette ASGI framework
starlette
pattern description frameworks
from litestar|import litestar Litestar ASGI framework
litestar
pattern description frameworks
import click|from click Click CLI framework
click
pattern description frameworks
import typer|from typer Typer CLI framework
typer
pattern description frameworks
import argparse|from argparse Standard library argparse
argparse
pattern description frameworks
import fire|from fire Google Python Fire
fire
type regex groups frameworks
route @(?:app|router).(get|post|put|delete|patch)\s*(\s*["\x27]([^"\x27]+)["\x27]
method
path
fastapi
starlette
litestar
type regex groups frameworks
route @(?:app|bp|blueprint).(route)\s*(\s*["\x27]([^"\x27]+)["\x27](?:.*methods\s*=\s*[([^]]+)])?
_
path
method
flask
type regex groups frameworks
route path\s*(\s*["\x27]([^"\x27]+)["\x27]
path
django
type regex groups frameworks
command @\w+.command\s*(\s*(?:name\s*=\s*)?["\x27]?([^"\x27)]+)
command_name
click
type regex groups frameworks
command @app.command\s*(\s*(?:name\s*=\s*)?["\x27]?([^"\x27)]*)
command_name
typer
list_packages import_pattern source_extensions module_root_file
null ^(?:from|import)\s+([\w.]+)
.py
pyproject.toml
patterns
layer paths description
0
src/models
src/schemas
src/types
models
schemas
Data models, Pydantic schemas, type definitions
layer paths description
1
src/utils
src/lib
src/common
utils
lib
Shared utilities
layer paths description
2
src/services
src/core
src/domain
services
core
Business logic, service layer
layer paths description
3
src/api
src/routes
src/views
src/handlers
api
routes
API endpoints, request handlers
layer paths description
4
src/main.py
src/app.py
src/cli.py
main.py
app.py
Application entry points
manifest_file databases services env_var_patterns
pyproject.toml
pattern type default_port
psycopg|asyncpg|sqlalchemy.*postgres|databases.*postgres postgres 5432
pattern type default_port
pymysql|aiomysql|mysqlclient mysql 3306
pattern type default_port
pymongo|motor mongodb 27017
pattern type default_port
redis|aioredis redis 6379
pattern type default_port
aiosqlite|sqlite3 sqlite 0
pattern type default_port
confluent-kafka|aiokafka kafka 9092
pattern type default_port
pika|aio-pika rabbitmq 5672
pattern type default_port
elasticsearch|elastic-transport elasticsearch 9200
pattern
os.environ.get(\s*["\x27]([^"\x27]+)["\x27]
pattern
os.environ"\x27]([^"\x27]+)["\x27
pattern
os.getenv(\s*["\x27]([^"\x27]+)["\x27]
template_section script_extension run_command
python-linter .py python scripts/lint_deps.py src/
file_pattern test_pattern directory_style
^[a-z][a-z0-9_]*.py$ ^test_[a-z][a-z0-9_]*.py$ snake_case
github_actions
image setup_steps cache_paths
python:3.12
uses: actions/setup-python@v5 with: python-version: '3.12'
~/.cache/pip
.venv

Python Adapter

Server Start Command Inference

  1. Existing harness/config/environment.json startup command, if present
  2. FastAPI detected → python -m uvicorn {module}:app --port 8080
    • Module inferred from main app file location
  3. Flask detected → python -m flask run --port 8080
  4. Django detected → python manage.py runserver 8080
  5. main.py exists → python main.py

Virtual Environment Detection

The adapter checks for virtual environments in this order:

  1. .venv/ directory → source .venv/bin/activate
  2. venv/ directory → source venv/bin/activate
  3. poetry.lockpoetry shell or prefix with poetry run
  4. uv.lock → prefix with uv run
  5. Pipfile.lock → prefix with pipenv run

Framework-Specific Notes

FastAPI

  • Routes via decorators: @app.get("/path"), @router.post("/path")
  • Dependency injection via Depends()
  • Auto-generated OpenAPI docs at /docs and /redoc
  • Start with uvicorn: uvicorn app.main:app --reload

Flask

  • Routes via decorators: @app.route("/path", methods=["GET"])
  • Blueprints for modular routing
  • Start with: flask run or python -m flask run

Django

  • URL configuration in urls.py: path("api/", include("app.urls"))
  • Class-based views and function-based views
  • Start with: python manage.py runserver
  • Migrations: python manage.py migrate

Click / Typer (CLI)

  • Click: @cli.command() decorator pattern
  • Typer: @app.command() decorator pattern, with auto-generated help

Type Checking

Python projects may use type checkers:

  • mypy — most common, configured in pyproject.toml or mypy.ini
  • pyright — Microsoft's type checker, often via Pylance
  • pytype — Google's type checker

Detection: check pyproject.toml [tool.mypy] or mypy.ini existence.