11# -*- coding=utf-8
2- #
3- # ref to @shezhangjun
4- # https://github.com/shezhangjun/TencentCOS/blob/master/Python_SDK/COS_Disaster_Recovery/DisasterRecovery.py
5- #
2+
63from qcloud_cos import CosConfig
74from qcloud_cos import CosS3Client
85import sys
129# logging.basicConfig(level=logging.INFO, stream=sys.stdout)
1310
1411
15- def _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix ,
16- dst_region , dst_secret_id , dst_secret_key , dst_bucket ):
12+ def _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix ):
13+
1714 src_client = CosS3Client (CosConfig (Region = src_region , SecretId = src_secret_id , SecretKey = src_secret_key ))
18- dst_client = CosS3Client (CosConfig (Region = dst_region , SecretId = dst_secret_id , SecretKey = dst_secret_key ))
1915
2016 key_marker = ''
2117 versionId_marker = ''
@@ -35,8 +31,7 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
3531 delete_marker_keys .append (version ['Key' ])
3632
3733 if len (delete_marker_keys ) == 0 :
38- print ('no delete markers found, no data to recover' )
39- return
34+ print ('no delete markers found, no data to recover, continue listing' )
4035
4136 # 从 Version 取最新的版本号
4237 if 'Version' in response :
@@ -46,8 +41,8 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
4641 if key in delete_marker_keys and not key in recovered_keys :
4742 print ('recover from key:{key}, versionId:{versionId}' .format (key = key , versionId = versionId ))
4843 try :
49- dst_client .copy (
50- Bucket = dst_bucket ,
44+ src_client .copy (
45+ Bucket = src_bucket ,
5146 Key = key ,
5247 CopySource = {
5348 'Bucket' : src_bucket ,
@@ -57,8 +52,8 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
5752 }
5853 )
5954 recovered_keys .append (key )
60- print ("success recover object: {src_bucket}/{ key}({versionId}) => {dst_bucket}/ {key}" .format (
61- src_bucket = src_bucket , key = key , versionId = versionId , dst_bucket = dst_bucket ))
55+ print ("success recover object: {key}(versionId= {versionId}) => {key}" .format (
56+ src_bucket = src_bucket , key = key , versionId = versionId ))
6257 except Exception as e :
6358 print (e )
6459 pass
@@ -72,22 +67,14 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
7267
7368if __name__ == '__main__' :
7469 # 使用场景:
75- # 根据源桶src_bucket的删除标记从历史版本里把文件恢复到dst_bucket
76- # src_bucket和dst_bucket可以一致, 即原地恢复
70+ # 根据源桶src_bucket的删除标记从历史版本里把文件恢复出来
7771
7872 # 源桶信息
7973 src_region = 'ap-guangzhou' # 源地域
8074 src_secret_id = '' # 源桶SecretID
8175 src_secret_key = '' # 源桶SecretKey
8276 src_bucket = 'bucket-1200000000' # 源桶名
8377
84- # 目标桶信息
85- dst_region = 'ap-guangzhou' # 目标桶地域
86- dst_secret_id = '' # 目标桶SecretID
87- dst_secret_key = '' # 目标桶SecretKey
88- dst_bucket = 'bucket-1250000000' # 目标桶名
89-
9078 prefix = '' # 设置要恢复的对象前缀
9179
92- _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix ,
93- dst_region , dst_secret_id , dst_secret_key , dst_bucket )
80+ _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix )
0 commit comments