188 lines
6.3 KiB
Python
188 lines
6.3 KiB
Python
# Copyright 2017 Baidu, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software distributed under the
|
|
# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
|
# either express or implied. See the License for the specific language governing permissions
|
|
# and limitations under the License.
|
|
|
|
"""
|
|
This module provides a client class for VCA.
|
|
"""
|
|
|
|
import copy
|
|
import json
|
|
import logging
|
|
from builtins import str
|
|
from builtins import bytes
|
|
|
|
from baidubce import compat
|
|
from baidubce.auth import bce_v1_signer
|
|
from baidubce.bce_base_client import BceBaseClient
|
|
from baidubce.http import bce_http_client
|
|
from baidubce.http import handler
|
|
from baidubce.http import http_methods
|
|
from baidubce.utils import required
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class VcaClient(BceBaseClient):
|
|
"""
|
|
vca client
|
|
"""
|
|
|
|
def __init__(self, config=None):
|
|
BceBaseClient.__init__(self, config)
|
|
|
|
@required(source=(bytes, str))
|
|
def get_image_abstract(self, source):
|
|
"""
|
|
Get image abstract analyze result
|
|
:param source: image source
|
|
:type source: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
return self._send_request(http_methods.GET, b'/v1/abstract',
|
|
params={b'source': source})
|
|
|
|
@required(source=(bytes, str))
|
|
def put_image_abstract(self, source):
|
|
"""
|
|
Analyze a image abstract sync.
|
|
:param source: image source
|
|
:type source: string or unicode
|
|
:param preset: analyze preset name
|
|
:type preset: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
body = {
|
|
'source': source
|
|
}
|
|
return self._send_request(http_methods.PUT, b'/v1/abstract', body=json.dumps(body))
|
|
|
|
@required(source=(bytes, str))
|
|
def put_image(self, source, preset=None):
|
|
"""
|
|
Analyze a image sync.
|
|
:param source: image source
|
|
:type source: string or unicode
|
|
:param preset: analyze preset name
|
|
:type preset: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
body = {
|
|
'source': source
|
|
}
|
|
if preset is not None:
|
|
body['preset'] = preset
|
|
return self._send_request(http_methods.PUT, b'/v2/image', body=json.dumps(body), params={b'sync': ''})
|
|
|
|
@required(source=(bytes, str))
|
|
def cancel(self, source):
|
|
"""
|
|
cancel a media analyze by source
|
|
:param source: media source
|
|
:type source: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
return self._send_request(http_methods.PUT, b'/v2/media', params={b'source': source, b'cancel': ''})
|
|
|
|
@required(source=(bytes, str))
|
|
def put_media(self, source, preset=None, notification=None, priority=None,
|
|
title=None, sub_title=None, category=None,
|
|
description=None, config=None):
|
|
"""
|
|
Analyze a media.
|
|
:param source: media source
|
|
:type source: string or unicode
|
|
:param preset: analyze preset name
|
|
:type preset: string or unicode
|
|
:param notification: notification name
|
|
:type notification: string or unicode
|
|
:param priority: priority
|
|
:type priority: integer
|
|
:param title: media title
|
|
:type title: string or unicode
|
|
:param sub_title: media subtitle
|
|
:type sub_title: string or unicode
|
|
:param category: media category
|
|
:type category: string or unicode
|
|
:param description: media description
|
|
:type description: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
body = {
|
|
'source': source
|
|
}
|
|
if preset is not None:
|
|
body['preset'] = preset
|
|
if notification is not None:
|
|
body['notification'] = notification
|
|
if priority is not None:
|
|
body['priority'] = priority
|
|
if title is not None:
|
|
body['title'] = title
|
|
if sub_title is not None:
|
|
body['subTitle'] = sub_title
|
|
if category is not None:
|
|
body['category'] = category
|
|
if description is not None:
|
|
body['description'] = description
|
|
return self._send_request(http_methods.PUT, b'/v2/media',
|
|
body=json.dumps(body),
|
|
config=config)
|
|
|
|
@required(source=(bytes, str))
|
|
def get_media(self, source, config=None):
|
|
"""
|
|
Get analyze result, make sure called put_media before calling get_media
|
|
:param source: media source
|
|
:type source: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
return self._send_request(http_methods.GET, b'/v2/media',
|
|
params={b'source': source},
|
|
config=config)
|
|
|
|
@required(source=(bytes, str), type=(bytes, str))
|
|
def get_sub_task(self, source, type, config=None):
|
|
"""
|
|
Get sub task result for specified source of directed type
|
|
:param source: media source
|
|
:type source: string or unicode
|
|
:param type: sub task type
|
|
:type type: string or unicode
|
|
:return: **Http Response**
|
|
"""
|
|
return self._send_request(http_methods.GET,
|
|
b'/v2/media/%s' % compat.convert_to_bytes(type),
|
|
params={b'source': source},
|
|
config=config)
|
|
|
|
@staticmethod
|
|
def _merge_config(self, config):
|
|
if config is None:
|
|
return self.config
|
|
else:
|
|
new_config = copy.copy(self.config)
|
|
new_config.merge_non_none_values(config)
|
|
return new_config
|
|
|
|
def _send_request(
|
|
self, http_method, path,
|
|
body=None, headers=None, params=None,
|
|
config=None,
|
|
body_parser=None):
|
|
config = self._merge_config(self, config)
|
|
if body_parser is None:
|
|
body_parser = handler.parse_json
|
|
|
|
return bce_http_client.send_request(
|
|
config, bce_v1_signer.sign, [handler.parse_error, body_parser],
|
|
http_method, path, body, headers, params)
|