Home > Software engineering >  Python question, first if statement not running when bucket_name matches an item in bucket list
Python question, first if statement not running when bucket_name matches an item in bucket list

Time:02-24

#1 Activates Boto for use and directs it to s3 storage

import boto3
s3 = boto3.resource('s3')

#2 Python ask user to create a bucket name

  bucket_name = input("Select a bucket name (must be all lowercase).  ")

#3 Python gathers bucket names within s3 and prints list

for bucket in s3.buckets.all():
    print(bucket.name)
bucket = list(s3.buckets.all())

#4 Checks bucket_name against the names with s3 to see if it matches any names, informs them if there is a match, and ask to create another name. If the name doesn't it create a new bucket with new unique name.

if bucket_name in bucket:
    print("The name you selected is already taken, please choose a different name")
    bucket_name = input('Select another bucket name (must be all lowercase).  ')
else:
    print('Your new bucket is named',bucket_name,"!")
    def create_bucket():
        s3_client = boto3.client('s3')
        s3_client.create_bucket(Bucket=bucket_name)
    create_bucket()

CodePudding user response:

First extract all the buckets names with the following code.

s3 = boto3.resource('s3')
all_buckets = [bucket.name for bucket in s3.buckets.all()]

Now check for the bucket_name present in it or not.

if bucket_name in all_buckets:
    print("The name you selected is already taken, please choose a different name")
    # Your rest of the logic goes here.

CodePudding user response:

This will run and search for every entered name using your logic until you quit. Input will automatically be lowered with .lower().

import boto3
s3 = boto3.resource('s3')
bucketNames = [bucket.name for bucket in s3.buckets.all()]

while True:
    bucket_name = input("Write a bucket name (q to quit):  ").lower()
    if bucket_name not in bucketNames:
        print(f'Your new bucket is named {bucket_name}!')
        def create_bucket():
            s3_client = boto3.client('s3')
            s3_client.create_bucket(Bucket=bucket_name)
        create_bucket()
    else:
        print("The name you wrote is already taken, try a different name")
        bucket_name = input('Write a bucket name (q to quit):  ').lower()
    if bucket_name == "q" or bucket_name == "quit":
        break

CodePudding user response:

This should work:

import boto3

def create_bucket(bucket_name):
    s3_client = boto3.client('s3')
    s3_client.create_bucket(Bucket=bucket_name)

bucket_name = input("Select a bucket name (must be all lowercase).")

s3 = boto3.resource('s3')
all_buckets = list(s3.buckets.all())

if bucket_name in all_buckets:
    print("The name you selected is already taken, please choose a different name")
    bucket_name = input('Select another bucket name (must be all lowercase).  ')
else:
    print('Your new bucket is named',bucket_name,"!")
    create_bucket(bucket_name)
  • Related