servicekit 2.0.1__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {servicekit-2.0.1 → servicekit-2.0.2}/PKG-INFO +1 -1
- {servicekit-2.0.1 → servicekit-2.0.2}/pyproject.toml +1 -1
- {servicekit-2.0.1 → servicekit-2.0.2}/pyproject.toml.orig +1 -1
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/middleware.py +6 -2
- {servicekit-2.0.1 → servicekit-2.0.2}/README.md +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/__init__.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/alembic/env.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/alembic/script.py.mako +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/alembic/versions/20251010_0927_4d869b5fb06e_initial_schema.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/__init__.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/app.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/apps/landing/index.html +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/apps/landing/manifest.json +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/auth.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/crud.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/dependencies.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/monitoring.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/pagination.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/registration.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/router.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/__init__.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/health.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/job.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/metrics.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/system.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/service_builder.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/sse.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/utilities.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/database.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/exceptions.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/gunicorn.conf.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/logging.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/manager.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/models.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/py.typed +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/repository.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/scheduler.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/schemas.py +0 -0
- {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: servicekit
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: Async SQLAlchemy framework with FastAPI integration - reusable foundation for building data services
|
|
5
5
|
Keywords: fastapi,sqlalchemy,async,database,rest-api,crud,framework
|
|
6
6
|
Author: Morten Hansen
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "servicekit"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.2"
|
|
4
4
|
description = "Async SQLAlchemy framework with FastAPI integration - reusable foundation for building data services"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "Morten Hansen", email = "morten@dhis2.org" }]
|
|
@@ -5,6 +5,7 @@ from typing import Any, Awaitable, Callable
|
|
|
5
5
|
|
|
6
6
|
from fastapi import Request, Response, status
|
|
7
7
|
from fastapi.encoders import jsonable_encoder
|
|
8
|
+
from fastapi.exceptions import RequestValidationError
|
|
8
9
|
from fastapi.responses import JSONResponse
|
|
9
10
|
from pydantic import ValidationError as PydanticValidationError
|
|
10
11
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
@@ -141,9 +142,11 @@ async def database_error_handler(request: Request, exc: Exception) -> JSONRespon
|
|
|
141
142
|
|
|
142
143
|
|
|
143
144
|
async def validation_error_handler(request: Request, exc: Exception) -> JSONResponse:
|
|
144
|
-
"""Handle validation errors
|
|
145
|
+
"""Handle Pydantic and FastAPI request validation errors as RFC 9457 Problem Details with structured errors."""
|
|
145
146
|
trace_id = str(ULID())
|
|
146
|
-
errors =
|
|
147
|
+
errors = (
|
|
148
|
+
jsonable_encoder(exc.errors()) if isinstance(exc, (PydanticValidationError, RequestValidationError)) else None
|
|
149
|
+
)
|
|
147
150
|
|
|
148
151
|
logger.warning(
|
|
149
152
|
"validation.error",
|
|
@@ -216,6 +219,7 @@ def add_error_handlers(app: Any) -> None:
|
|
|
216
219
|
app.add_exception_handler(SQLAlchemyError, database_error_handler)
|
|
217
220
|
app.add_exception_handler(IntegrityError, database_error_handler)
|
|
218
221
|
app.add_exception_handler(PydanticValidationError, validation_error_handler)
|
|
222
|
+
app.add_exception_handler(RequestValidationError, validation_error_handler)
|
|
219
223
|
|
|
220
224
|
|
|
221
225
|
def add_logging_middleware(app: Any) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|