@@ -3464,11 +3464,54 @@ def delete_bucket_referer(self, Bucket, **kwargs):
3464
3464
params = params )
3465
3465
return None
3466
3466
3467
+ def put_bucket_intelligenttiering_v2 (self , Bucket , IntelligentTieringConfiguration = None , Id = None , ** kwargs ):
3468
+ """设置存储桶智能分层配置
3469
+
3470
+ :param Bucket(string): 存储桶名称.
3471
+ :param IntelligentTieringConfiguration(dict): 智能分层配置
3472
+ :param kwargs(dict): 设置请求headers.
3473
+ :return: None.
3474
+
3475
+ .. code-block:: python
3476
+
3477
+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
3478
+ client = CosS3Client(config)
3479
+
3480
+ intelligent_tiering_conf = {
3481
+ 'Status': 'Enable',
3482
+ 'Transition': {
3483
+ 'Days': '30|60|90',
3484
+ 'RequestFrequent': '1'
3485
+ }
3486
+ }
3487
+ client.put_bucket_intelligenttiering(Bucket="bucket", IntelligentTieringConfiguration=intelligent_tiering_conf)
3488
+ """
3489
+
3490
+ if IntelligentTieringConfiguration is None :
3491
+ IntelligentTieringConfiguration = {}
3492
+ xml_config = format_xml (data = IntelligentTieringConfiguration , root = 'IntelligentTieringConfiguration' )
3493
+ headers = mapped (kwargs )
3494
+ headers ['Content-Type' ] = 'application/xml'
3495
+ params = {'id' : Id }
3496
+ url = self ._conf .uri (bucket = Bucket ) + '?intelligent-tiering'
3497
+ logger .info ("put bucket intelligenttiering, url=:{url} ,headers=:{headers}" .format (
3498
+ url = url ,
3499
+ headers = headers ))
3500
+ rt = self .send_request (
3501
+ method = 'PUT' ,
3502
+ url = url ,
3503
+ bucket = Bucket ,
3504
+ data = xml_config ,
3505
+ auth = CosS3Auth (self ._conf , params = params ),
3506
+ headers = headers ,
3507
+ params = params )
3508
+ return None
3509
+
3467
3510
def put_bucket_intelligenttiering (self , Bucket , IntelligentTieringConfiguration = None , ** kwargs ):
3468
3511
"""设置存储桶智能分层配置
3469
3512
3470
3513
:param Bucket(string): 存储桶名称.
3471
- :param IntelligentTieringConfiguration(dict): 只能分层配置
3514
+ :param IntelligentTieringConfiguration(dict): 智能分层配置
3472
3515
:param kwargs(dict): 设置请求headers.
3473
3516
:return: None.
3474
3517
@@ -3510,7 +3553,6 @@ def put_bucket_intelligenttiering(self, Bucket, IntelligentTieringConfiguration=
3510
3553
def get_bucket_intelligenttiering (self , Bucket , ** kwargs ):
3511
3554
"""获取存储桶智能分层配置
3512
3555
:param Bucket(string): 存储桶名称.
3513
- :param IntelligentTieringConfiguration(dict): 智能分层配置
3514
3556
:param kwargs(dict): 设置请求headers.
3515
3557
:return(dict): 智能分层配置.
3516
3558
@@ -3536,6 +3578,284 @@ def get_bucket_intelligenttiering(self, Bucket, **kwargs):
3536
3578
data = xml_to_dict (rt .content )
3537
3579
return data
3538
3580
3581
+ def get_bucket_intelligenttiering_v2 (self , Bucket , Id , ** kwargs ):
3582
+ """获取存储桶智能分层配置
3583
+
3584
+ :param Bucket(string): 存储桶名称.
3585
+ :param Id(string) 智能分层规则Id.
3586
+ :param kwargs(dict): 设置请求headers.
3587
+ :return(dict): 智能分层配置.
3588
+
3589
+ .. code-block:: python
3590
+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
3591
+ client = CosS3Client(config)
3592
+ client.get_bucket_intelligenttiering_v2(Bucket='bucket', Id='id')
3593
+ """
3594
+
3595
+ headers = mapped (kwargs )
3596
+ params = {'id' : Id }
3597
+ url = self ._conf .uri (bucket = Bucket ) + '?intelligent-tiering'
3598
+ logger .info ("get bucket intelligenttiering, url=:{url} ,headers=:{headers}" .format (
3599
+ url = url ,
3600
+ headers = headers ))
3601
+ rt = self .send_request (
3602
+ method = 'GET' ,
3603
+ url = url ,
3604
+ bucket = Bucket ,
3605
+ auth = CosS3Auth (self ._conf , params = params ),
3606
+ headers = headers ,
3607
+ params = params )
3608
+ data = xml_to_dict (rt .content )
3609
+ return data
3610
+
3611
+ def list_bucket_intelligenttiering_configurations (self , Bucket , ** kwargs ):
3612
+ """列举存储桶中的所有智能分层配置
3613
+
3614
+ :param Bucket(string): 存储桶名称.
3615
+ :param kwargs(dict): 设置请求headers.
3616
+ :return(dict): 所有的智能分层配置.
3617
+
3618
+ .. code-block:: python
3619
+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
3620
+ client = CosS3Client(config)
3621
+ client.list_bucket_intelligenttiering_configurations(Bucket='bucket')
3622
+ """
3623
+
3624
+ headers = mapped (kwargs )
3625
+ params = {}
3626
+ url = self ._conf .uri (bucket = Bucket ) + "?intelligent-tiering"
3627
+ logger .info ("list bucket intelligenttiering configurations, url=:{url} ,headers=:{headers}" .format (
3628
+ url = url ,
3629
+ headers = headers ))
3630
+ rt = self .send_request (
3631
+ method = 'GET' ,
3632
+ url = url ,
3633
+ bucket = Bucket ,
3634
+ auth = CosS3Auth (self ._conf , params = params ),
3635
+ headers = headers ,
3636
+ params = params )
3637
+ data = xml_to_dict (rt .content )
3638
+ return data
3639
+
3640
+ def put_bucket_object_lock (self , Bucket , ObjectLockConfiguration = {}, ** kwargs ):
3641
+ """设置存储桶对象锁定配置
3642
+
3643
+ :param Bucket(string): 存储桶名称.
3644
+ :param ObjectLockConfiguration(dict): 对象锁定配置.
3645
+ :param kwargs(dict): 设置请求headers.
3646
+ :return: None.
3647
+
3648
+ .. code-block:: python
3649
+
3650
+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
3651
+ client = CosS3Client(config)
3652
+
3653
+ object_lock_conf = {
3654
+ 'ObjectLockEnabled': 'Enabled',
3655
+ }
3656
+ client.put_bucket_object_lock(Bucket="bucket", ObjectLockConfiguration=objeck_lock_conf)
3657
+ """
3658
+
3659
+ xml_config = format_xml (data = ObjectLockConfiguration , root = 'ObjectLockConfiguration' )
3660
+ headers = mapped (kwargs )
3661
+ headers ['Content-MD5' ] = get_md5 (xml_config )
3662
+ headers ['Content-Type' ] = 'application/xml'
3663
+ params = {'object-lock' : '' }
3664
+ url = self ._conf .uri (bucket = Bucket )
3665
+ logger .info ("put bucket object-lock, url=:{url} ,headers=:{headers}" .format (
3666
+ url = url ,
3667
+ headers = headers ))
3668
+ rt = self .send_request (
3669
+ method = 'PUT' ,
3670
+ url = url ,
3671
+ bucket = Bucket ,
3672
+ data = xml_config ,
3673
+ auth = CosS3Auth (self ._conf , params = params ),
3674
+ headers = headers ,
3675
+ params = params )
3676
+ return rt .headers
3677
+
3678
+ def get_bucket_object_lock (self , Bucket , ** kwargs ):
3679
+ """获取存储桶对象锁定配置
3680
+
3681
+ :param Bucket(string): 存储桶名称.
3682
+ :param kwargs(dict): 设置请求headers.
3683
+ :return(dict): 对象锁定配置.
3684
+
3685
+ .. code-block:: python
3686
+
3687
+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
3688
+ client = CosS3Client(config)
3689
+ client.get_bucket_object_lock(Bucket="bucket")
3690
+ """
3691
+ headers = mapped (kwargs )
3692
+ params = {'object-lock' : '' }
3693
+ url = self ._conf .uri (bucket = Bucket )
3694
+ logger .info ("get bucket object-lock, url=:{url} ,headers=:{headers}" .format (
3695
+ url = url ,
3696
+ headers = headers ))
3697
+ rt = self .send_request (
3698
+ method = 'GET' ,
3699
+ url = url ,
3700
+ bucket = Bucket ,
3701
+ auth = CosS3Auth (self ._conf , params = params ),
3702
+ headers = headers ,
3703
+ params = params )
3704
+ data = xml_to_dict (rt .content )
3705
+ return data
3706
+
3707
+ def get_bucket_meta (self , Bucket , ** kwargs ):
3708
+ """获取存储桶各项配置
3709
+
3710
+ :param Bucket(string): 存储桶名称.
3711
+ :param kwargs(dict): 设置请求headers.
3712
+ :return(dict): 存储桶各项配置.
3713
+
3714
+ .. code-block:: python
3715
+
3716
+ config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
3717
+ client = CosS3Client(config)
3718
+ client.get_bucket_meta(Bucket="bucket")
3719
+ """
3720
+ data = {
3721
+ 'BucketUrl' : None ,
3722
+ 'OFS' : False ,
3723
+ 'MAZ' : False ,
3724
+ 'Encryption' : None ,
3725
+ 'ACL' : None ,
3726
+ 'Website' : None ,
3727
+ 'Logging' : None ,
3728
+ 'CORS' : None ,
3729
+ 'Versioning' : None ,
3730
+ 'IntelligentTiering' : None ,
3731
+ 'Lifecycle' : None ,
3732
+ 'Tagging' : None ,
3733
+ 'ObjectLock' : None ,
3734
+ 'Replication' : None ,
3735
+ }
3736
+ pool = SimpleThreadPool (num_threads = 10 )
3737
+
3738
+ # HeadBucket
3739
+ def _head_bucket_wrapper (Bucket , ** kwargs ):
3740
+ resp = self .head_bucket (Bucket , ** kwargs )
3741
+ # x-cos-bucket-arch: 'OFS'
3742
+ # x-cos-bucket-az-type: 'MAZ'
3743
+ # x-cos-bucket-region: 'ap-beijing'
3744
+ if 'x-cos-bucket-arch' in resp and resp ['x-cos-bucket-arch' ] == 'OFS' :
3745
+ data .update ({'OFS' : True })
3746
+ else :
3747
+ data .update ({'OFS' : False })
3748
+ if 'x-cos-bucket-az-type' in resp and resp ['x-cos-bucket-az-type' ] == 'MAZ' :
3749
+ data .update ({'MAZ' : True })
3750
+ else :
3751
+ data .update ({'MAZ' : False })
3752
+ data .update ({"Location" : resp ['x-cos-bucket-region' ]})
3753
+ url = self ._conf .uri (bucket = Bucket ).strip ('/' )
3754
+ data .update ({'BucketUrl' : url })
3755
+ pool .add_task (_head_bucket_wrapper , Bucket , ** kwargs )
3756
+
3757
+ # Website
3758
+ def _get_bucket_website_wrapper (Bucket , ** kwargs ):
3759
+ try :
3760
+ resp = self .get_bucket_website (Bucket , ** kwargs )
3761
+ data .update ({'Website' : resp })
3762
+ except CosServiceError as e :
3763
+ logger .debug ("get_bucket_meta failed to get website conf:{}" .format (e ))
3764
+ pool .add_task (_get_bucket_website_wrapper , Bucket , ** kwargs )
3765
+
3766
+ # ObjectLock
3767
+ def _get_bucket_object_lock_wrapper (Bucket , ** kwargs ):
3768
+ try :
3769
+ resp = self .get_bucket_object_lock (Bucket , ** kwargs )
3770
+ data .update ({'ObjectLock' : resp })
3771
+ except CosServiceError as e :
3772
+ logger .debug ("get_bucket_meta failed to get object_lock conf:{}" .format (e ))
3773
+ pool .add_task (_get_bucket_object_lock_wrapper , Bucket , ** kwargs )
3774
+
3775
+ # ACL
3776
+ def _get_bucket_acl_wrapper (Bucket , ** kwargs ):
3777
+ try :
3778
+ resp = self .get_bucket_acl (Bucket , ** kwargs )
3779
+ data .update ({'ACL' : resp })
3780
+ except CosServiceError as e :
3781
+ logger .debug ("get_bucket_meta failed to get acl conf:{}" .format (e ))
3782
+ pool .add_task (_get_bucket_acl_wrapper , Bucket , ** kwargs )
3783
+
3784
+ # Logging
3785
+ def _get_bucket_logging_wrapper (Bucket , ** kwargs ):
3786
+ try :
3787
+ resp = self .get_bucket_logging (Bucket , ** kwargs )
3788
+ data .update ({'Logging' : resp })
3789
+ except CosServiceError as e :
3790
+ logger .debug ("get_bucket_meta failed to get logging conf:{}" .format (e ))
3791
+ pool .add_task (_get_bucket_logging_wrapper , Bucket , ** kwargs )
3792
+
3793
+ # Lifecycle
3794
+ def _get_bucket_lifecycle_wrapper (Bucket , ** kwargs ):
3795
+ try :
3796
+ resp = self .get_bucket_lifecycle (Bucket , ** kwargs )
3797
+ data .update ({'Lifecycle' : resp })
3798
+ except CosServiceError as e :
3799
+ logger .debug ("get_bucket_meta failed to get lifecycle conf:{}" .format (e ))
3800
+ pool .add_task (_get_bucket_lifecycle_wrapper , Bucket , ** kwargs )
3801
+
3802
+ # Replication
3803
+ def _get_bucket_replication_wrapper (Bucket , ** kwargs ):
3804
+ try :
3805
+ resp = self .get_bucket_replication (Bucket , ** kwargs )
3806
+ data .update ({'Replication' : resp })
3807
+ except CosServiceError as e :
3808
+ logger .debug ("get_bucket_meta failed to get replication conf:{}" .format (e ))
3809
+ pool .add_task (_get_bucket_replication_wrapper , Bucket , ** kwargs )
3810
+
3811
+ # Encryption
3812
+ def _get_bucket_encryption_wrapper (Bucket , ** kwargs ):
3813
+ try :
3814
+ resp = self .get_bucket_encryption (Bucket , ** kwargs )
3815
+ data .update ({'Encryption' : resp })
3816
+ except CosServiceError as e :
3817
+ logger .debug ("get_bucket_meta failed to get encryption conf:{}" .format (e ))
3818
+ pool .add_task (_get_bucket_encryption_wrapper , Bucket , ** kwargs )
3819
+
3820
+ # CORS
3821
+ def _get_bucket_cors_wrapper (Bucket , ** kwargs ):
3822
+ try :
3823
+ resp = self .get_bucket_cors (Bucket , ** kwargs )
3824
+ data .update ({'CORS' : resp })
3825
+ except CosServiceError as e :
3826
+ logger .debug ("get_bucket_meta failed to get cors conf:{}" .format (e ))
3827
+ pool .add_task (_get_bucket_cors_wrapper , Bucket , ** kwargs )
3828
+
3829
+ # Versioning
3830
+ def _get_bucket_versioning_wrapper (Bucket , ** kwargs ):
3831
+ try :
3832
+ resp = self .get_bucket_versioning (Bucket , ** kwargs )
3833
+ data .update ({'Versioning' : resp })
3834
+ except CosServiceError as e :
3835
+ logger .debug ("get_bucket_meta failed to get versioning conf:{}" .format (e ))
3836
+ pool .add_task (_get_bucket_versioning_wrapper , Bucket , ** kwargs )
3837
+
3838
+ # IntelligentTiering
3839
+ def _list_bucket_intelligenttiering_conf_wrapper (Bucket , ** kwargs ):
3840
+ try :
3841
+ resp = self .list_bucket_intelligenttiering_configurations (Bucket , ** kwargs )
3842
+ data .update ({'IntelligentTiering' : resp })
3843
+ except CosServiceError as e :
3844
+ logger .debug ("get_bucket_meta failed to get intelligenttiering conf:{}" .format (e ))
3845
+ pool .add_task (_list_bucket_intelligenttiering_conf_wrapper , Bucket , ** kwargs )
3846
+
3847
+ # Tagging
3848
+ def _get_bucket_tagging_wrapper (Bucket , ** kwargs ):
3849
+ try :
3850
+ resp = self .get_bucket_tagging (Bucket , ** kwargs )
3851
+ data .update ({'Tagging' : resp })
3852
+ except CosServiceError as e :
3853
+ logger .debug ("get_bucket_meta failed to get tagging conf:{}" .format (e ))
3854
+ pool .add_task (_get_bucket_tagging_wrapper , Bucket , ** kwargs )
3855
+
3856
+ pool .wait_completion ()
3857
+ return data
3858
+
3539
3859
# service interface begin
3540
3860
def list_buckets (self , TagKey = None , TagValue = None , Region = None , CreateTime = None , Range = None , Marker = "" , MaxKeys = 2000 , ** kwargs ):
3541
3861
"""列出符合条件的bucket
0 commit comments