in syndicate/core/resources/s3_resource.py [0:0]
def validate_bucket_name(bucket_name: str):
"""Checks whether the given bucket name is valid.
If the given name isn't valid, ValueError with an appropriate message
is raised.
:type bucket_name: str
:param bucket_name: the name to check
"""
bucket_name = bucket_name.strip()
_LOG.info(f"Starting validating bucket name '{bucket_name}'")
error = None
raw_bucket_name, _ = (bucket_name.split('/', 1)
if bucket_name and '/' in bucket_name
else (bucket_name, None))
if not raw_bucket_name or not 3 <= len(raw_bucket_name) <= 63:
error = 'Bucket name must be between 3 and 63 characters long'
else:
invalid_characters = re.search('[^a-z0-9.-]', bucket_name)
if invalid_characters:
character = invalid_characters.group()
if character in string.ascii_uppercase:
error = 'Bucket name must not contain uppercase characters'
else:
error = f'Bucket name contains invalid characters: {character}'
elif any(bucket_name.startswith(symbol) for symbol in '.-'):
error = 'Bucket name must start with a lowercase letter or number'
elif any(bucket_name.endswith(symbol) for symbol in '.-'):
error = 'Bucket name must not end with dash or period'
elif '..' in bucket_name:
error = 'Bucket name must not contain two adjacent periods'
elif '.-' in bucket_name or '-.' in bucket_name:
error = 'Bucket name must not contain dash next to period'
else:
try:
ipaddress.ip_address(bucket_name)
error = 'Bucket name must not resemble an IP address'
except ValueError:
pass
if error:
_LOG.warning(error)
raise ValueError(error)
_LOG.info(f"Finished validating bucket name '{bucket_name}'")