@@ -431,23 +431,6 @@ def list_objects(
431
431
)
432
432
yield source_path , content
433
433
434
-
435
- class BucketVersionLister :
436
- """List object versions in a bucket
437
- This class provides functionality to list all versions of objects in a S3 bucket.
438
- It can list versions for a specific object (when prefix is provided) or for all
439
- objects in the bucket.
440
- """
441
-
442
- def __init__ (self , client , date_parser = _date_parser ):
443
- """
444
- Initialize a new BucketVersionLister.
445
- :param client: The S3 client to use for listing versions.
446
- :param date_parser: A function to parse date strings into datetime objects.
447
- """
448
- self ._client = client
449
- self ._date_parser = date_parser
450
-
451
434
def list_object_versions (
452
435
self , bucket , prefix = None , page_size = None , extra_args = None
453
436
):
@@ -479,25 +462,30 @@ def list_object_versions(
479
462
paginator = self ._client .get_paginator ('list_object_versions' )
480
463
pages = paginator .paginate (** kwargs )
481
464
for page in pages :
482
- # Process versions
483
465
versions = page .get ('Versions' , [])
484
- for version in versions :
485
- source_path = bucket + '/' + version ['Key' ]
486
- version ['LastModified' ] = self ._date_parser (
487
- version ['LastModified' ]
488
- )
489
- version ['DeleteMarker' ] = False
490
- yield source_path , version , version ['VersionId' ]
491
466
492
- # Process delete markers
467
+ for (
468
+ source_path ,
469
+ content ,
470
+ version_id ,
471
+ ) in self ._process_object_versions (bucket , versions ):
472
+ yield source_path , content , version_id
473
+
493
474
delete_markers = page .get ('DeleteMarkers' , [])
494
- for marker in delete_markers :
495
- source_path = bucket + '/' + marker ['Key' ]
496
- marker ['LastModified' ] = self ._date_parser (
497
- marker ['LastModified' ]
498
- )
499
- marker ['DeleteMarker' ] = True
500
- yield source_path , marker , marker ['VersionId' ]
475
+ for (
476
+ source_path ,
477
+ content ,
478
+ version_id ,
479
+ ) in self ._process_object_versions (bucket , delete_markers ):
480
+ yield source_path , content , version_id
481
+
482
+ def _process_object_versions (self , bucket , object_versions ):
483
+ for version in object_versions :
484
+ source_path = bucket + '/' + version ['Key' ]
485
+ version ['LastModified' ] = self ._date_parser (
486
+ version ['LastModified' ]
487
+ )
488
+ yield source_path , version , version ['VersionId' ]
501
489
502
490
503
491
class PrintTask (
0 commit comments