def list_bucket_contents()

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')