import os import traceback from obs import ObsClient, Versions bucket = os.getenv( "BUCKET" ) ak = os.getenv( "AKID" ) sk = os.getenv( "SKID" ) endpoint = os.getenv( "OBSENDPOINT" ) obsClient = ObsClient( access_key_id = ak, secret_access_key = sk, server = endpoint ) try: actualVersions = [] deleteVersions = [] mark = None index = 1 while True: listing = obsClient.listVersions( bucket, version = Versions( encoding_type = 'url', key_marker = mark, max_keys = 1000 ) ) if listing['status'] < 300: for dobject in listing['body']['versions']: if dobject['versionId'] != None and dobject['isLatest'] != True: actualObject = { "key": dobject['key'], "version": dobject['versionId'] } actualVersions.append(actualObject) for file_marker in listing['body']['markers']: file_key = file_marker['key'] file_version = file_marker['versionId'] deleteMarkerObject = { "key": file_key, "version": file_version } deleteVersions.append(deleteMarkerObject) # going to next file page if listing['body']['head']['isTruncated'] == True: mark = listing['body']['head']['nextKeyMarker'] else: break # now doing the right way print("Deleting actual versions") for object in actualVersions: deleteObject = obsClient.deleteObject( bucketName = bucket, objectKey = object['key'], versionId = object['version'] ) if deleteObject['status'] > 204: print(deleteObject) else: pass print("Deleting delete marker versions") for object in deleteVersions: deleteObject = obsClient.deleteObject( bucketName = bucket, objectKey = object['key'], versionId = object['version'] ) if deleteObject['status'] > 204: print(deleteObject) else: pass except: print('exception') print(traceback.format_exc())