Skip to content

Commit ee41230

Browse files
committed
add routers and schemas
1 parent 02a6292 commit ee41230

File tree

5 files changed

+99
-13
lines changed

5 files changed

+99
-13
lines changed

backend/fastapi.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from fastapi.openapi.utils import get_openapi
33

44
from backend.routers import azure_openai as azure_openai_router
5+
from backend.routers import azure_storage as azure_storage_router
56
from backend.routers import document_intelligence as document_intelligence_router
67

78
app = FastAPI(
@@ -10,6 +11,7 @@
1011

1112
app.include_router(azure_openai_router.router)
1213
app.include_router(document_intelligence_router.router)
14+
app.include_router(azure_storage_router.router)
1315

1416

1517
def custom_openapi():

backend/internals/azure_storage.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,49 +19,46 @@ def get_blob_service_client(self) -> BlobServiceClient:
1919

2020
def upload_blob_stream(
2121
self,
22-
container_name: str,
2322
blob_name: str,
2423
stream: bytes,
2524
):
2625
blob_service_client = self.get_blob_service_client()
2726
blob_client = blob_service_client.get_blob_client(
28-
container=container_name,
27+
container=self.settings.azure_storage_blob_container_name,
2928
blob=blob_name,
3029
)
3130
blob_client.upload_blob(stream, overwrite=True)
32-
logger.info(f"Uploaded blob {blob_name} to container {container_name}")
31+
logger.info(f"Uploaded blob {blob_name} to container {self.settings.azure_storage_blob_container_name}")
3332

3433
def download_blob_stream(
3534
self,
36-
container_name: str,
3735
blob_name: str,
3836
) -> bytes:
3937
blob_service_client = self.get_blob_service_client()
4038
blob_client = blob_service_client.get_blob_client(
41-
container=container_name,
39+
container=self.settings.azure_storage_blob_container_name,
4240
blob=blob_name,
4341
)
4442
stream = blob_client.download_blob().readall()
45-
logger.info(f"Downloaded blob {blob_name} from container {container_name}")
43+
logger.info(f"Downloaded blob {blob_name} from container {self.settings.azure_storage_blob_container_name}")
4644
return stream
4745

4846
def delete_blob(
4947
self,
50-
container_name: str,
5148
blob_name: str,
5249
):
5350
blob_service_client = self.get_blob_service_client()
5451
blob_client = blob_service_client.get_blob_client(
55-
container=container_name,
52+
container=self.settings.azure_storage_blob_container_name,
5653
blob=blob_name,
5754
)
5855
blob_client.delete_blob()
59-
logger.info(f"Deleted blob {blob_name} from container {container_name}")
56+
logger.info(f"Deleted blob {blob_name} from container {self.settings.azure_storage_blob_container_name}")
6057

6158
def list_blobs(
6259
self,
63-
container_name: str,
6460
) -> list:
6561
blob_service_client = self.get_blob_service_client()
66-
container_client = blob_service_client.get_container_client(container_name)
67-
return container_client.list_blobs()
62+
container_client = blob_service_client.get_container_client(self.settings.azure_storage_blob_container_name)
63+
logger.info(f"Listed blobs in container {self.settings.azure_storage_blob_container_name}")
64+
return [blob.name for blob in container_client.list_blobs()]

backend/routers/azure_storage.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from logging import getLogger
2+
3+
from fastapi import APIRouter, UploadFile, status
4+
from fastapi.responses import JSONResponse
5+
6+
from backend.internals import azure_storage
7+
from backend.schemas import azure_storage as azure_storage_schemas
8+
from backend.settings.azure_storage import Settings as AzureStorageSettings
9+
10+
logger = getLogger(__name__)
11+
blob_storage_client = azure_storage.BlobStorageClient(
12+
settings=AzureStorageSettings(),
13+
)
14+
15+
router = APIRouter(
16+
prefix="/azure_storage",
17+
tags=["azure_storage"],
18+
responses={404: {"description": "Not found"}},
19+
)
20+
21+
22+
@router.post(
23+
"/blobs/upload/",
24+
response_model=azure_storage_schemas.BlobUploadResponse,
25+
status_code=200,
26+
)
27+
async def upload_blob(
28+
file: UploadFile,
29+
blob_name: str,
30+
):
31+
try:
32+
content = await file.read()
33+
blob_storage_client.upload_blob_stream(
34+
blob_name=blob_name,
35+
stream=content,
36+
)
37+
except Exception as e:
38+
logger.error(f"Failed to upload blob: {e}")
39+
raise
40+
return azure_storage_schemas.BlobUploadResponse(
41+
blob_name=blob_name,
42+
)
43+
44+
45+
@router.delete(
46+
"/blobs/delete/",
47+
status_code=200,
48+
)
49+
async def delete_blob(
50+
blob_name: str,
51+
):
52+
try:
53+
blob_storage_client.delete_blob(
54+
blob_name=blob_name,
55+
)
56+
except Exception as e:
57+
logger.error(f"Failed to delete blob: {e}")
58+
raise
59+
return JSONResponse(
60+
status_code=status.HTTP_200_OK,
61+
content={"blob_name": blob_name},
62+
)
63+
64+
65+
@router.get(
66+
"/blobs/",
67+
status_code=200,
68+
)
69+
async def list_blobs():
70+
try:
71+
blobs = blob_storage_client.list_blobs()
72+
except Exception as e:
73+
logger.error(f"Failed to upload blob: {e}")
74+
raise
75+
return JSONResponse(
76+
status_code=status.HTTP_200_OK,
77+
content={"blobs": blobs},
78+
)

backend/schemas/azure_storage.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from logging import getLogger
2+
3+
from pydantic import BaseModel
4+
5+
logger = getLogger(__name__)
6+
7+
8+
class BlobUploadResponse(BaseModel):
9+
blob_name: str

backend/settings/azure_storage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
class Settings(BaseSettings):
55
azure_storage_account_name: str = "<account-name>"
66
azure_storage_sas_token: str = "<sas-token>"
7-
azure_storage_container_name: str = "<container-name>"
7+
azure_storage_blob_container_name: str = "<blob-container-name>"
88

99
model_config = SettingsConfigDict(
1010
env_file="azure_storage.env",

0 commit comments

Comments
 (0)