fix syntax errors
This commit is contained in:
parent
d11ce070ca
commit
8947b9eafc
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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")
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user