Skip to content

Commit e611c26

Browse files
authored
Merge pull request #195 from laishzh/feature/add_object_tagging
add object_tagging functions.
2 parents 8924626 + 80616ea commit e611c26

File tree

2 files changed

+160
-0
lines changed

2 files changed

+160
-0
lines changed

qcloud_cos/cos_client.py

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,6 +2743,134 @@ def delete_bucket_inventory(self, Bucket, Id, **kwargs):
27432743
params=params)
27442744
return None
27452745

2746+
def put_object_tagging(self, Bucket, Key, Tagging={}, VersionId=None, **kwargs):
2747+
"""设置object的标签
2748+
2749+
:param Bucket(string): 存储桶名称.
2750+
:param Key(string): COS路径.
2751+
:param Tagging(dict): Object的标签集合
2752+
:param VersionId(string): 对象版本ID,可选.不指定时为Object的最新版本.
2753+
:param kwargs(dict): 设置请求headers.
2754+
:return: None.
2755+
2756+
.. code-block:: python
2757+
2758+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
2759+
client = CosS3Client(config)
2760+
# 设置bucket标签
2761+
tagging_set = {
2762+
'TagSet': {
2763+
'Tag': [
2764+
{
2765+
'Key': 'string',
2766+
'Value': 'string'
2767+
}
2768+
]
2769+
}
2770+
}
2771+
response = client.put_object_tagging(
2772+
Bucket='bucket',
2773+
Key='test.txt',
2774+
Tagging=tagging_set
2775+
)
2776+
"""
2777+
lst = ['<Tag>', '</Tag>'] # 类型为list的标签
2778+
xml_config = format_xml(data=Tagging, root='Tagging', lst=lst)
2779+
headers = mapped(kwargs)
2780+
headers['Content-MD5'] = get_md5(xml_config)
2781+
headers['Content-Type'] = 'application/xml'
2782+
params = {'tagging': ''}
2783+
if VersionId:
2784+
params['VersionId'] = VersionId
2785+
url = self._conf.uri(bucket=Bucket, path=Key)
2786+
logger.info("put object tagging, url=:{url} ,headers=:{headers}".format(
2787+
url=url,
2788+
headers=headers))
2789+
rt = self.send_request(
2790+
method='PUT',
2791+
url=url,
2792+
bucket=Bucket,
2793+
data=xml_config,
2794+
auth=CosS3Auth(self._conf, Key, params=params),
2795+
headers=headers,
2796+
params=params)
2797+
return None
2798+
2799+
def get_object_tagging(self, Bucket, Key, VersionId=None, **kwargs):
2800+
"""获取object标签
2801+
2802+
:param Bucket(string): 存储桶名称.
2803+
:param Key(string): COS路径.
2804+
:param VersionId(string): 对象版本ID,可选.不指定时为Object的最新版本.
2805+
:param kwargs(dict): 设置请求headers.
2806+
:return(dict): Bucket对应的标签.
2807+
2808+
.. code-block:: python
2809+
2810+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
2811+
client = CosS3Client(config)
2812+
# 获取bucket标签
2813+
response = client.get_object_tagging(
2814+
Bucket='bucket',
2815+
Key='test.txt'
2816+
)
2817+
"""
2818+
headers = mapped(kwargs)
2819+
params = {'tagging': ''}
2820+
if VersionId:
2821+
params['VersionId'] = VersionId
2822+
url = self._conf.uri(bucket=Bucket, path=Key)
2823+
logger.info("get object tagging, url=:{url} ,headers=:{headers}".format(
2824+
url=url,
2825+
headers=headers))
2826+
rt = self.send_request(
2827+
method='GET',
2828+
url=url,
2829+
bucket=Bucket,
2830+
auth=CosS3Auth(self._conf, Key, params=params),
2831+
headers=headers,
2832+
params=params)
2833+
data = xml_to_dict(rt.content)
2834+
if 'TagSet' in data:
2835+
format_dict(data['TagSet'], ['Tag'])
2836+
return data
2837+
2838+
def delete_object_tagging(self, Bucket, Key, VersionId=None, **kwargs):
2839+
"""删除object标签
2840+
2841+
:param Bucket(string): 存储桶名称.
2842+
:param Key(string): COS路径.
2843+
:param VersionId(string): 对象版本ID,可选.不指定时为Object的最新版本.
2844+
:param kwargs(dict): 设置请求headers.
2845+
:return(dict): None.
2846+
2847+
.. code-block:: python
2848+
2849+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
2850+
client = CosS3Client(config)
2851+
# 删除bucket标签
2852+
response = client.delete_object_tagging(
2853+
Bucket='bucket',
2854+
Key='test.txt'
2855+
)
2856+
"""
2857+
headers = mapped(kwargs)
2858+
params = {'tagging': ''}
2859+
if VersionId:
2860+
params['VersionId'] = VersionId
2861+
url = self._conf.uri(bucket=Bucket, path=Key)
2862+
logger.info("delete object tagging, url=:{url} ,headers=:{headers}".format(
2863+
url=url,
2864+
headers=headers))
2865+
rt = self.send_request(
2866+
method='DELETE',
2867+
url=url,
2868+
bucket=Bucket,
2869+
auth=CosS3Auth(self._conf, Key, params=params),
2870+
headers=headers,
2871+
params=params)
2872+
return None
2873+
27462874
def put_bucket_tagging(self, Bucket, Tagging={}, **kwargs):
27472875
"""设置bucket的标签
27482876

ut/test.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,38 @@ def test_put_get_delete_bucket_tagging():
11141114
)
11151115

11161116

1117+
def test_put_get_delete_bucket_tagging():
1118+
"""测试设置获取删除object标签"""
1119+
tagging_config = {
1120+
'TagSet': {
1121+
'Tag': [
1122+
{
1123+
'Key': 'key0',
1124+
'Value': 'value0'
1125+
}
1126+
]
1127+
}
1128+
}
1129+
response = client.put_object_tagging(
1130+
Bucket=test_bucket,
1131+
Key=test_object,
1132+
Tagging=tagging_config
1133+
)
1134+
# wait for sync
1135+
# get tagging
1136+
time.sleep(1)
1137+
response = client.get_object_tagging(
1138+
Bucket=test_bucket,
1139+
Key=test_object
1140+
)
1141+
assert tagging_config == response
1142+
# delete tagging
1143+
response = client.delete_object_tagging(
1144+
Bucket=test_bucket,
1145+
Key=test_object
1146+
)
1147+
1148+
11171149
def _test_put_get_delete_bucket_origin():
11181150
"""测试设置获取删除bucket回源域名"""
11191151
origin_config = {}

0 commit comments

Comments
 (0)