Skip to content
Snippets Groups Projects
Commit 08ef6ee1 authored by Jacopo Gasparetto's avatar Jacopo Gasparetto
Browse files

Add list_bucket

parent 6313ba50
No related branches found
No related tags found
No related merge requests found
from models.buckets import BucketInfo, BucketRWAccess, BucketInfoResponse from models.buckets import BucketInfo, BucketRWAccess, BucketInfoResponse
from models.buckets import Bu from models.buckets import BucketContentResponse
import boto3 import boto3
import json import json
import os import os
...@@ -10,7 +10,7 @@ AWS_SECRET_ACCESS_KEY = os.getenv("MINIO_SECRET_ACCESS_KEY", "minioadmin") ...@@ -10,7 +10,7 @@ AWS_SECRET_ACCESS_KEY = os.getenv("MINIO_SECRET_ACCESS_KEY", "minioadmin")
AWS_SESSION_TOKEN = None AWS_SESSION_TOKEN = None
def get_s3_client(): def get_s3_resource():
return boto3.resource('s3', return boto3.resource('s3',
endpoint_url=MINIO_ENDPOINT, endpoint_url=MINIO_ENDPOINT,
aws_access_key_id=AWS_ACCESS_KEY_ID, aws_access_key_id=AWS_ACCESS_KEY_ID,
...@@ -21,9 +21,14 @@ def get_s3_client(): ...@@ -21,9 +21,14 @@ def get_s3_client():
) )
def get_s3_client():
resource = get_s3_resource()
return resource.meta.client
def list_buckets() -> BucketInfoResponse: def list_buckets() -> BucketInfoResponse:
s3 = get_s3_client() s3 = get_s3_resource()
client = s3.meta.client client = get_s3_client()
response = client.list_buckets() response = client.list_buckets()
buckets_info = response["Buckets"] buckets_info = response["Buckets"]
buckets = [None] * len(buckets_info) buckets = [None] * len(buckets_info)
...@@ -51,3 +56,10 @@ def list_buckets() -> BucketInfoResponse: ...@@ -51,3 +56,10 @@ def list_buckets() -> BucketInfoResponse:
size=size_byte size=size_byte
) )
return BucketInfoResponse(buckets=buckets, total=len(buckets)) return BucketInfoResponse(buckets=buckets, total=len(buckets))
def list_bucket(bucket_name: str) -> BucketContentResponse:
client = get_s3_client()
buckets = client.list_objects_v2(Bucket=bucket_name)["Contents"]
print(buckets[0])
return BucketContentResponse(buckets=buckets, total=len(buckets))
...@@ -21,3 +21,25 @@ class BucketInfoResponse(BaseModel): ...@@ -21,3 +21,25 @@ class BucketInfoResponse(BaseModel):
buckets: List[BucketInfo] buckets: List[BucketInfo]
total: int total: int
class BucketOwner(BaseModel):
DisplayName: str
ID: str
class BucketObject(BaseModel):
Key: str
LastModified: datetime
ETag: str
Size: int
StorageClass: str
Owner: BucketOwner
class BucketNotfound:
status: str
detail: str
headers: dict
class BucketContentResponse(BaseModel):
buckets: List[BucketObject]
total: int
from models.buckets import BucketInfoResponse from models.buckets import BucketInfoResponse, BucketContentResponse, BucketNotfound
from fastapi import APIRouter from fastapi import APIRouter, HTTPException, Response
from botocore.exceptions import ClientError
import ceph_service import ceph_service
router = APIRouter() router = APIRouter()
...@@ -8,3 +9,14 @@ router = APIRouter() ...@@ -8,3 +9,14 @@ router = APIRouter()
@router.get("/buckets") @router.get("/buckets")
def list_buckets() -> BucketInfoResponse: def list_buckets() -> BucketInfoResponse:
return ceph_service.list_buckets() return ceph_service.list_buckets()
@router.get("/buckets/{bucket_name}")
def list_bucket(bucket_name: str) -> BucketContentResponse:
try:
return ceph_service.list_bucket(bucket_name=bucket_name)
except ClientError as err:
status = err.response["ResponseMetadata"]["HTTPStatusCode"]
detail = err.response["Error"]["Code"]
headers = err.response["ResponseMetadata"]["HTTPHeaders"]
raise HTTPException(status_code=status, detail=detail, headers=headers)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment