Skip to content

Commit 606384d

Browse files
committed
fix: resolve all ruff lint errors
- B904: Add 'from None' to HTTPException raises in except clauses - B008: Use Annotated type aliases for File() and Security() defaults
1 parent 8dde037 commit 606384d

4 files changed

Lines changed: 25 additions & 15 deletions

File tree

app/api/routes/edit.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import base64
22
import logging
33
from pathlib import Path
4-
from typing import Literal
4+
from typing import Annotated, Literal
55

66
from fastapi import APIRouter, Depends, File, Form, HTTPException, UploadFile
77

@@ -18,6 +18,10 @@
1818

1919
router = APIRouter(prefix="/edit", tags=["Image Editing"])
2020

21+
# Type aliases for form fields
22+
ImageFile = Annotated[UploadFile | None, File(description="Image file to edit")]
23+
MaskFile = Annotated[UploadFile | None, File(description="Mask image (transparent areas will be edited)")]
24+
2125

2226
@router.post(
2327
"",
@@ -36,9 +40,9 @@ async def edit_image(
3640
"litellm", description="Provider to use for editing"
3741
),
3842
model: str | None = Form(None, description="Model ID (optional, uses default if not set)"),
39-
image: UploadFile | None = File(None, description="Image file to edit"),
43+
image: ImageFile = None,
4044
image_url: str | None = Form(None, description="URL to existing image (alternative to upload)"),
41-
mask: UploadFile | None = File(None, description="Mask image (transparent areas will be edited)"),
45+
mask: MaskFile = None,
4246
n: int = Form(1, ge=1, le=4, description="Number of variations to generate"),
4347
response_format: Literal["url", "base64", "markdown"] = Form(
4448
"url", description="Response format"
@@ -63,10 +67,10 @@ async def edit_image(
6367
else:
6468
image_bytes = await storage_service.get_image(image_url)
6569
except FileNotFoundError as e:
66-
raise HTTPException(status_code=404, detail=str(e))
70+
raise HTTPException(status_code=404, detail=str(e)) from None
6771
except Exception as e:
6872
logger.error(f"Failed to load image: {e}")
69-
raise HTTPException(status_code=400, detail=f"Failed to load image: {str(e)}")
73+
raise HTTPException(status_code=400, detail=f"Failed to load image: {str(e)}") from None
7074

7175
# Load mask bytes if provided
7276
mask_bytes = None
@@ -81,7 +85,7 @@ async def edit_image(
8185
try:
8286
service = _get_service(provider)
8387
except ValueError as e:
84-
raise HTTPException(status_code=400, detail=str(e))
88+
raise HTTPException(status_code=400, detail=str(e)) from None
8589

8690
# Edit image
8791
try:
@@ -104,7 +108,7 @@ async def edit_image(
104108
)
105109
except Exception as e:
106110
logger.error(f"Edit failed: {e}", exc_info=True)
107-
raise HTTPException(status_code=500, detail=f"Edit failed: {str(e)}")
111+
raise HTTPException(status_code=500, detail=f"Edit failed: {str(e)}") from None
108112

109113
if not urls:
110114
raise HTTPException(status_code=500, detail="No images generated")

app/api/routes/generate.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async def generate_image(request: ImageRequest, _: None = Depends(verify_token))
4949
try:
5050
service = _get_service(request.provider)
5151
except ValueError as e:
52-
raise HTTPException(status_code=400, detail=str(e))
52+
raise HTTPException(status_code=400, detail=str(e)) from None
5353

5454
# Generate images
5555
try:
@@ -62,7 +62,7 @@ async def generate_image(request: ImageRequest, _: None = Depends(verify_token))
6262
)
6363
except Exception as e:
6464
logger.error(f"Generation failed: {e}", exc_info=True)
65-
raise HTTPException(status_code=500, detail=f"Generation failed: {str(e)}")
65+
raise HTTPException(status_code=500, detail=f"Generation failed: {str(e)}") from None
6666

6767
# Return first URL (or could return all URLs)
6868
if not urls:
@@ -152,7 +152,7 @@ async def generate_image_stream(request: ImageRequest, _: None = Depends(verify_
152152
try:
153153
service = _get_service(request.provider)
154154
except ValueError as e:
155-
raise HTTPException(status_code=400, detail=str(e))
155+
raise HTTPException(status_code=400, detail=str(e)) from None
156156

157157
# Return SSE stream
158158
return StreamingResponse(
@@ -198,7 +198,7 @@ async def generate_image_preview(request: ImageRequest, _: None = Depends(verify
198198
try:
199199
service = _get_service(request.provider)
200200
except ValueError as e:
201-
raise HTTPException(status_code=400, detail=str(e))
201+
raise HTTPException(status_code=400, detail=str(e)) from None
202202

203203
# Generate images
204204
try:
@@ -211,7 +211,7 @@ async def generate_image_preview(request: ImageRequest, _: None = Depends(verify
211211
)
212212
except Exception as e:
213213
logger.error(f"Generation failed: {e}", exc_info=True)
214-
raise HTTPException(status_code=500, detail=f"Generation failed: {str(e)}")
214+
raise HTTPException(status_code=500, detail=f"Generation failed: {str(e)}") from None
215215

216216
if not urls:
217217
raise HTTPException(status_code=500, detail="No images generated")

app/api/routes/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,13 @@ async def list_models(_: None = Depends(verify_token)) -> ModelListResponse:
4848
include_in_schema=False, # Admin operation, not for function calling
4949
)
5050
async def refresh_models(
51-
request: ModelRefreshRequest = ModelRefreshRequest(), _: None = Depends(verify_token)
51+
request: ModelRefreshRequest | None = None, _: None = Depends(verify_token)
5252
) -> ModelListResponse:
5353
"""
5454
Refresh model list from LiteLLM.
5555
"""
56+
if request is None:
57+
request = ModelRefreshRequest()
5658
logger.info(f"Refreshing models (force={request.force})")
5759

5860
models = await model_registry.load_models(force=request.force)

app/core/security.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
from typing import Annotated
12

2-
from fastapi import HTTPException, Security, status
3+
from fastapi import Depends, HTTPException, status
34
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
45

56
from app.core.config import settings
67

78
security = HTTPBearer(auto_error=False)
89

10+
# Type alias for security dependency
11+
SecurityCredentials = Annotated[HTTPAuthorizationCredentials | None, Depends(security)]
12+
913

1014
async def verify_token(
11-
credentials: HTTPAuthorizationCredentials | None = Security(security),
15+
credentials: SecurityCredentials,
1216
) -> None:
1317
"""
1418
Verify Bearer token if configured.

0 commit comments

Comments
 (0)