Skip to content

Commit c69e8a1

Browse files
authored
remove list_prefix deprecated method (#37587)
1 parent 25518f0 commit c69e8a1

7 files changed

Lines changed: 33 additions & 92 deletions

File tree

sdks/python/apache_beam/io/aws/s3io.py

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
from apache_beam.io.filesystemio import Uploader
3434
from apache_beam.io.filesystemio import UploaderStream
3535
from apache_beam.utils import retry
36-
from apache_beam.utils.annotations import deprecated
3736

3837
try:
3938
# pylint: disable=wrong-import-order, wrong-import-position
@@ -100,27 +99,6 @@ def open(
10099
else:
101100
raise ValueError('Invalid file open mode: %s.' % mode)
102101

103-
@deprecated(since='2.45.0', current='list_files')
104-
def list_prefix(self, path, with_metadata=False):
105-
"""Lists files matching the prefix.
106-
107-
``list_prefix`` has been deprecated. Use `list_files` instead, which returns
108-
a generator of file information instead of a dict.
109-
110-
Args:
111-
path: S3 file path pattern in the form s3://<bucket>/[name].
112-
with_metadata: Experimental. Specify whether returns file metadata.
113-
114-
Returns:
115-
If ``with_metadata`` is False: dict of file name -> size; if
116-
``with_metadata`` is True: dict of file name -> tuple(size, timestamp).
117-
"""
118-
file_info = {}
119-
for file_metadata in self.list_files(path, with_metadata):
120-
file_info[file_metadata[0]] = file_metadata[1]
121-
122-
return file_info
123-
124102
def list_files(self, path, with_metadata=False):
125103
"""Lists files matching the prefix.
126104
@@ -186,7 +164,7 @@ def list_files(self, path, with_metadata=False):
186164
break
187165

188166
logging.log(
189-
# do not spam logs when list_prefix is likely used to check empty folder
167+
# do not spam logs when list_files is likely used to check empty folder
190168
logging.INFO if counter > 0 else logging.DEBUG,
191169
"Finished listing %s files in %s seconds.",
192170
counter,
@@ -288,7 +266,7 @@ def copy_tree(self, src, dest):
288266
assert dest.endswith('/')
289267

290268
results = []
291-
for entry in self.list_prefix(src):
269+
for entry, _ in self.list_files(src):
292270
rel_path = entry[len(src):]
293271
try:
294272
self.copy(entry, dest + rel_path)
@@ -436,7 +414,7 @@ def delete_tree(self, root):
436414
"""
437415
assert root.endswith('/')
438416

439-
paths = self.list_prefix(root)
417+
paths = [p for p, _ in self.list_files(root)]
440418
return self.delete_files(paths)
441419

442420
def size(self, path):

sdks/python/apache_beam/io/aws/s3io_test.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,17 @@ def test_copy(self):
170170
file_size = 1024
171171
self._insert_random_file(self.client, src_file_name, file_size)
172172

173-
self.assertTrue(src_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
173+
self.assertTrue(
174+
src_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
174175
self.assertFalse(
175-
dest_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
176+
dest_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
176177

177178
self.aws.copy(src_file_name, dest_file_name)
178179

179-
self.assertTrue(src_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
180-
self.assertTrue(dest_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
180+
self.assertTrue(
181+
src_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
182+
self.assertTrue(
183+
dest_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
181184

182185
# Clean up
183186
self.aws.delete_files([src_file_name, dest_file_name])
@@ -290,9 +293,9 @@ def test_copy_tree(self):
290293
dest_file_name = dest_dir_name + path
291294
self._insert_random_file(self.client, src_file_name, file_size)
292295
self.assertTrue(
293-
src_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
296+
src_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
294297
self.assertFalse(
295-
dest_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
298+
dest_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
296299

297300
results = self.aws.copy_tree(src_dir_name, dest_dir_name)
298301

@@ -303,9 +306,9 @@ def test_copy_tree(self):
303306
self.assertIsNone(err)
304307

305308
self.assertTrue(
306-
src_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
309+
src_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
307310
self.assertTrue(
308-
dest_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
311+
dest_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
309312

310313
# Clean up
311314
for path in paths:
@@ -320,14 +323,17 @@ def test_rename(self):
320323

321324
self._insert_random_file(self.client, src_file_name, file_size)
322325

323-
self.assertTrue(src_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
326+
self.assertTrue(
327+
src_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
324328
self.assertFalse(
325-
dest_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
329+
dest_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
326330

327331
self.aws.rename(src_file_name, dest_file_name)
328332

329-
self.assertFalse(src_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
330-
self.assertTrue(dest_file_name in self.aws.list_prefix(self.TEST_DATA_PATH))
333+
self.assertFalse(
334+
src_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
335+
self.assertTrue(
336+
dest_file_name in dict(self.aws.list_files(self.TEST_DATA_PATH)))
331337

332338
# Clean up
333339
self.aws.delete_files([src_file_name, dest_file_name])
@@ -439,7 +445,7 @@ def test_delete(self):
439445

440446
# Create the file and check that it was created
441447
self._insert_random_file(self.aws.client, file_name, file_size)
442-
files = self.aws.list_prefix(self.TEST_DATA_PATH)
448+
files = dict(self.aws.list_files(self.TEST_DATA_PATH))
443449
self.assertTrue(file_name in files)
444450

445451
# Delete the file and check that it was deleted
@@ -748,7 +754,7 @@ def test_context_manager(self):
748754
# Clean up
749755
self.aws.delete(file_name)
750756

751-
def test_list_prefix(self):
757+
def test_list_files(self):
752758

753759
objects = [
754760
('jerry/pigpen/phil', 5),
@@ -785,7 +791,7 @@ def test_list_prefix(self):
785791
expected_file_names = [(self.TEST_DATA_PATH + object_name, size)
786792
for (object_name, size) in expected_object_names]
787793
self.assertEqual(
788-
set(self.aws.list_prefix(file_pattern).items()),
794+
set(dict(self.aws.list_files(file_pattern)).items()),
789795
set(expected_file_names))
790796

791797
# Clean up

sdks/python/apache_beam/io/azure/blobstorageio.py

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
from apache_beam.io.filesystemio import UploaderStream
3636
from apache_beam.options.pipeline_options import AzureOptions
3737
from apache_beam.utils import retry
38-
from apache_beam.utils.annotations import deprecated
3938

4039
_LOGGER = logging.getLogger(__name__)
4140

@@ -207,7 +206,7 @@ def copy_tree(self, src, dest):
207206
assert dest.endswith('/')
208207

209208
results = []
210-
for entry in self.list_prefix(src):
209+
for entry, _ in self.list_files(src):
211210
rel_path = entry[len(src):]
212211
try:
213212
self.copy(entry, dest + rel_path)
@@ -504,7 +503,7 @@ def delete_tree(self, root):
504503
assert root.endswith('/')
505504

506505
# Get the blob under the root directory.
507-
paths_to_delete = self.list_prefix(root)
506+
paths_to_delete = [p for p, _ in self.list_files(root)]
508507

509508
return self.delete_files(paths_to_delete)
510509

@@ -577,25 +576,6 @@ def _delete_batch(self, container, blobs):
577576

578577
return results
579578

580-
@deprecated(since='2.45.0', current='list_files')
581-
def list_prefix(self, path, with_metadata=False):
582-
"""Lists files matching the prefix.
583-
584-
Args:
585-
path: Azure Blob Storage file path pattern in the form
586-
azfs://<storage-account>/<container>/[name].
587-
with_metadata: Experimental. Specify whether returns file metadata.
588-
589-
Returns:
590-
If ``with_metadata`` is False: dict of file name -> size; if
591-
``with_metadata`` is True: dict of file name -> tuple(size, timestamp).
592-
"""
593-
file_info = {}
594-
for file_metadata in self.list_files(path, with_metadata):
595-
file_info[file_metadata[0]] = file_metadata[1]
596-
597-
return file_info
598-
599579
def list_files(self, path, with_metadata=False):
600580
"""Lists files matching the prefix.
601581
@@ -644,7 +624,7 @@ def list_files(self, path, with_metadata=False):
644624
yield file_name, item.size
645625

646626
logging.log(
647-
# do not spam logs when list_prefix is likely used to check empty folder
627+
# do not spam logs when list_files is likely used to check empty folder
648628
logging.INFO if counter > 0 else logging.DEBUG,
649629
"Finished listing %s files in %s seconds.",
650630
counter,

sdks/python/apache_beam/io/external/xlang_bigqueryio_it_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ def assert_iceberg_tables_created(
186186

187187
# List objects in the bucket with the constructed prefix
188188
try:
189-
objects = gcs_io.list_prefix(f"gs://{bucket_name}/{search_prefix}")
189+
objects = gcs_io.list_files(f"gs://{bucket_name}/{search_prefix}")
190190
object_count = len(list(objects))
191191

192192
if object_count < expected_count:

sdks/python/apache_beam/io/gcp/gcsio.py

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
from apache_beam.metrics.metric import Metrics
5050
from apache_beam.options.pipeline_options import GoogleCloudOptions
5151
from apache_beam.options.pipeline_options import PipelineOptions
52-
from apache_beam.utils.annotations import deprecated
5352

5453
__all__ = ['GcsIO', 'create_storage_client']
5554

@@ -459,7 +458,7 @@ def copytree(self, src, dest):
459458
"""
460459
assert src.endswith('/')
461460
assert dest.endswith('/')
462-
for entry in self.list_prefix(src):
461+
for entry, _ in self.list_files(src):
463462
rel_path = entry[len(src):]
464463
self.copy(entry, dest + rel_path)
465464

@@ -564,27 +563,6 @@ def _gcs_object(self, path):
564563
else:
565564
raise NotFound('Object %s not found', path)
566565

567-
@deprecated(since='2.45.0', current='list_files')
568-
def list_prefix(self, path, with_metadata=False):
569-
"""Lists files matching the prefix.
570-
571-
``list_prefix`` has been deprecated. Use `list_files` instead, which returns
572-
a generator of file information instead of a dict.
573-
574-
Args:
575-
path: GCS file path pattern in the form gs://<bucket>/[name].
576-
with_metadata: Experimental. Specify whether returns file metadata.
577-
578-
Returns:
579-
If ``with_metadata`` is False: dict of file name -> size; if
580-
``with_metadata`` is True: dict of file name -> tuple(size, timestamp).
581-
"""
582-
file_info = {}
583-
for file_metadata in self.list_files(path, with_metadata):
584-
file_info[file_metadata[0]] = file_metadata[1]
585-
586-
return file_info
587-
588566
def list_files(self, path, with_metadata=False):
589567
"""Lists files matching the prefix.
590568
@@ -627,7 +605,7 @@ def list_files(self, path, with_metadata=False):
627605
yield file_name, item.size
628606

629607
_LOGGER.log(
630-
# do not spam logs when list_prefix is likely used to check empty folder
608+
# do not spam logs when list_files is likely used to check empty folder
631609
logging.INFO if counter > 0 else logging.DEBUG,
632610
"Finished listing %s files in %s seconds.",
633611
counter,

sdks/python/apache_beam/io/gcp/gcsio_test.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ def test_file_write_call(self):
683683
self.gcs.open(file_name, 'w')
684684
writer.assert_called()
685685

686-
def test_list_prefix(self):
686+
def test_list_files(self):
687687
bucket_name = 'gcsio-test'
688688
objects = [
689689
('cow/cat/fish', 2),
@@ -716,8 +716,7 @@ def test_list_prefix(self):
716716
expected_file_names = [('gs://%s/%s' % (bucket_name, object_name), size)
717717
for (object_name, size) in expected_object_names]
718718
self.assertEqual(
719-
set(self.gcs.list_prefix(file_pattern).items()),
720-
set(expected_file_names))
719+
set(self.gcs.list_files(file_pattern)), set(expected_file_names))
721720

722721
def test_downloader_fail_non_existent_object(self):
723722
file_name = 'gs://gcsio-metrics-test/dummy_mode_file'

sdks/python/apache_beam/runners/interactive/cache_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def size(self, *labels):
200200
if 'gs://' in matched_path[0]:
201201
from apache_beam.io.gcp import gcsio
202202
return sum(
203-
sum(gcsio.GcsIO().list_prefix(path).values())
203+
sum(s for _, s in gcsio.GcsIO().list_files(path))
204204
for path in matched_path)
205205
return sum(os.path.getsize(path) for path in matched_path)
206206
return 0

0 commit comments

Comments
 (0)