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

Add BucketResponse model and change return values

parent 6884c2b9
No related branches found
No related tags found
No related merge requests found
from models.buckets import Bucket, BucketRWAccess, BucketResponse
import boto3
import json
import os
......@@ -21,9 +22,24 @@ def get_s3_client():
return client
def list_buckets() -> json:
def list_buckets() -> BucketResponse:
s3 = get_s3_client()
buckets = s3.list_buckets()
buckets = {key: buckets[key] for key in ["Buckets", "Owner"]}
return json.dumps(buckets, default=str)
response = s3.list_buckets()
buckets_info = response["Buckets"]
buckets = [None] * len(buckets_info)
for i, bucket_info in enumerate(buckets_info):
bucket_name = bucket_info["Name"]
creation_date = bucket_info["CreationDate"]
bucket_acl = s3.get_bucket_acl(Bucket=bucket_name)
grant = bucket_acl["Grants"][0] # TODO: Here we can have multiple grants
permission = grant["Permission"]
read = permission in ("READ", "FULL_CONTROL")
write = permission in ("WRITE", "FULL_CONTROL")
rw_access = BucketRWAccess(read=read, write=write)
buckets[i] = Bucket(
name=bucket_name,
creation_date=creation_date,
details={},
rw_access=rw_access
)
return BucketResponse(buckets=buckets, total=len(buckets))
from pydantic import BaseModel
from datetime import datetime
from typing import List
class BucketRWAccess(BaseModel):
read: bool
write: bool
class Bucket(BaseModel):
name: str
creation_date: datetime
details: dict
rw_access: BucketRWAccess
class BucketResponse(BaseModel):
buckets: List[Bucket]
total: int
from models.buckets import BucketResponse
from fastapi import APIRouter
import ceph_service
......@@ -5,5 +6,5 @@ router = APIRouter()
@router.get("/buckets")
def list_buckets():
def list_buckets() -> BucketResponse:
return ceph_service.list_buckets()
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