"""Delete all files in the S3 bucket. Asks for confirmation first.""" import os import sys import boto3 from botocore.config import Config as BotoConfig from pathlib import Path from dotenv import load_dotenv load_dotenv(Path.home() / ".config" / "otree" / ".env") BUCKET = 'ethz-otree-whisper' REGION = 'eu-north-1' s3 = boto3.client( 's3', aws_access_key_id=os.environ['S3_ACCESS_KEY'], aws_secret_access_key=os.environ['S3_SECRET_KEY'], region_name=REGION, config=BotoConfig(signature_version='s3v4'), ) paginator = s3.get_paginator('list_objects_v2') pages = paginator.paginate(Bucket=BUCKET) keys = [obj['Key'] for page in pages for obj in page.get('Contents', [])] if not keys: print('Bucket is already empty.') sys.exit(0) print(f'Found {len(keys)} file(s) in s3://{BUCKET}:') for key in keys: print(f' {key}') answer = input(f'\nPermanently delete all {len(keys)} file(s)? [yes/N] ').strip().lower() if answer != 'yes': print('Aborted.') sys.exit(0) # S3 batch delete supports up to 1000 keys per request for i in range(0, len(keys), 1000): batch = [{'Key': k} for k in keys[i:i + 1000]] s3.delete_objects(Bucket=BUCKET, Delete={'Objects': batch}) print(f'Deleted {len(keys)} file(s).')