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 ) encoding_type = 'url' try: actualVersions = [] deleteVersions = [] mark = None index = 1 while True: listing = obsClient.listVersions( bucket, version = Versions( encoding_type = encoding_type, 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 = Object( key=f'{dobject['key']}', versionId=f['versionId'] ) actualVersions.append(actualObject) for file_marker in listing['body']['markers']: file_key = file_marker['key'] file_version = file_marker['versionId'] deleteMarkerObject = Object( key=f'{dobject['key']}', versionId=f['versionId'] ) 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") chunks = [ actualVersions[ x:x+1000 ] for x in range (0, len(actualVersions), 1000) ] for chunk in chunks: deleteBatchObjects = obsClient.deleteObjects( bucketName = bucket, DeleteObjectsRequest( quiet = False, objects = chunk ), encoding_type = encoding_type ) if deleteBatchObjects['status'] > 204: print(deleteBatchObjects) else: pass print("Deleting delete marker versions") chunks = [ actualVersions[ x:x+1000 ] for x in range (0, len(deleteVersions), 1000) ] for chunk in chunks: deleteBatchObjects = obsClient.deleteObjects( bucketName = bucket, DeleteObjectsRequest( quiet = False, objects = chunk ), encoding_type = encoding_type ) if deleteBatchObjects['status'] > 204: print(deleteBatchObjects) else: pass except: print('exception') print(traceback.format_exc())