Files
OBS_Undelete_all_objects/permanently_delete_files.py
2024-10-22 16:36:41 +03:00

117 lines
2.7 KiB
Python

import os
import traceback
from obs import ObsClient, Versions
bucketName = 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(
bucketName,
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,
DeleteObjectsRequest(
quiet = False,
objects = chunk,
encoding_type = encoding_type
))
if deleteBatchObjects['status'] > 204:
print(deleteBatchObjects)
else:
pass
print("Deleting delete marker versions")
chunks = [
deleteVersions[
x:x+1000
] for x in range (0, len(deleteVersions), 1000)
]
for chunk in chunks:
deleteBatchObjects = obsClient.deleteObjects(
bucketName,
DeleteObjectsRequest(
quiet = False,
objects = chunk,
encoding_type = encoding_type
))
if deleteBatchObjects['status'] > 204:
print(deleteBatchObjects)
else:
pass
except:
print('exception')
print(traceback.format_exc())