vcr_client.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. # Copyright 2017-2019 Baidu, Inc.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
  4. # except in compliance with the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the
  9. # License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
  10. # either express or implied. See the License for the specific language governing permissions
  11. # and limitations under the License.
  12. """
  13. This module provides a client class for VCR.
  14. """
  15. import copy
  16. import json
  17. import logging
  18. from builtins import str
  19. from builtins import bytes
  20. from baidubce import compat
  21. from baidubce.auth import bce_v1_signer
  22. from baidubce.bce_base_client import BceBaseClient
  23. from baidubce.http import bce_http_client
  24. from baidubce.http import handler
  25. from baidubce.http import http_methods
  26. from baidubce.utils import required
  27. _logger = logging.getLogger(__name__)
  28. class VcrClient(BceBaseClient):
  29. """
  30. vcr client
  31. """
  32. def __init__(self, config=None):
  33. BceBaseClient.__init__(self, config)
  34. @required(source=(bytes, str))
  35. def put_media(self, source, auth=None, description=None,
  36. preset=None, notification=None, config=None):
  37. """
  38. Check a media.
  39. :param source: media source
  40. :type source: string
  41. :param auth: media source auth param
  42. :type auth: string
  43. :param description: media description
  44. :type description: string
  45. :param preset: check preset name
  46. :type preset: string
  47. :param notification: notification name
  48. :type notification: string
  49. :return: **Http Response**
  50. """
  51. body = {
  52. 'source': source
  53. }
  54. if auth is not None:
  55. body['auth'] = auth
  56. if description is not None:
  57. body['description'] = description
  58. if preset is not None:
  59. body['preset'] = preset
  60. if notification is not None:
  61. body['notification'] = notification
  62. return self._send_request(http_methods.PUT, b'/v1/media',
  63. body=json.dumps(body),
  64. config=config)
  65. @required(source=(bytes, str))
  66. def get_media(self, source, config=None):
  67. """
  68. :param source: media source
  69. :type source: string
  70. :return: **Http Response**
  71. """
  72. return self._send_request(http_methods.GET, b'/v1/media',
  73. params={b'source': source},
  74. config=config)
  75. @required(source=(bytes, str))
  76. def put_audio(self, source, auth=None, description=None,
  77. preset=None, notification=None, config=None):
  78. """
  79. Check an audio.
  80. :param source: audio source
  81. :type source: string
  82. :param auth: audio source auth param
  83. :type auth: string
  84. :param description: audio description
  85. :type description: string
  86. :param preset: check preset name
  87. :type preset: string
  88. :param notification: notification name
  89. :type notification: string
  90. :return: **Http Response**
  91. """
  92. body = {
  93. 'source': source
  94. }
  95. if auth is not None:
  96. body['auth'] = auth
  97. if description is not None:
  98. body['description'] = description
  99. if preset is not None:
  100. body['preset'] = preset
  101. if notification is not None:
  102. body['notification'] = notification
  103. return self._send_request(http_methods.PUT, b'/v2/audio',
  104. body=json.dumps(body),
  105. config=config)
  106. @required(source=(bytes, str))
  107. def get_audio(self, source, config=None):
  108. """
  109. :param source: audio source
  110. :type source: string
  111. :return: **Http Response**
  112. """
  113. return self._send_request(http_methods.GET, b'/v2/audio',
  114. params={b'source': source},
  115. config=config)
  116. @required(source=(bytes, str))
  117. def put_image(self, source, preset=None, config=None):
  118. """
  119. :param source: image source
  120. :type source: string
  121. :param preset: check preset name
  122. :type preset: string
  123. :return: **Http Response**
  124. """
  125. body = {
  126. 'source': source
  127. }
  128. if preset is not None:
  129. body['preset'] = preset
  130. return self._send_request(http_methods.PUT, b'/v1/image',
  131. body=json.dumps(body),
  132. config=config)
  133. @required(source=(bytes, str))
  134. def put_image_async_check(self, source, preset=None, notification=None, description=None,
  135. config=None):
  136. """
  137. :param source: image source
  138. :type source: string
  139. :param preset: check preset name
  140. :type preset: string
  141. :param description: image description
  142. :type description: string
  143. :param notification: notification name
  144. :type notification: string
  145. :return: **Http Response**
  146. """
  147. body = {
  148. 'source': source
  149. }
  150. if preset is not None:
  151. body['preset'] = preset
  152. if description is not None:
  153. body['description'] = description
  154. if notification is not None:
  155. body['notification'] = notification
  156. return self._send_request(http_methods.PUT, b'/v2/image',
  157. body=json.dumps(body),
  158. config=config)
  159. @required(source=(bytes, str))
  160. def get_image_async_check_result(self, source, preset=None, config=None):
  161. """
  162. :param source: image source
  163. :type source: string
  164. :param preset: check preset name
  165. :type preset: string
  166. :return: **Http Response**
  167. """
  168. params = {b'source': source}
  169. if preset is not None:
  170. params[b'preset'] = preset
  171. return self._send_request(http_methods.GET, b'/v2/image',
  172. params=params,
  173. config=config)
  174. @required(text=(bytes, str))
  175. def put_text(self, text, preset=None, config=None):
  176. """
  177. :param text: text to check
  178. :type text: string
  179. :param preset: check preset name
  180. :type preset: string
  181. :return: **Http Response**
  182. """
  183. body = {
  184. 'text': text
  185. }
  186. if preset is not None:
  187. body['preset'] = preset
  188. return self._send_request(http_methods.PUT, b'/v1/text',
  189. body=json.dumps(body),
  190. config=config)
  191. @required(lib=(bytes, str), brief=(bytes, str), image=(bytes, str))
  192. def add_face_image(self, lib, brief, image, config=None):
  193. """
  194. :param lib: private face lib
  195. :param brief: private face brief
  196. :param image: private face image url
  197. :return: **Http Response**
  198. """
  199. body = {
  200. 'brief': brief,
  201. 'image': image
  202. }
  203. return self._send_request(http_methods.POST,
  204. b'/v1/face/lib/%s' % compat.convert_to_bytes(lib),
  205. body=json.dumps(body),
  206. config=config)
  207. @required(lib=(bytes, str), brief=(bytes, str))
  208. def del_face_brief(self, lib, brief, config=None):
  209. """
  210. :param lib: private face lib
  211. :param brief: private face brief
  212. :return: **Http Response**
  213. """
  214. params = {
  215. b'brief': brief
  216. }
  217. return self._send_request(http_methods.DELETE,
  218. b'/v1/face/lib/%s' % compat.convert_to_bytes(lib),
  219. params=params,
  220. config=config)
  221. @required(lib=(bytes, str), brief=(bytes, str), image=(bytes, str))
  222. def del_face_image(self, lib, brief, image, config=None):
  223. """
  224. :param lib: private face lib
  225. :param brief: private face brief
  226. :param image: private face image
  227. :return: **Http Response**
  228. """
  229. params = {
  230. b'brief': brief,
  231. b'image': image
  232. }
  233. return self._send_request(http_methods.DELETE,
  234. b'/v1/face/lib/%s' % compat.convert_to_bytes(lib),
  235. params=params,
  236. config=config)
  237. @required(lib=(bytes, str))
  238. def get_face_lib(self, lib, config=None):
  239. """
  240. :param lib: private face lib
  241. :return: **Http Response**
  242. """
  243. return self._send_request(http_methods.GET,
  244. b'/v1/face/lib/%s' % compat.convert_to_bytes(lib),
  245. config=config)
  246. @required(lib=(bytes, str), brief=(bytes, str))
  247. def get_face_brief(self, lib, brief, config=None):
  248. """
  249. :param lib: private face lib
  250. :param brief: private face brief
  251. :return: **Http Response**
  252. """
  253. params = {
  254. b'brief': brief
  255. }
  256. return self._send_request(http_methods.GET,
  257. b'/v1/face/lib/%s' % compat.convert_to_bytes(lib),
  258. params=params,
  259. config=config)
  260. @required(lib=(bytes, str), brief=(bytes, str), image=(bytes, str))
  261. def add_logo_image(self, lib, brief, image, config=None):
  262. """
  263. :param lib: private logo lib
  264. :param brief: private logo brief
  265. :param image: private logo image
  266. :return: **Http Response**
  267. """
  268. body = {
  269. 'brief': brief,
  270. 'image': image
  271. }
  272. return self._send_request(http_methods.POST,
  273. b'/v1/logo/lib/%s' % compat.convert_to_bytes(lib),
  274. body=json.dumps(body),
  275. config=config)
  276. @required(lib=(bytes, str), brief=(bytes, str))
  277. def del_logo_brief(self, lib, brief, config=None):
  278. """
  279. :param lib: private logo lib
  280. :param brief: private logo brief
  281. :return: **Http Response**
  282. """
  283. params = {
  284. b'brief': brief
  285. }
  286. return self._send_request(http_methods.DELETE,
  287. b'/v1/logo/lib/%s' % compat.convert_to_bytes(lib),
  288. params=params,
  289. config=config)
  290. @required(lib=(bytes, str), image=(bytes, str))
  291. def del_logo_image(self, lib, image, config=None):
  292. """
  293. :param lib: private logo lib
  294. :param image: private logo image
  295. :return: **Http Response**
  296. """
  297. params = {
  298. b'image': image
  299. }
  300. return self._send_request(http_methods.DELETE,
  301. b'/v1/logo/lib/%s' % compat.convert_to_bytes(lib),
  302. params=params,
  303. config=config)
  304. @required(lib=(bytes, str))
  305. def get_logo_lib(self, lib, config=None):
  306. """
  307. :param lib: private logo lib
  308. :return: **Http Response**
  309. """
  310. return self._send_request(http_methods.GET,
  311. b'/v1/logo/lib/%s' % compat.convert_to_bytes(lib),
  312. config=config)
  313. @required(lib=(bytes, str), brief=(bytes, str))
  314. def get_logo_brief(self, lib, brief, config=None):
  315. """
  316. :param lib: private logo lib
  317. :param brief: private logo brief
  318. :return: **Http Response**
  319. """
  320. params = {
  321. b'brief': brief
  322. }
  323. return self._send_request(http_methods.GET,
  324. b'/v1/logo/lib/%s' % compat.convert_to_bytes(lib),
  325. params=params,
  326. config=config)
  327. @staticmethod
  328. def _merge_config(self, config):
  329. if config is None:
  330. return self.config
  331. else:
  332. new_config = copy.copy(self.config)
  333. new_config.merge_non_none_values(config)
  334. return new_config
  335. def _send_request(
  336. self, http_method, path,
  337. body=None, headers=None, params=None,
  338. config=None,
  339. body_parser=None):
  340. config = self._merge_config(self, config)
  341. if body_parser is None:
  342. body_parser = handler.parse_json
  343. return bce_http_client.send_request(
  344. config, bce_v1_signer.sign, [handler.parse_error, body_parser],
  345. http_method, path, body, headers, params)