in api/streamlit_experiments/s3.py [0:0]
def list_bucket_contents():
total_size_gb = 0
total_files = 0
match_size_gb = 0
match_files = 0
bucket = st.text_input('S3 bucket name (public bucket or private to your account)', '')
bucket_resource = s3_resource.Bucket(bucket)
match = st.text_input('(optional) Filter bucket contents with matching string', '')
size_mb = st.text_input('(optional) Match files up to size in MB (0 for all sizes)', '0')
if size_mb:
size_mb = int(size_mb)
else:
size_mb = 0
if bucket:
for key in bucket_resource.objects.all():
key_size_mb = key.size/1024/1024
total_size_gb += key_size_mb
total_files += 1
list_check = False
if not match:
list_check = True
elif match in key.key:
list_check = True
if list_check and not size_mb:
match_files += 1
match_size_gb += key_size_mb
st.write(f'{key.key} ({key_size_mb:3.0f}MB)')
elif list_check and key_size_mb <= size_mb:
match_files += 1
match_size_gb += key_size_mb
st.write(f'{key.key} ({key_size_mb:3.0f}MB)')
if match:
st.info(f'Matched file size is **{match_size_gb/1024:3.1f}GB** with **{match_files}** files')
st.success(f'Bucket **{bucket}** total size is **{total_size_gb/1024:3.1f}GB** with **{total_files}** files')
else:
st.info('Provide bucket name to list contents')