Files
OBS_Undelete_all_objects/undelete_for_hse.py

103 lines
2.3 KiB
Python

import os
import traceback
from obs import ObsClient, Versions
bucket = input(f"""Insert bucket name: """)
prefiks = input(f"""Insert prefix for 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(
prefix = prefiks,
encoding_type = 'url',
key_marker = mark,
max_keys = 1000
)
)
if listing['status'] < 300:
for file_marker in listing['body']['markers']:
file_key = file_marker['key']
file_version = file_marker['versionId']
# creating lists
if file_marker['isLatest'] = True:
actualFile = {
"key": file_key,
"version_id": file_version
}
actualVersions.append(actualFile)
else:
deleteMarkerFile = {
"key": file_key,
"version_id": file_version
}
deleteVersions.append(deleteMarkerFile)
# 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['file_key'],
versionId = object['file_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['file_key'],
versionId = object['file_version']
)
if deleteObject['status'] > 204:
print(deleteObject)
else:
pass
except:
print('exception')
print(traceback.format_exc())