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

Add objects count and total size to GET buckets

parent ff029ea3
No related branches found
No related tags found
No related merge requests found
......@@ -10,36 +10,43 @@ AWS_SESSION_TOKEN = None
def get_s3_client():
resource = boto3.resource('s3',
endpoint_url=MINIO_ENDPOINT,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
aws_session_token=AWS_SESSION_TOKEN,
config=boto3.session.Config(signature_version='s3v4'),
verify=False
)
client = resource.meta.client
return client
return boto3.resource('s3',
endpoint_url=MINIO_ENDPOINT,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
aws_session_token=AWS_SESSION_TOKEN,
config=boto3.session.Config(signature_version='s3v4'),
verify=False
)
def list_buckets() -> BucketResponse:
s3 = get_s3_client()
response = s3.list_buckets()
client = s3.meta.client
response = client.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)
bucket_acl = client.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")
objects = s3.Bucket(bucket_name).objects.all()
n_objects = 0
size_byte = 0
for obj in objects:
n_objects += 1
size_byte += obj.size
rw_access = BucketRWAccess(read=read, write=write)
buckets[i] = Bucket(
name=bucket_name,
creation_date=creation_date,
details={},
rw_access=rw_access
rw_access=rw_access,
objects=n_objects,
size=size_byte
)
return BucketResponse(buckets=buckets, total=len(buckets))
......@@ -13,7 +13,8 @@ class Bucket(BaseModel):
creation_date: datetime
details: dict
rw_access: BucketRWAccess
objects: int
size: int
class BucketResponse(BaseModel):
buckets: List[Bucket]
......
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