ulfblk-core
Core utilities for building web APIs with FastAPI: middleware, schemas, structured logging, and health checks.
Part of Bloques Reciclables - an open source ecosystem of reusable code blocks.
Installation
uv add ulfblk-core
# or
pip install ulfblk-core
Features
Middleware
RequestIDMiddleware - Distributed tracing via X-Request-ID header. Generates UUID4 if not present, propagates through contextvars for logging.
TimingMiddleware - Measures request duration and adds X-Process-Time header. Logs warnings for slow requests (>1s).
from fastapi import FastAPI
from ulfblk_core.middleware import RequestIDMiddleware, TimingMiddleware
app = FastAPI()
app.add_middleware(TimingMiddleware)
app.add_middleware(RequestIDMiddleware)
Schemas
Standardized Pydantic v2 schemas for API responses:
from ulfblk_core.schemas import PaginatedResponse, ErrorResponse, SuccessResponse, HealthResponse
# Paginated response
response = PaginatedResponse.create(
items=my_items,
total=100,
page=1,
page_size=20,
)
# Health check
health = HealthResponse.healthy(service="my-api", version="1.0.0")
Structured Logging
Structured logging with structlog, automatic request ID injection, and JSON/console output:
from ulfblk_core.logging import setup_logging, get_logger
setup_logging(level="INFO", json_format=True, service_name="my-api")
logger = get_logger(__name__)
logger.info("user.created", user_id="123", tenant="acme")
# Output: {"event": "user.created", "user_id": "123", "request_id": "abc-def", ...}
Health Check Router
Ready-to-use health check endpoint:
from ulfblk_core.health import health_router
app.include_router(health_router)
# GET /health -> {"status": "healthy", "service": "api", "version": "0.1.0", ...}
Full Example
from fastapi import FastAPI
from ulfblk_core.middleware import RequestIDMiddleware, TimingMiddleware
from ulfblk_core.health import health_router
from ulfblk_core.logging import setup_logging
app = FastAPI(title="My API")
setup_logging()
app.add_middleware(TimingMiddleware)
app.add_middleware(RequestIDMiddleware)
app.include_router(health_router)
@app.get("/")
async def root():
return {"message": "Running with ulfblk-core"}
See the api-simple example for a runnable version.
Requirements
- Python 3.11+
- FastAPI 0.115+
- Pydantic 2.0+
License
Metadata
Release files for ulfblk-core 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ulfblk_core-0.1.0.tar.gz | 9.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ulfblk_core-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.9 kB
Release files / ulfblk_core-0.1.0.tar.gz
| Download URL | ulfblk_core-0.1.0.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69f0be3281bb2c436f9c635c596dd508cd23de6defa74d028d79c4a20c999661
|
|
BLAKE2b-256 checksum How to use checksums |
59137c276961317fcd4aa69aeeeb62dfc30f81f2af12775a56ff3cbf109b927c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / ulfblk_core-0.1.0-py3-none-any.whl
| Download URL | ulfblk_core-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5329bcafb667d2eb5ce2b247de006269db5b912318a328eecaa03b2efffe5873
|
|
BLAKE2b-256 checksum How to use checksums |
09089d1e108142c4cc523d364332e9d47559f7f55fbdf81530bcb755396d73c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|