From 7570bd4b0189602670609df8f5707d7cc372c2dc Mon Sep 17 00:00:00 2001 From: Kevin <16530182+kevinl95@users.noreply.github.com> Date: Wed, 8 Apr 2026 07:13:30 -0600 Subject: [PATCH] Fix KeyError when configuring S3 backups on empty buckets (#2548) Adding a guard so that if the user uses a brand new S3 bucket with no contents a KeyError is not received when configuring backups. --- management/backup.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/management/backup.py b/management/backup.py index 8cc2b375..329215eb 100755 --- a/management/backup.py +++ b/management/backup.py @@ -505,12 +505,10 @@ def list_target_files(config): from botocore.exceptions import ClientError # separate bucket from path in target - bucket = target.path[1:].split('/')[0] - path = '/'.join(target.path[1:].split('/')[1:]) + '/' - - # If no prefix is specified, set the path to '', otherwise boto won't list the files - if path == '/': - path = '' + bucket_path = target.path.lstrip('/') + bucket, _, path = bucket_path.partition('/') + if path and not path.endswith('/'): + path += '/' if bucket == "": msg = "Enter an S3 bucket name." @@ -525,7 +523,8 @@ def list_target_files(config): endpoint_url=f'https://{target.hostname}', \ aws_access_key_id=config['target_user'], \ aws_secret_access_key=config['target_pass']) - bucket_objects = s3.list_objects_v2(Bucket=bucket, Prefix=path)['Contents'] + response = s3.list_objects_v2(Bucket=bucket, Prefix=path) + bucket_objects = response.get('Contents', []) backup_list = [(key['Key'][len(path):], key['Size']) for key in bucket_objects] except ClientError as e: raise ValueError(e)