From aa061a4541c4e2ecdeea3617bf987b4f1cba474b Mon Sep 17 00:00:00 2001 From: Damir Ibragimov Date: Tue, 22 Oct 2024 11:22:08 +0000 Subject: [PATCH] Add undelete_for_hse.py --- undelete_for_hse.py | 103 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 undelete_for_hse.py diff --git a/undelete_for_hse.py b/undelete_for_hse.py new file mode 100644 index 0000000..f021ba0 --- /dev/null +++ b/undelete_for_hse.py @@ -0,0 +1,103 @@ +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()) \ No newline at end of file