brandblox

CPP_30.9.25

Sep 30th, 2025 (edited)
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.39 KB | None | 0 0
  1. # s3_demo.py
  2. # Interactive S3 management tool with menu
  3. # Requires boto3
  4.  
  5. import logging
  6. import boto3
  7. from botocore.exceptions import ClientError
  8.  
  9.  
  10. def create_bucket(bucket_name, region=None):
  11.     """Create an S3 bucket in a specified region"""
  12.     try:
  13.         if region is None:
  14.             s3_client = boto3.client('s3')
  15.             s3_client.create_bucket(Bucket=bucket_name)
  16.         else:
  17.             s3_client = boto3.client('s3', region_name=region)
  18.             location = {'LocationConstraint': region}
  19.             s3_client.create_bucket(Bucket=bucket_name,
  20.                                     CreateBucketConfiguration=location)
  21.         print(f"Bucket created: {bucket_name}")
  22.  
  23.     except ClientError as e:
  24.         error_code = e.response['Error']['Code']
  25.         if error_code == 'BucketAlreadyOwnedByYou':
  26.             print(f"Bucket '{bucket_name}' already exists and is owned by you.")
  27.         elif error_code == 'BucketAlreadyExists':
  28.             print(f"Bucket '{bucket_name}' already exists. Bucket names must be globally unique. Try a different name.")
  29.         else:
  30.             logging.error(e)
  31.             print("Error creating bucket.")
  32.  
  33.  
  34. def list_buckets():
  35.     """List all buckets"""
  36.     s3_client = boto3.client('s3')
  37.     response = s3_client.list_buckets()
  38.     if not response['Buckets']:
  39.         print("No buckets found.")
  40.     else:
  41.         print("Existing buckets:")
  42.         for bucket in response['Buckets']:
  43.             print("\t", bucket["Name"])
  44.  
  45.  
  46. def upload_file(file_name, bucket, object_key=None):
  47.     """Upload a file to an S3 bucket"""
  48.     if object_key is None:
  49.         object_key = file_name
  50.  
  51.     s3_client = boto3.client('s3')
  52.     try:
  53.         s3_client.upload_file(file_name, bucket, object_key)
  54.         print(f"Uploaded {file_name} to {bucket}/{object_key}")
  55.     except ClientError as e:
  56.         logging.error(e)
  57.         print("Error uploading file.")
  58.  
  59.  
  60. def list_objects(bucket_name):
  61.     """List all objects in a specific S3 bucket"""
  62.     s3_client = boto3.client('s3')
  63.     try:
  64.         response = s3_client.list_objects_v2(Bucket=bucket_name)
  65.         if response['KeyCount'] == 0:
  66.             print(f"No objects found in bucket '{bucket_name}'.")
  67.         else:
  68.             print(f"Objects in bucket '{bucket_name}':")
  69.             for obj in response['Contents']:
  70.                 print("\t", obj['Key'])
  71.     except ClientError as e:
  72.         logging.error(e)
  73.         print(f"Error listing objects in bucket '{bucket_name}'.")
  74.  
  75.  
  76. def delete_object(bucket_name, object_key):
  77.     """Delete an object from an S3 bucket"""
  78.     s3_client = boto3.client('s3')
  79.     try:
  80.         s3_client.delete_object(Bucket=bucket_name, Key=object_key)
  81.         print(f"Deleted object {object_key} from {bucket_name}")
  82.     except ClientError as e:
  83.         logging.error(e)
  84.         print(f"Error deleting object {object_key} from {bucket_name}")
  85.  
  86.  
  87. def delete_bucket(bucket_name):
  88.     """Delete a bucket and optionally its contents"""
  89.     s3_client = boto3.client('s3')
  90.     try:
  91.         response = s3_client.list_objects_v2(Bucket=bucket_name)
  92.         if response['KeyCount'] != 0:
  93.             print(f"Bucket '{bucket_name}' is not empty. It contains {response['KeyCount']} objects.")
  94.             choice = input("Do you want to delete all objects and the bucket? (y/n): ").lower()
  95.             if choice == 'y':
  96.                 for content in response['Contents']:
  97.                     object_key = content['Key']
  98.                     print(f"Deleting object {object_key} ...")
  99.                     s3_client.delete_object(Bucket=bucket_name, Key=object_key)
  100.             else:
  101.                 print("Bucket deletion cancelled.")
  102.                 return
  103.  
  104.         s3_client.delete_bucket(Bucket=bucket_name)
  105.         print(f"Deleted bucket {bucket_name}")
  106.     except ClientError as e:
  107.         logging.error(e)
  108.         print(f"Error deleting bucket {bucket_name}")
  109.    
  110. def download_file(bucket_name, object_key, file_name=None):
  111.     """Download an S3 object to a local file"""
  112.     if file_name is None:
  113.         file_name = object_key
  114.  
  115.     s3_client = boto3.client('s3')
  116.     try:
  117.         s3_client.download_file(bucket_name, object_key, file_name)
  118.         print(f"Downloaded {bucket_name}/{object_key} to {file_name}")
  119.     except ClientError as e:
  120.         logging.error(e)
  121.         print(f"Error downloading {object_key} from {bucket_name}")
  122.  
  123.  
  124. def enable_versioning(bucket_name):
  125.     """Enable versioning on an S3 bucket and confirm status"""
  126.     s3_client = boto3.client('s3')
  127.     try:
  128.         # Enable versioning
  129.         s3_client.put_bucket_versioning(
  130.             Bucket=bucket_name,
  131.             VersioningConfiguration={'Status': 'Enabled'}
  132.         )
  133.        
  134.         # Check versioning status
  135.         response = s3_client.get_bucket_versioning(Bucket=bucket_name)
  136.         status = response.get('Status', 'Disabled')
  137.         print(f"Versioning status for bucket '{bucket_name}': {status}")
  138.        
  139.         if status == 'Enabled':
  140.             print(f"Versioning successfully enabled on bucket '{bucket_name}'")
  141.         else:
  142.             print(f"Failed to enable versioning on bucket '{bucket_name}'")
  143.  
  144.     except ClientError as e:
  145.         logging.error(e)
  146.         print(f"Error enabling versioning on bucket '{bucket_name}'")
  147.  
  148.  
  149.  
  150.  
  151.  
  152. def menu():
  153.     while True:
  154.         print("\nS3 Demo Menu")
  155.         print("1. Create bucket")
  156.         print("2. List buckets")
  157.         print("3. Upload file")
  158.         print("4. List objects in a bucket")
  159.         print("5. Delete object")
  160.         print("6. Delete bucket")
  161.         print("7. Download object")
  162.         print("8. Enable bucket versioning")
  163.         print("9. Exit")
  164.  
  165.         choice = input("Enter your choice (1-9): ")
  166.  
  167.         if choice == "1":
  168.             bucket_name = input("Enter bucket name: ")
  169.             region = input("Enter region (leave blank for default us-east-1): ") or None
  170.             create_bucket(bucket_name, region)
  171.  
  172.         elif choice == "2":
  173.             list_buckets()
  174.  
  175.         elif choice == "3":
  176.             bucket_name = input("Enter bucket name: ")
  177.             file_name = input("Enter file name to upload: ")
  178.             object_key = input("Enter object key (leave blank to use file name): ") or None
  179.             upload_file(file_name, bucket_name, object_key)
  180.  
  181.         elif choice == "4":
  182.             bucket_name = input("Enter bucket name to list objects: ")
  183.             list_objects(bucket_name)
  184.  
  185.         elif choice == "5":
  186.             bucket_name = input("Enter bucket name: ")
  187.             object_key = input("Enter object key to delete: ")
  188.             delete_object(bucket_name, object_key)
  189.  
  190.         elif choice == "6":
  191.             bucket_name = input("Enter bucket name to delete: ")
  192.             delete_bucket(bucket_name)
  193.  
  194.         elif choice == "7":
  195.             bucket_name = input("Enter bucket name: ")
  196.             object_key = input("Enter object key to download: ")
  197.             file_name = input("Enter local file name (leave blank to use object key): ") or None
  198.             download_file(bucket_name, object_key, file_name)
  199.  
  200.         elif choice == "8":
  201.             bucket_name = input("Enter bucket name to enable versioning: ")
  202.             enable_versioning(bucket_name)
  203.  
  204.         elif choice == "9":
  205.             print("Exiting...")
  206.             break
  207.  
  208.         else:
  209.             print("Invalid choice. Please try again.")
  210.  
  211.  
  212. if __name__ == "__main__":
  213.     menu()
  214.  
Advertisement
Add Comment
Please, Sign In to add comment