fix syntax errors

This commit is contained in:
johnpccd 2025-05-25 21:57:28 +02:00
parent d11ce070ca
commit 8947b9eafc
7 changed files with 81 additions and 43 deletions

View File

@ -28,9 +28,9 @@ router = APIRouter(tags=["Authentication"], prefix="/auth")
async def create_api_key( async def create_api_key(
key_data: ApiKeyCreate, key_data: ApiKeyCreate,
request: Request, request: Request,
auth_service: AuthServiceDep,
user_id: str = Query(..., description="User ID for the API key"), user_id: str = Query(..., description="User ID for the API key"),
team_id: str = Query(..., description="Team ID for the API key"), team_id: str = Query(..., description="Team ID for the API key")
auth_service: AuthServiceDep = Depends()
): ):
""" """
Create a new API key for a specific user and team Create a new API key for a specific user and team
@ -61,8 +61,8 @@ async def create_api_key_for_user(
user_id: str, user_id: str,
key_data: ApiKeyCreate, key_data: ApiKeyCreate,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), auth_service: AuthServiceDep,
auth_service: AuthServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Create a new API key for a specific user (admin only) Create a new API key for a specific user (admin only)
@ -97,8 +97,8 @@ async def create_api_key_for_user(
@router.get("/api-keys", response_model=ApiKeyListResponse) @router.get("/api-keys", response_model=ApiKeyListResponse)
async def list_api_keys( async def list_api_keys(
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), auth_service: AuthServiceDep,
auth_service: AuthServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
List API keys for the current authenticated user List API keys for the current authenticated user
@ -125,8 +125,8 @@ async def list_api_keys(
async def revoke_api_key( async def revoke_api_key(
key_id: str, key_id: str,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), auth_service: AuthServiceDep,
auth_service: AuthServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Revoke (deactivate) an API key Revoke (deactivate) an API key
@ -158,8 +158,8 @@ async def revoke_api_key(
@router.get("/verify", status_code=status.HTTP_200_OK) @router.get("/verify", status_code=status.HTTP_200_OK)
async def verify_authentication( async def verify_authentication(
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), auth_service: AuthServiceDep,
auth_service: AuthServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Verify the current authentication status Verify the current authentication status

View File

@ -25,11 +25,11 @@ router = APIRouter(tags=["Images"], prefix="/images")
@router.post("", response_model=ImageResponse, status_code=status.HTTP_201_CREATED) @router.post("", response_model=ImageResponse, status_code=status.HTTP_201_CREATED)
async def upload_image( async def upload_image(
request: Request, request: Request,
image_service: ImageServiceDep,
file: UploadFile = File(..., description="Image file to upload"), file: UploadFile = File(..., description="Image file to upload"),
description: Optional[str] = Query(None, description="Optional description for the image"), description: Optional[str] = Query(None, description="Optional description for the image"),
collection_id: Optional[str] = Query(None, description="Optional collection ID to associate with the image"), collection_id: Optional[str] = Query(None, description="Optional collection ID to associate with the image"),
current_user: UserModel = Depends(get_current_user), current_user: UserModel = Depends(get_current_user)
image_service: ImageServiceDep = Depends()
): ):
""" """
Upload a new image Upload a new image
@ -75,11 +75,11 @@ async def upload_image(
@router.get("", response_model=ImageListResponse) @router.get("", response_model=ImageListResponse)
async def list_images( async def list_images(
request: Request, request: Request,
image_service: ImageServiceDep,
skip: int = Query(0, ge=0, description="Number of records to skip for pagination"), skip: int = Query(0, ge=0, description="Number of records to skip for pagination"),
limit: int = Query(50, ge=1, le=100, description="Maximum number of records to return (1-100)"), limit: int = Query(50, ge=1, le=100, description="Maximum number of records to return (1-100)"),
collection_id: Optional[str] = Query(None, description="Filter by collection ID"), collection_id: Optional[str] = Query(None, description="Filter by collection ID"),
current_user: UserModel = Depends(get_current_user), current_user: UserModel = Depends(get_current_user)
image_service: ImageServiceDep = Depends()
): ):
""" """
List images for the current user's team or all images if admin List images for the current user's team or all images if admin
@ -125,8 +125,8 @@ async def list_images(
async def get_image( async def get_image(
image_id: str, image_id: str,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), image_service: ImageServiceDep,
image_service: ImageServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Get image metadata by ID Get image metadata by ID
@ -173,8 +173,8 @@ async def get_image(
async def download_image( async def download_image(
image_id: str, image_id: str,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), image_service: ImageServiceDep,
image_service: ImageServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Download image file Download image file
@ -229,8 +229,8 @@ async def update_image(
image_id: str, image_id: str,
image_data: ImageUpdate, image_data: ImageUpdate,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), image_service: ImageServiceDep,
image_service: ImageServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Update image metadata Update image metadata
@ -279,8 +279,8 @@ async def update_image(
async def delete_image( async def delete_image(
image_id: str, image_id: str,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), image_service: ImageServiceDep,
image_service: ImageServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Delete an image Delete an image

View File

@ -22,12 +22,12 @@ router = APIRouter(tags=["Search"], prefix="/search")
@router.get("", response_model=SearchResponse) @router.get("", response_model=SearchResponse)
async def search_images( async def search_images(
request: Request, request: Request,
search_service: SearchServiceDep,
q: str = Query(..., description="Search query for semantic image search"), q: str = Query(..., description="Search query for semantic image search"),
limit: int = Query(10, ge=1, le=50, description="Number of results to return (1-50)"), limit: int = Query(10, ge=1, le=50, description="Number of results to return (1-50)"),
similarity_threshold: float = Query(0.65, ge=0.0, le=1.0, description="Similarity threshold (0.0-1.0)"), similarity_threshold: float = Query(0.65, ge=0.0, le=1.0, description="Similarity threshold (0.0-1.0)"),
collection_id: Optional[str] = Query(None, description="Filter results by collection ID"), collection_id: Optional[str] = Query(None, description="Filter results by collection ID"),
current_user: UserModel = Depends(get_current_user), current_user: UserModel = Depends(get_current_user)
search_service: SearchServiceDep = Depends()
): ):
""" """
Search for images using semantic similarity Search for images using semantic similarity
@ -83,8 +83,8 @@ async def search_images(
async def search_images_advanced( async def search_images_advanced(
search_request: SearchRequest, search_request: SearchRequest,
request: Request, request: Request,
current_user: UserModel = Depends(get_current_user), search_service: SearchServiceDep,
search_service: SearchServiceDep = Depends() current_user: UserModel = Depends(get_current_user)
): ):
""" """
Advanced search for images with extended options Advanced search for images with extended options

View File

@ -20,7 +20,7 @@ router = APIRouter(tags=["Teams"], prefix="/teams")
async def create_team( async def create_team(
team_data: TeamCreate, team_data: TeamCreate,
request: Request, request: Request,
team_service: TeamServiceDep = Depends() team_service: TeamServiceDep
): ):
""" """
Create a new team Create a new team
@ -55,7 +55,7 @@ async def create_team(
@router.get("", response_model=TeamListResponse) @router.get("", response_model=TeamListResponse)
async def list_teams( async def list_teams(
request: Request, request: Request,
team_service: TeamServiceDep = Depends() team_service: TeamServiceDep
): ):
""" """
List all teams List all teams
@ -89,7 +89,7 @@ async def list_teams(
async def get_team( async def get_team(
team_id: str, team_id: str,
request: Request, request: Request,
team_service: TeamServiceDep = Depends() team_service: TeamServiceDep
): ):
""" """
Get a team by ID Get a team by ID
@ -126,7 +126,7 @@ async def update_team(
team_id: str, team_id: str,
team_data: TeamUpdate, team_data: TeamUpdate,
request: Request, request: Request,
team_service: TeamServiceDep = Depends() team_service: TeamServiceDep
): ):
""" """
Update a team Update a team
@ -164,7 +164,7 @@ async def update_team(
async def delete_team( async def delete_team(
team_id: str, team_id: str,
request: Request, request: Request,
team_service: TeamServiceDep = Depends() team_service: TeamServiceDep
): ):
""" """
Delete a team Delete a team

View File

@ -20,8 +20,8 @@ router = APIRouter(tags=["Users"], prefix="/users")
@router.get("/me", response_model=UserResponse) @router.get("/me", response_model=UserResponse)
async def read_users_me( async def read_users_me(
request: Request, request: Request,
user_id: str = Query(..., description="User ID to retrieve information for"), user_service: UserServiceDep,
user_service: UserServiceDep = Depends() user_id: str = Query(..., description="User ID to retrieve information for")
): ):
""" """
Get user information by user ID Get user information by user ID
@ -62,8 +62,8 @@ async def read_users_me(
async def update_current_user( async def update_current_user(
user_data: UserUpdate, user_data: UserUpdate,
request: Request, request: Request,
user_id: str = Query(..., description="User ID to update"), user_service: UserServiceDep,
user_service: UserServiceDep = Depends() user_id: str = Query(..., description="User ID to update")
): ):
""" """
Update user information by user ID Update user information by user ID
@ -106,7 +106,7 @@ async def update_current_user(
async def create_user( async def create_user(
user_data: UserCreate, user_data: UserCreate,
request: Request, request: Request,
user_service: UserServiceDep = Depends() user_service: UserServiceDep
): ):
""" """
Create a new user Create a new user
@ -146,8 +146,8 @@ async def create_user(
@router.get("", response_model=UserListResponse) @router.get("", response_model=UserListResponse)
async def list_users( async def list_users(
request: Request, request: Request,
team_id: Optional[str] = Query(None, description="Filter users by team ID"), user_service: UserServiceDep,
user_service: UserServiceDep = Depends() team_id: Optional[str] = Query(None, description="Filter users by team ID")
): ):
""" """
List users with optional team filtering List users with optional team filtering
@ -187,7 +187,7 @@ async def list_users(
async def get_user( async def get_user(
user_id: str, user_id: str,
request: Request, request: Request,
user_service: UserServiceDep = Depends() user_service: UserServiceDep
): ):
""" """
Get user by ID Get user by ID
@ -228,7 +228,7 @@ async def update_user(
user_id: str, user_id: str,
user_data: UserUpdate, user_data: UserUpdate,
request: Request, request: Request,
user_service: UserServiceDep = Depends() user_service: UserServiceDep
): ):
""" """
Update user by ID Update user by ID
@ -271,7 +271,7 @@ async def update_user(
async def delete_user( async def delete_user(
user_id: str, user_id: str,
request: Request, request: Request,
user_service: UserServiceDep = Depends() user_service: UserServiceDep
): ):
""" """
Delete user by ID Delete user by ID

View File

@ -9,7 +9,7 @@ from src.models.image import ImageModel
from src.models.user import UserModel from src.models.user import UserModel
from src.schemas.image import ImageResponse, ImageListResponse from src.schemas.image import ImageResponse, ImageListResponse
from src.db.repositories.image_repository import image_repository from src.db.repositories.image_repository import image_repository
from src.services.storage_service import StorageService from src.services.storage import StorageService
from src.services.embedding_service import EmbeddingService from src.services.embedding_service import EmbeddingService
from src.utils.authorization import require_team_access, get_team_filter, AuthorizationError from src.utils.authorization import require_team_access, get_team_filter, AuthorizationError
@ -70,7 +70,7 @@ class ImageService:
# Store file # Store file
try: try:
self.storage_service.store_file(storage_path, file_content) self.storage_service.store_file(storage_path, file_content, file.content_type)
except Exception as e: except Exception as e:
logger.error(f"Failed to store file: {e}") logger.error(f"Failed to store file: {e}")
raise RuntimeError("Failed to store image file") raise RuntimeError("Failed to store image file")

View File

@ -135,6 +135,44 @@ class StorageService:
logger.error(f"Error uploading file: {e}") logger.error(f"Error uploading file: {e}")
raise raise
def store_file(self, storage_path: str, content: bytes, content_type: Optional[str] = None) -> bool:
"""
Store raw bytes content to Google Cloud Storage
Args:
storage_path: The storage path where the file should be stored
content: Raw bytes content to store
content_type: Optional content type for the file
Returns:
True if file was stored successfully
Raises:
Exception: If storage operation fails
"""
try:
# Create a blob in the bucket
blob = self.bucket.blob(storage_path)
# Set content type if provided
if content_type:
blob.content_type = content_type
# Set basic metadata
blob.metadata = {
'upload_time': datetime.utcnow().isoformat(),
'file_size': str(len(content))
}
# Upload the content
blob.upload_from_string(content, content_type=content_type)
logger.info(f"File stored: {storage_path}")
return True
except Exception as e:
logger.error(f"Error storing file: {e}")
raise
def get_file(self, storage_path: str) -> Optional[bytes]: def get_file(self, storage_path: str) -> Optional[bytes]:
""" """
Get a file from Google Cloud Storage Get a file from Google Cloud Storage