Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from collections.abc import Generator | |
| from fastapi import Depends, Request | |
| from sqlalchemy.orm import Session | |
| from app.core.config import Settings | |
| from app.core.exceptions import AuthorizationError | |
| from app.core.security import bearer_scheme, decode_access_token, extract_bearer_token | |
| from app.db.models import User | |
| from app.db.repositories import PredictionRepository, UserRepository | |
| from app.db.session import yield_session | |
| from app.ml.model_manager import ModelManager | |
| from app.services import AuthService, HealthService, PredictionService | |
| def get_settings(request: Request) -> Settings: | |
| return request.app.state.settings | |
| def get_model_manager(request: Request) -> ModelManager: | |
| return request.app.state.model_manager | |
| def get_db_session(request: Request) -> Generator[Session, None, None]: | |
| yield from yield_session(request.app.state.session_factory) | |
| def get_user_repository(session: Session = Depends(get_db_session)) -> UserRepository: | |
| return UserRepository(session) | |
| def get_prediction_repository(session: Session = Depends(get_db_session)) -> PredictionRepository: | |
| return PredictionRepository(session) | |
| def get_auth_service( | |
| settings: Settings = Depends(get_settings), | |
| user_repository: UserRepository = Depends(get_user_repository), | |
| ) -> AuthService: | |
| return AuthService(user_repository=user_repository, settings=settings) | |
| def get_prediction_service( | |
| model_manager: ModelManager = Depends(get_model_manager), | |
| prediction_repository: PredictionRepository = Depends(get_prediction_repository), | |
| ) -> PredictionService: | |
| return PredictionService( | |
| model_manager=model_manager, | |
| prediction_repository=prediction_repository, | |
| ) | |
| def get_health_service( | |
| settings: Settings = Depends(get_settings), | |
| model_manager: ModelManager = Depends(get_model_manager), | |
| ) -> HealthService: | |
| return HealthService(settings=settings, model_manager=model_manager) | |
| def get_current_user( | |
| credentials=Depends(bearer_scheme), | |
| settings: Settings = Depends(get_settings), | |
| auth_service: AuthService = Depends(get_auth_service), | |
| ) -> User: | |
| token = extract_bearer_token(credentials) | |
| token_payload = decode_access_token(token, settings) | |
| user = auth_service.get_user(token_payload.sub) | |
| if not user.is_active: | |
| raise AuthorizationError("Inactive users cannot access this resource.") | |
| return user | |
| def get_current_admin_user(current_user: User = Depends(get_current_user)) -> User: | |
| if current_user.role != "admin": | |
| raise AuthorizationError("Administrator privileges are required.") | |
| return current_user | |