Skip to content

Commit 2a49bfb

Browse files
authored
Merge pull request #209 from bug-is-zhanglinlin/master
ci-change-merge
2 parents f84b0a3 + 52ec34b commit 2a49bfb

File tree

3 files changed

+191
-6
lines changed

3 files changed

+191
-6
lines changed

demo/ci_media.py

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,19 @@
3030
bucket_name = 'demo-1253960454'
3131

3232

33+
def ci_get_media_bucket():
34+
# 查询媒体处理开通状态
35+
response = client.ci_get_media_bucket(
36+
Regions=region,
37+
BucketName='demo',
38+
BucketNames=bucket_name,
39+
PageSize="1",
40+
PageNumber="1"
41+
)
42+
print(response)
43+
return response
44+
45+
3346
def ci_get_media_queue():
3447
# 查询媒体队列信息
3548
response = client.ci_get_media_queue(
@@ -38,6 +51,7 @@ def ci_get_media_queue():
3851
print(response)
3952
return response
4053

54+
4155
def ci_create_media_transcode_watermark_jobs():
4256
# 创建转码任务
4357
body = {
@@ -102,6 +116,7 @@ def ci_create_media_transcode_watermark_jobs():
102116
print(response)
103117
return response
104118

119+
105120
def ci_create_media_transcode_jobs():
106121
# 创建转码任务
107122
body = {
@@ -124,6 +139,7 @@ def ci_create_media_transcode_jobs():
124139
print(response)
125140
return response
126141

142+
127143
def ci_list_media_transcode_jobs():
128144
# 转码任务
129145
response = client.ci_list_media_jobs(
@@ -135,6 +151,7 @@ def ci_list_media_transcode_jobs():
135151
print(response)
136152
return response
137153

154+
138155
def ci_get_media_transcode_jobs():
139156
# 转码任务
140157
response = client.ci_get_media_jobs(
@@ -145,6 +162,7 @@ def ci_get_media_transcode_jobs():
145162
print(response)
146163
return response
147164

165+
148166
def get_media_info():
149167
# 获取媒体信息
150168
response = client.get_media_info(
@@ -153,6 +171,7 @@ def get_media_info():
153171
)
154172
print(response)
155173

174+
156175
def get_snapshot():
157176
# 产生同步截图
158177
response = client.get_snapshot(
@@ -165,6 +184,18 @@ def get_snapshot():
165184
print(response)
166185
response['Body'].get_stream_to_file('snapshot.jpg')
167186

187+
188+
def get_pm3u8():
189+
# 获取私有 M3U8 ts 资源的下载授权
190+
response = client.get_pm3u8(
191+
Bucket=bucket_name,
192+
Key='demo.m3u8',
193+
Expires='3600',
194+
)
195+
print(response)
196+
response['Body'].get_stream_to_file('pm3u8.m3u8')
197+
198+
168199
def ci_trigger_workflow():
169200
# 触发工作流接口
170201
response = client.ci_trigger_workflow(
@@ -175,6 +206,7 @@ def ci_trigger_workflow():
175206
print(response)
176207
return response
177208

209+
178210
def ci_get_workflowexecution():
179211
# 查询工作流实例接口
180212
response = client.ci_get_workflowexecution(
@@ -184,6 +216,7 @@ def ci_get_workflowexecution():
184216
print(response)
185217
return response
186218

219+
187220
def ci_list_workflowexecution():
188221
# 查询工作流实例接口
189222
response = client.ci_list_workflowexecution(
@@ -198,8 +231,10 @@ def ci_list_workflowexecution():
198231
#ci_get_media_queue()
199232
#ci_get_media_transcode_jobs()
200233
#ci_create_media_transcode_jobs()
201-
#get_media_info()
202-
#get_snapshot()
234+
# get_media_info()
235+
# get_snapshot()
203236
#ci_trigger_workflow()
204237
#ci_list_workflowexecution()
205-
ci_get_workflowexecution()
238+
# ci_get_workflowexecution()
239+
# ci_get_media_bucket()
240+
get_pm3u8()

qcloud_cos/cos_client.py

Lines changed: 123 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token
114114
else:
115115
raise CosClientError('SecretId and SecretKey is Required!')
116116

117-
def uri(self, bucket, path=None, endpoint=None, domain=None):
117+
def uri(self, bucket=None, path=None, endpoint=None, domain=None):
118118
"""拼接url
119119
120120
:param bucket(string): 存储桶名称.
@@ -130,11 +130,14 @@ def uri(self, bucket, path=None, endpoint=None, domain=None):
130130
if domain is not None:
131131
url = domain
132132
else:
133-
bucket = format_bucket(bucket, self._appid)
134133
if endpoint is None:
135134
endpoint = self._endpoint
136135

137-
url = u"{bucket}.{endpoint}".format(bucket=bucket, endpoint=endpoint)
136+
if bucket is not None:
137+
bucket = format_bucket(bucket, self._appid)
138+
url = u"{bucket}.{endpoint}".format(bucket=bucket, endpoint=endpoint)
139+
else:
140+
url = u"{endpoint}".format(endpoint=endpoint)
138141
if self._ip is not None:
139142
url = self._ip
140143
if self._port is not None:
@@ -5529,6 +5532,70 @@ def ci_auditing_virus_query(self, Bucket, JobID, **kwargs):
55295532

55305533
return data
55315534

5535+
def ci_get_media_bucket(self, Regions='', BucketName='', BucketNames='', PageNumber='', PageSize='', **kwargs):
5536+
"""查询媒体处理开通状态接口 https://cloud.tencent.com/document/product/436/48988
5537+
5538+
:param Regions(string): 地域信息,例如 ap-shanghai、ap-beijing,若查询多个地域以“,”分隔字符串
5539+
:param BucketName(string): 存储桶名称前缀,前缀搜索
5540+
:param BucketNames(string): 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索
5541+
:param PageNumber(string): 第几页
5542+
:param PageSize(string): 每页个数
5543+
:param kwargs(dict): 设置请求的headers.
5544+
:return(dict): 查询成功返回的结果,dict类型.
5545+
5546+
.. code-block:: python
5547+
5548+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
5549+
client = CosS3Client(config)
5550+
# 查询媒体处理队列接口
5551+
response = client.ci_get_media_bucket(
5552+
Regions='ap-chongqing,ap-shanghai',
5553+
BucketName='demo',
5554+
BucketNames='demo-1253960454,demo1-1253960454',
5555+
PageNumber='2',
5556+
PageSize='3',
5557+
)
5558+
print response
5559+
"""
5560+
headers = mapped(kwargs)
5561+
final_headers = {}
5562+
params = {}
5563+
for key in headers:
5564+
if key.startswith("response"):
5565+
params[key] = headers[key]
5566+
else:
5567+
final_headers[key] = headers[key]
5568+
headers = final_headers
5569+
5570+
params = format_values(params)
5571+
5572+
path = "/mediabucket"
5573+
url = self._conf.uri(bucket=None, path=path, endpoint=self._conf._endpoint_ci)
5574+
url = u"{url}?{regions}&{bucketNames}&{bucketName}&{pageNumber}&{pageSize}".format(
5575+
url=to_unicode(url),
5576+
regions=to_unicode('regions='+Regions),
5577+
bucketNames=to_unicode('bucketNames='+BucketNames),
5578+
bucketName=to_unicode('bucketName='+BucketName),
5579+
pageNumber=to_unicode('pageNumber='+PageNumber),
5580+
pageSize=to_unicode('pageSize='+PageSize),
5581+
)
5582+
logger.info("get_media_bucket result, url=:{url} ,headers=:{headers}, params=:{params}".format(
5583+
url=url,
5584+
headers=headers,
5585+
params=params))
5586+
rt = self.send_request(
5587+
method='GET',
5588+
url=url,
5589+
bucket=None,
5590+
auth=CosS3Auth(self._conf, path, params=params),
5591+
params=params,
5592+
headers=headers)
5593+
5594+
data = xml_to_dict(rt.content)
5595+
# 单个元素时将dict转为list
5596+
format_dict(data, ['MediaBucketList'])
5597+
return data
5598+
55325599
def ci_get_media_queue(self, Bucket, **kwargs):
55335600
"""查询媒体处理队列接口 https://cloud.tencent.com/document/product/436/54045
55345601
@@ -6052,6 +6119,59 @@ def get_snapshot(self, Bucket, Key, Time, Width=None, Height=None, Format='jpg',
60526119

60536120
return response
60546121

6122+
def get_pm3u8(self, Bucket, Key, Expires, **kwargs):
6123+
"""获取私有 M3U8 ts 资源的下载授权 https://cloud.tencent.com/document/product/436/63740
6124+
6125+
:param Bucket(string): 存储桶名称.
6126+
:param Key(string): COS路径.
6127+
:param Expires(string): 私有 ts 资源 url 下载凭证的相对有效期.
6128+
:param kwargs(dict): 设置请求的headers.
6129+
:return(dict): 下载成功返回的结果,包含Body对应的StreamBody,可以获取文件流或下载文件到本地.
6130+
6131+
.. code-block:: python
6132+
6133+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
6134+
client = CosS3Client(config)
6135+
# 用于获取COS文件某个时间的截图
6136+
response = client.get_snapshot(
6137+
Bucket='bucket',
6138+
Key='test.mp4',
6139+
Expires='3600',
6140+
)
6141+
response['Body'].get_stream_to_file('pm3u8.m3u8')
6142+
"""
6143+
headers = mapped(kwargs)
6144+
final_headers = {}
6145+
params = {'ci-process': 'pm3u8'}
6146+
for key in headers:
6147+
if key.startswith("response"):
6148+
params[key] = headers[key]
6149+
else:
6150+
final_headers[key] = headers[key]
6151+
headers = final_headers
6152+
6153+
params['expires'] = Expires
6154+
params = format_values(params)
6155+
6156+
url = self._conf.uri(bucket=Bucket, path=Key)
6157+
logger.info("get_pm3u8, url=:{url} ,headers=:{headers}, params=:{params}".format(
6158+
url=url,
6159+
headers=headers,
6160+
params=params))
6161+
rt = self.send_request(
6162+
method='GET',
6163+
url=url,
6164+
bucket=Bucket,
6165+
stream=True,
6166+
auth=CosS3Auth(self._conf, Key, params=params),
6167+
params=params,
6168+
headers=headers)
6169+
6170+
response = dict(**rt.headers)
6171+
response['Body'] = StreamBody(rt)
6172+
6173+
return response
6174+
60556175
def ci_get_doc_queue(self, Bucket, **kwargs):
60566176
"""查询文档转码处理队列接口 https://cloud.tencent.com/document/product/460/46946
60576177

ut/test.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,6 +1789,34 @@ def test_get_snapshot():
17891789
assert (response)
17901790

17911791

1792+
def test_get_pm3u8():
1793+
if TEST_CI != 'true':
1794+
return
1795+
# 获取私有 M3U8 ts 资源的下载授权
1796+
response = client.get_pm3u8(
1797+
Bucket=ci_bucket_name,
1798+
Key='/data/media/m3u8_no_end.m3u8',
1799+
Expires='3600'
1800+
)
1801+
print(response)
1802+
assert (response)
1803+
1804+
1805+
def test_ci_get_media_bucket():
1806+
if TEST_CI != 'true':
1807+
return
1808+
# 获取私有 M3U8 ts 资源的下载授权
1809+
response = client.ci_get_media_bucket(
1810+
Regions=ci_region,
1811+
BucketNames=ci_bucket_name,
1812+
BucketName=ci_bucket_name,
1813+
PageNumber='1',
1814+
PageSize='2'
1815+
)
1816+
print(response)
1817+
assert (response)
1818+
1819+
17921820
def test_ci_create_doc_transcode_jobs():
17931821
if TEST_CI != 'true':
17941822
return
@@ -1965,6 +1993,8 @@ def test_sse_c_file():
19651993
test_ci_list_doc_transcode_jobs()
19661994
test_get_media_info()
19671995
test_get_snapshot()
1996+
test_get_pm3u8()
1997+
test_ci_get_media_bucket()
19681998
test_sse_c_file()
19691999
"""
19702000
tearDown()

0 commit comments

Comments
 (0)