diff --git a/airflow/providers/amazon/aws/hooks/s3.py b/airflow/providers/amazon/aws/hooks/s3.py index 2e18754d51d53..990ee829d97e7 100644 --- a/airflow/providers/amazon/aws/hooks/s3.py +++ b/airflow/providers/amazon/aws/hooks/s3.py @@ -143,7 +143,7 @@ def parse_s3_url(s3url: str) -> Tuple[str, str]: raise AirflowException(f'Please provide a bucket_name instead of "{s3url}"') bucket_name = parsed_url.netloc - key = parsed_url.path.strip('/') + key = parsed_url.path.lstrip('/') return bucket_name, key diff --git a/tests/providers/amazon/aws/hooks/test_s3.py b/tests/providers/amazon/aws/hooks/test_s3.py index b56d4fca7bf1e..0f7da9b5023d7 100644 --- a/tests/providers/amazon/aws/hooks/test_s3.py +++ b/tests/providers/amazon/aws/hooks/test_s3.py @@ -69,6 +69,10 @@ def test_parse_s3_url(self): parsed = S3Hook.parse_s3_url("s3://test/this/is/not/a-real-key.txt") assert parsed == ("test", "this/is/not/a-real-key.txt"), "Incorrect parsing of the s3 url" + def test_parse_s3_object_directory(self): + parsed = S3Hook.parse_s3_url("s3://test/this/is/not/a-real-s3-directory/") + assert parsed == ("test", "this/is/not/a-real-s3-directory/"), "Incorrect parsing of the s3 url" + def test_check_for_bucket(self, s3_bucket): hook = S3Hook() assert hook.check_for_bucket(s3_bucket) is True