vca_client.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. # Copyright 2017 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 VCA.
  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 VcaClient(BceBaseClient):
  29. """
  30. vca client
  31. """
  32. def __init__(self, config=None):
  33. BceBaseClient.__init__(self, config)
  34. @required(source=(bytes, str))
  35. def get_image_abstract(self, source):
  36. """
  37. Get image abstract analyze result
  38. :param source: image source
  39. :type source: string or unicode
  40. :return: **Http Response**
  41. """
  42. return self._send_request(http_methods.GET, b'/v1/abstract',
  43. params={b'source': source})
  44. @required(source=(bytes, str))
  45. def put_image_abstract(self, source):
  46. """
  47. Analyze a image abstract sync.
  48. :param source: image source
  49. :type source: string or unicode
  50. :param preset: analyze preset name
  51. :type preset: string or unicode
  52. :return: **Http Response**
  53. """
  54. body = {
  55. 'source': source
  56. }
  57. return self._send_request(http_methods.PUT, b'/v1/abstract', body=json.dumps(body))
  58. @required(source=(bytes, str))
  59. def put_image(self, source, preset=None):
  60. """
  61. Analyze a image sync.
  62. :param source: image source
  63. :type source: string or unicode
  64. :param preset: analyze preset name
  65. :type preset: string or unicode
  66. :return: **Http Response**
  67. """
  68. body = {
  69. 'source': source
  70. }
  71. if preset is not None:
  72. body['preset'] = preset
  73. return self._send_request(http_methods.PUT, b'/v2/image', body=json.dumps(body), params={b'sync': ''})
  74. @required(source=(bytes, str))
  75. def cancel(self, source):
  76. """
  77. cancel a media analyze by source
  78. :param source: media source
  79. :type source: string or unicode
  80. :return: **Http Response**
  81. """
  82. return self._send_request(http_methods.PUT, b'/v2/media', params={b'source': source, b'cancel': ''})
  83. @required(source=(bytes, str))
  84. def put_media(self, source, preset=None, notification=None, priority=None,
  85. title=None, sub_title=None, category=None,
  86. description=None, config=None):
  87. """
  88. Analyze a media.
  89. :param source: media source
  90. :type source: string or unicode
  91. :param preset: analyze preset name
  92. :type preset: string or unicode
  93. :param notification: notification name
  94. :type notification: string or unicode
  95. :param priority: priority
  96. :type priority: integer
  97. :param title: media title
  98. :type title: string or unicode
  99. :param sub_title: media subtitle
  100. :type sub_title: string or unicode
  101. :param category: media category
  102. :type category: string or unicode
  103. :param description: media description
  104. :type description: string or unicode
  105. :return: **Http Response**
  106. """
  107. body = {
  108. 'source': source
  109. }
  110. if preset is not None:
  111. body['preset'] = preset
  112. if notification is not None:
  113. body['notification'] = notification
  114. if priority is not None:
  115. body['priority'] = priority
  116. if title is not None:
  117. body['title'] = title
  118. if sub_title is not None:
  119. body['subTitle'] = sub_title
  120. if category is not None:
  121. body['category'] = category
  122. if description is not None:
  123. body['description'] = description
  124. return self._send_request(http_methods.PUT, b'/v2/media',
  125. body=json.dumps(body),
  126. config=config)
  127. @required(source=(bytes, str))
  128. def get_media(self, source, config=None):
  129. """
  130. Get analyze result, make sure called put_media before calling get_media
  131. :param source: media source
  132. :type source: string or unicode
  133. :return: **Http Response**
  134. """
  135. return self._send_request(http_methods.GET, b'/v2/media',
  136. params={b'source': source},
  137. config=config)
  138. @required(source=(bytes, str), type=(bytes, str))
  139. def get_sub_task(self, source, type, config=None):
  140. """
  141. Get sub task result for specified source of directed type
  142. :param source: media source
  143. :type source: string or unicode
  144. :param type: sub task type
  145. :type type: string or unicode
  146. :return: **Http Response**
  147. """
  148. return self._send_request(http_methods.GET,
  149. b'/v2/media/%s' % compat.convert_to_bytes(type),
  150. params={b'source': source},
  151. config=config)
  152. @staticmethod
  153. def _merge_config(self, config):
  154. if config is None:
  155. return self.config
  156. else:
  157. new_config = copy.copy(self.config)
  158. new_config.merge_non_none_values(config)
  159. return new_config
  160. def _send_request(
  161. self, http_method, path,
  162. body=None, headers=None, params=None,
  163. config=None,
  164. body_parser=None):
  165. config = self._merge_config(self, config)
  166. if body_parser is None:
  167. body_parser = handler.parse_json
  168. return bce_http_client.send_request(
  169. config, bce_v1_signer.sign, [handler.parse_error, body_parser],
  170. http_method, path, body, headers, params)