diff --git a/awswrangler/s3/__init__.py b/awswrangler/s3/__init__.py index b2fbadba1..47aaaa9d0 100644 --- a/awswrangler/s3/__init__.py +++ b/awswrangler/s3/__init__.py @@ -4,7 +4,7 @@ from awswrangler.s3._delete import delete_objects # noqa from awswrangler.s3._describe import describe_objects, get_bucket_region, size_objects # noqa from awswrangler.s3._download import download # noqa -from awswrangler.s3._list import does_object_exist, list_directories, list_objects # noqa +from awswrangler.s3._list import does_object_exist, list_buckets, list_directories, list_objects # noqa from awswrangler.s3._merge_upsert_table import merge_upsert_table # noqa from awswrangler.s3._read_excel import read_excel # noqa from awswrangler.s3._read_parquet import read_parquet, read_parquet_metadata, read_parquet_table # noqa @@ -24,6 +24,7 @@ "get_bucket_region", "size_objects", "does_object_exist", + "list_buckets", "list_directories", "list_objects", "read_parquet", diff --git a/awswrangler/s3/_list.py b/awswrangler/s3/_list.py index 8efa8c44e..c2513ced6 100644 --- a/awswrangler/s3/_list.py +++ b/awswrangler/s3/_list.py @@ -356,3 +356,22 @@ def list_objects( if chunked: return result_iterator return [path for paths in result_iterator for path in paths] + + +def list_buckets(boto3_session: Optional[boto3.Session] = None) -> List[str]: + """List Amazon S3 buckets. + + Parameters + ---------- + boto3_session : boto3.Session(), optional + Boto3 Session. The default boto3 session to use, default to None. + + Returns + ------- + List[str] + List of bucket names. + + """ + client_s3: boto3.client = _utils.client(service_name="s3", session=boto3_session) + buckets = client_s3.list_buckets()["Buckets"] + return [bucket["Name"] for bucket in buckets] diff --git a/docs/source/api.rst b/docs/source/api.rst index a96df5edf..c62c6a5df 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -34,6 +34,7 @@ Amazon S3 does_object_exist download get_bucket_region + list_buckets list_directories list_objects merge_datasets diff --git a/tests/test_s3.py b/tests/test_s3.py index e5f82f190..3341d526f 100644 --- a/tests/test_s3.py +++ b/tests/test_s3.py @@ -17,6 +17,10 @@ logging.getLogger("awswrangler").setLevel(logging.DEBUG) +def test_list_buckets() -> None: + assert len(wr.s3.list_buckets()) > 0 + + @pytest.mark.parametrize("sanitize_columns,col", [(True, "foo_boo"), (False, "FooBoo")]) def test_sanitize_columns(path, sanitize_columns, col): df = pd.DataFrame({"FooBoo": [1, 2, 3]})