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.
Files changed (39) hide show
  1. {servicekit-2.0.1 → servicekit-2.0.2}/PKG-INFO +1 -1
  2. {servicekit-2.0.1 → servicekit-2.0.2}/pyproject.toml +1 -1
  3. {servicekit-2.0.1 → servicekit-2.0.2}/pyproject.toml.orig +1 -1
  4. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/middleware.py +6 -2
  5. {servicekit-2.0.1 → servicekit-2.0.2}/README.md +0 -0
  6. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/__init__.py +0 -0
  7. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/alembic/env.py +0 -0
  8. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/alembic/script.py.mako +0 -0
  9. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/alembic/versions/20251010_0927_4d869b5fb06e_initial_schema.py +0 -0
  10. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/__init__.py +0 -0
  11. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/app.py +0 -0
  12. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/apps/landing/index.html +0 -0
  13. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/apps/landing/manifest.json +0 -0
  14. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/auth.py +0 -0
  15. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/crud.py +0 -0
  16. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/dependencies.py +0 -0
  17. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/monitoring.py +0 -0
  18. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/pagination.py +0 -0
  19. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/registration.py +0 -0
  20. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/router.py +0 -0
  21. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/__init__.py +0 -0
  22. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/health.py +0 -0
  23. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/job.py +0 -0
  24. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/metrics.py +0 -0
  25. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/routers/system.py +0 -0
  26. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/service_builder.py +0 -0
  27. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/sse.py +0 -0
  28. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/api/utilities.py +0 -0
  29. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/database.py +0 -0
  30. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/exceptions.py +0 -0
  31. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/gunicorn.conf.py +0 -0
  32. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/logging.py +0 -0
  33. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/manager.py +0 -0
  34. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/models.py +0 -0
  35. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/py.typed +0 -0
  36. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/repository.py +0 -0
  37. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/scheduler.py +0 -0
  38. {servicekit-2.0.1 → servicekit-2.0.2}/src/servicekit/schemas.py +0 -0
  39. {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.1
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.1"
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
  requires-python = ">=3.13,<3.14"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "servicekit"
3
- version = "2.0.1"
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 and return RFC 9457 Problem Details with structured 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 = jsonable_encoder(exc.errors()) if isinstance(exc, PydanticValidationError) else None
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