From cb63a59eafd5f3056deac5e61f945799e2ea85fe Mon Sep 17 00:00:00 2001 From: Damir Ibragimov Date: Tue, 22 Oct 2024 15:39:46 +0300 Subject: [PATCH] for Amiran --- undelete_for_hse.py | 101 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 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..ddf1e3d --- /dev/null +++ b/undelete_for_hse.py @@ -0,0 +1,101 @@ +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['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