@@ -431,23 +431,6 @@ def list_objects(
431431 )
432432 yield source_path , content
433433
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-
451434 def list_object_versions (
452435 self , bucket , prefix = None , page_size = None , extra_args = None
453436 ):
@@ -479,25 +462,30 @@ def list_object_versions(
479462 paginator = self ._client .get_paginator ('list_object_versions' )
480463 pages = paginator .paginate (** kwargs )
481464 for page in pages :
482- # Process versions
483465 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' ]
491466
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+
493474 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' ]
501489
502490
503491class PrintTask (
0 commit comments