dataenginex.api¶
FastAPI components — auth, health checks, error handling, pagination, rate limiting.
dataenginex.api
¶
Reusable API components — auth, health, errors, pagination, rate limiting, quality.
Public API::
from dataenginex.api import (
HealthChecker, HealthStatus, ComponentHealth,
APIHTTPException, BadRequestError, NotFoundError, ServiceUnavailableError,
PaginatedResponse, paginate,
AuthMiddleware, AuthUser, create_token, decode_token,
RateLimiter, RateLimitMiddleware,
get_quality_store, set_quality_store,
)
AuthMiddleware
¶
Bases: BaseHTTPMiddleware
Starlette middleware that enforces JWT auth when enabled.
When DEX_AUTH_ENABLED is "true" (case-insensitive), every request
to a non-public path must carry a valid Authorization: Bearer <token>
header. The decoded claims are stored on request.state.auth_user.
Source code in packages/dataenginex/src/dataenginex/api/auth.py
dispatch(request, call_next)
async
¶
Validate the bearer token and attach auth_user to request state.
Source code in packages/dataenginex/src/dataenginex/api/auth.py
AuthUser
dataclass
¶
APIHTTPException
¶
Bases: HTTPException
Base HTTP exception with error code and details.
Source code in packages/dataenginex/src/dataenginex/api/errors.py
BadRequestError
¶
Bases: APIHTTPException
Raised for 400 validation or malformed requests.
Source code in packages/dataenginex/src/dataenginex/api/errors.py
NotFoundError
¶
Bases: APIHTTPException
Raised for 404 not found errors.
Source code in packages/dataenginex/src/dataenginex/api/errors.py
ServiceUnavailableError
¶
Bases: APIHTTPException
Raised when a dependency is unavailable.
Source code in packages/dataenginex/src/dataenginex/api/errors.py
ComponentHealth
dataclass
¶
Health status of a single dependency component.
Attributes:
| Name | Type | Description |
|---|---|---|
name |
str
|
Component identifier (e.g. |
status |
HealthStatus
|
Current health status. |
message |
str | None
|
Optional human-readable message. |
duration_ms |
float | None
|
Time taken for the health check in milliseconds. |
Source code in packages/dataenginex/src/dataenginex/api/health.py
to_dict()
¶
Serialize to a plain dictionary suitable for JSON responses.
Source code in packages/dataenginex/src/dataenginex/api/health.py
HealthChecker
¶
Runs health checks for DEX dependencies.
Source code in packages/dataenginex/src/dataenginex/api/health.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | |
check_all()
async
¶
Run all dependency health checks concurrently.
overall_status(components)
¶
Derive an aggregate status from individual component results.
Source code in packages/dataenginex/src/dataenginex/api/health.py
check_database()
async
¶
Check database connectivity via TCP probe.
Source code in packages/dataenginex/src/dataenginex/api/health.py
check_cache()
async
¶
Check cache connectivity via TCP probe.
Source code in packages/dataenginex/src/dataenginex/api/health.py
check_external_api()
async
¶
Check external API reachability via HTTP GET.
Source code in packages/dataenginex/src/dataenginex/api/health.py
HealthStatus
¶
PaginatedResponse
¶
PaginationMeta
¶
Bases: BaseModel
Pagination metadata returned alongside results.
Source code in packages/dataenginex/src/dataenginex/api/pagination.py
RateLimiter
¶
In-memory token-bucket rate limiter.
Parameters¶
requests_per_minute: Sustained request rate per client. burst: Maximum instantaneous burst size.
Source code in packages/dataenginex/src/dataenginex/api/rate_limit.py
allow(client_id)
¶
Return True if client_id has remaining tokens; consume one token.
Source code in packages/dataenginex/src/dataenginex/api/rate_limit.py
get_stats()
¶
Return current rate-limiter configuration and client count.
cleanup(max_age_seconds=300.0)
¶
Evict buckets idle for more than max_age_seconds.
Source code in packages/dataenginex/src/dataenginex/api/rate_limit.py
RateLimitMiddleware
¶
Bases: BaseHTTPMiddleware
Starlette middleware applying per-IP rate limiting.
Source code in packages/dataenginex/src/dataenginex/api/rate_limit.py
dispatch(request, call_next)
async
¶
Enforce per-IP rate limits; return 429 when tokens are exhausted.
Source code in packages/dataenginex/src/dataenginex/api/rate_limit.py
create_token(payload, secret, ttl=3600)
¶
Create a HS256 JWT token.
Parameters¶
payload:
Claims dict (e.g. {"sub": "user123", "roles": ["admin"]}).
secret:
HMAC shared secret.
ttl:
Time-to-live in seconds (default 1 hour).
Source code in packages/dataenginex/src/dataenginex/api/auth.py
decode_token(token, secret)
¶
Decode and verify a HS256 JWT token. Raises ValueError on failure.
Source code in packages/dataenginex/src/dataenginex/api/auth.py
paginate(items, *, cursor=None, limit=20, max_limit=100)
¶
Slice items and return a PaginatedResponse.
Parameters¶
items: Full list of items to paginate. cursor: Opaque cursor from a previous response (or None for the first page). limit: Number of items per page. max_limit: Hard ceiling on limit to prevent abuse.
Source code in packages/dataenginex/src/dataenginex/api/pagination.py
get_quality_store()
¶
set_quality_store(store)
¶
Replace the module-level quality store (call at app startup).