Files
OBS_Undelete_all_objects/undelete_for_hse.py
2024-10-22 15:46:11 +03:00

101 lines
2.3 KiB
Python

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())