# Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved # # 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 CDN. """ import copy import json import logging import baidubce from baidubce import bce_base_client from baidubce.auth import bce_v1_signer from baidubce.http import bce_http_client from baidubce.http import handler from baidubce.http import http_content_types from baidubce.http import http_headers from baidubce.http import http_methods from baidubce.exception import BceClientError from baidubce.exception import BceServerError from baidubce.utils import required from baidubce import utils from baidubce.services.cdn.cdn_stats_param import CdnStatsParam _logger = logging.getLogger(__name__) class CdnClient(bce_base_client.BceBaseClient): """ CdnClient """ prefix = b"/v2" def __init__(self, config=None): bce_base_client.BceBaseClient.__init__(self, config) def list_domains(self, config=None): """ get domain list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain', config=config) def list_user_domains(self, status, rule=None, config=None): """ get user domain list :param status: Specify the domain whose return 'status' is status :type status: string :param rule: domain Fuzzy Matching :type rule: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['status'] = status if rule is not None: params['rule'] = rule return self._send_request( http_methods.GET, '/user/domains', params=params, config=config) def valid_domain(self, domain, config=None): """ query if a domain can be create :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/valid', config=config) def get_domain_cache_full_url(self, domain, config=None): """ get cache full url of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'cacheFullUrl': ''}, config=config) def set_domain_cache_share(self, domain, cache_share, config=None): """ update cacheShare of the domain :param domain: the domain name :type domain: string :param cache_share: detailed configuration of cacheShare :type cache_share: dictionary :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'cacheShare': ''}, body=json.dumps({'cacheShare': cache_share}), config=config) def get_domain_cache_share(self, domain, config=None): """ get cacheShare configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'cacheShare': ''}, config=config) def set_domain_traffic_limit(self, domain, traffic_limit, config=None): """ update trafficLimit of the domain :param domain: the domain name :type domain: string :param traffic_limit: detailed configuration of trafficLimit :type traffic_limit: dictionary :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'trafficLimit': ''}, body=json.dumps({'trafficLimit': traffic_limit}), config=config) def get_domain_traffic_limit(self, domain, config=None): """ get trafficLimit configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'trafficLimit': ''}, config=config) def set_domain_ua_acl(self, domain, ua_acl, config=None): """ update uaAcl of the domain :param domain: the domain name :type domain: string :param ua_acl: detailed configuration of uaAcl :type ua_acl: dictionary :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'uaAcl': ''}, body=json.dumps({'uaAcl': ua_acl}), config=config) def get_domain_ua_acl(self, domain, config=None): """ get uaAcl configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'uaAcl': ''}, config=config) def set_domain_origin_protocol(self, domain, origin_protocol, config=None): """ update originProtocol of the domain :param domain: the domain name :type domain: string :param origin_protocol: detailed configuration of originProtocol :type origin_protocol: dictionary :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'originProtocol': ''}, body=json.dumps({'originProtocol': origin_protocol}), config=config) def get_domain_origin_protocol(self, domain, config=None): """ get originProtocol configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'originProtocol': ''}, config=config) def set_domain_retry_origin(self, domain, retry_origin, config=None): """ update retryOrigin of the domain :param domain: the domain name :type domain: string :param retry_origin: detailed configuration of retryOrigin :type retry_origin: dictionary :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'retryOrigin': ''}, body=json.dumps({'retryOrigin': retry_origin}), config=config) def get_domain_retry_origin(self, domain, config=None): """ get retryOrigin configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'retryOrigin': ''}, config=config) def set_domain_ipv6_dispatch(self, domain, ipv6_dispatch, config=None): """ update ipv6Dispatch of the domain :param domain: the domain name :type domain: string :param ipv6_dispatch: detailed configuration of IPv6 access and IPv6 back to source :type ipv6_dispatch: IPv6Config :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'ipv6Dispatch': ''}, body=json.dumps({'ipv6Dispatch': ipv6_dispatch}), config=config) def get_domain_ipv6_dispatch(self, domain, config=None): """ get ipv6Dispatch configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'ipv6Dispatch': ''}, config=config) def set_domain_quic(self, domain, quic, config=None): """ update QUIC of the domain :param domain: the domain name :type domain: string :param quic: detailed configuration of Quick UDP Internet Connection :type quic: bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'quic': ''}, body=json.dumps({'quic': quic}), config=config) def get_domain_quic(self, domain, config=None): """ get quic configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'quic': ''}, config=config) def set_domain_offline_mode(self, domain, offline_mode, config=None): """ update offlineMode of the domain :param domain: the domain name :type domain: string :param offline_mode: detailed configuration of offlineMode :type offline_mode: bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'offlineMode': ''}, body=json.dumps({'offlineMode': offline_mode}), config=config) def get_domain_offline_mode(self, domain, config=None): """ get offlineMode configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'offlineMode': ''}, config=config) def set_domain_ocsp(self, domain, ocsp, config=None): """ update OCSP configuration of the domain :param domain: the domain name :type domain: string :param ocsp: detailed configuration of Online Certificate Status Protocol :type ocsp: bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'ocsp': ''}, body=json.dumps({'ocsp': ocsp}), config=config) def get_domain_ocsp(self, domain, config=None): """ get ocsp configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'ocsp': ''}, config=config) def set_domain_error_page(self, domain, error_page, config=None): """ update error_page of the domain :param domain: the domain name :type domain: string :param error_page: Detailed configuration of custom error jump pages :type error_page: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'errorPage': ''}, body=json.dumps({'errorPage': error_page}), config=config) def get_domain_error_page(self, domain, config=None): """ get error page configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'errorPage': ''}, config=config) def get_domain_referer_acl(self, domain, config=None): """ get referer acl configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'refererACL': ''}, config=config) def get_domain_ip_acl(self, domain, config=None): """ get ip acl configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'ipACL': ''}, config=config) def set_domain_cors(self, domain, cors, config=None): """ update cors of the domain :param domain: the domain name :type domain: string :param cors: Accelerating Cross-domain Settings for Domain Names :type cors :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'cors': ''}, body=json.dumps({'cors': cors}), config=config) def get_domain_cors(self, domain, config=None): """ get cors configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'cors': ''}, config=config) def set_domain_access_limit(self, domain, access_limit, config=None): """ update access limit of the domain :param domain: the domain name :type domain: string :param access_limit: Setting IP Access Limitation :type AccessLimit :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'accessLimit': ''}, body=json.dumps({'accessLimit': access_limit}), config=config) def get_domain_access_limit(self, domain, config=None): """ get access limit configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'accessLimit': ''}, config=config) def set_domain_client_ip(self, domain, client_ip, config=None): """ update Getting Real User IP Settings :param domain: the domain name :type domain: string :param client_ip: Getting Real User IP Settings :type ClientIp :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'clientIp': ''}, body=json.dumps({'clientIp': client_ip}), config=config) def get_domain_client_ip(self, domain, config=None): """ get client ip configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'clientIp': ''}, config=config) def set_domain_range_switch(self, domain, range_switch, config=None): """ update range backsource Settings :param domain: the domain name :type domain: string :param range_switch: rangre backsource settings :type bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'rangeSwitch': ''}, body=json.dumps({'rangeSwitch': range_switch}), config=config) def get_domain_range_switch(self, domain, config=None): """ get range switch configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'rangeSwitch': ''}, config=config) def set_domain_mobile_access(self, domain, mobile_access, config=None): """ update mobile access Settings :param domain: the domain name :type domain: string :param mobile_access: mobile access settings :type MobileAccess :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'mobileAccess': ''}, body=json.dumps({'mobileAccess': mobile_access}), config=config) def get_domain_mobile_access(self, domain, config=None): """ get mobile access configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'mobileAccess': ''}, config=config) def set_domain_http_header(self, domain, http_header, config=None): """ update http header Settings :param domain: the domain name :type domain: string :param http_header: http header settings :type HttpHeader :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'httpHeader': ''}, body=json.dumps({'httpHeader': http_header}), config=config) def get_domain_http_header(self, domain, config=None): """ get http header configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'httpHeader': ''}, config=config) def set_domain_file_trim(self, domain, file_trim, config=None): """ update file trim Settings :param domain: the domain name :type domain: string :param file_trim: file trim settings :type bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'fileTrim': ''}, body=json.dumps({'fileTrim': file_trim}), config=config) def get_domain_file_trim(self, domain, config=None): """ get file trim configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'fileTrim': ''}, config=config) def set_domain_media_drag(self, domain, media_drag, config=None): """ update media drag Settings :param domain: the domain name :type domain: string :param media_drag: media drag settings :type MediaDragConf :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'mediaDrag': ''}, body=json.dumps({'mediaDragConf': media_drag}), config=config) def get_domain_media_drag(self, domain, config=None): """ get range switch configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'mediaDrag': ''}, config=config) def set_domain_compress(self, domain, compress, config=None): """ update compress Settings :param domain: the domain name :type domain: string :param compress: media drag settings :type compress :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'compress': ''}, body=json.dumps({'compress': compress}), config=config) def get_domain_compress(self, domain, config=None): """ get compress configuration of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'compress': ''}, config=config) def get_domain_records(self, Type=None, start_time=None, end_time=None, url=None, marker=None, config=None): """ Query refresh and preload records :param Type: None :type string :param start_time: None :type Timestamp :param end_time: None :type Timestamp :param url: None :type string :param marker: None :type string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} if Type is not None: params['type'] = Type if start_time is not None: params['startTime'] = start_time if end_time is not None: params['endTime'] = end_time if url is not None: params['url'] = url if marker is not None: params['marker'] = marker if params is None: params = {} return self._send_request( http_methods.GET, '/cache/records', params = params, config=config) def set_dsa(self, action, config=None): """ set das enable :param action: dsa enable :type string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/dsa', body=json.dumps({'action': action}), config=config) def set_domain_dsa(self, domain, dsa, config=None): """ update domain dsa Settings :param domain: the domain name :type domain: string :param dsa: domain dsa settings :type DSA :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'dsa': ''}, body=json.dumps({'dsa': dsa}), config=config) def get_dsa_domains(self, config=None): """ get dsa domain list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/dsa/domain', config=config) def get_log_list(self, log, config=None): """ get log list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.POST, '/log/list', body=json.dumps(log), config=config) def create_domain(self, domain, origin, other=None, config=None): """ create domain :param domain: the domain name :type domain: string :param origin: the origin address list :type origin: list :param other: the other config :type other: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ body = {'origin': origin} if other is not None: body.update(other) return self._send_request( http_methods.PUT, '/domain/' + domain, body=json.dumps(body), config=config) def delete_domain(self, domain, config=None): """ delete a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.DELETE, '/domain/' + domain, config=config) def enable_domain(self, domain, config=None): """ enable a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.POST, '/domain/' + domain, params={'enable': ''}, config=config) def disable_domain(self, domain, config=None): """ disable a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.POST, '/domain/' + domain, params={'disable': ''}, config=config) def get_domain_config(self, domain, config=None): """ get configuration of the domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ if domain[0] == '*': domain = '%2A' + domain[1:] return self._send_request( http_methods.GET, '/domain/' + domain + '/config', config=config) def set_domain_multi_configs(self, domain, multi_configs, config=None): """ update multiConfigs of the domain :param domain: the domain name :type domain: string :param multi_configs: the domain config list :type multi_configs: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'multiConfigs': ''}, body=json.dumps({'multiConfigs': multi_configs}), config=config) def set_domain_origin(self, domain, origin, other=None, config=None): """ update origin address of the domain :param domain: the domain name :type domain: string :param origin: the origin address list :type origin: list :param other: origin extension configuration :type other: dictionary :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ body = {'origin': origin} if other is not None: body.update(other) return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'origin': ''}, body=json.dumps(body), config=config) def get_domain_cache_ttl(self, domain, config=None): """ get cache rules of a domain :param domain: the domain name :type domain: string :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'cacheTTL': ''}, config=config) @required(domain=str, rules=list) def set_domain_cache_ttl(self, domain, rules, config=None): """ set cache rules of a domain :param domain: the domain name :type domain: string :param rules: cache rules :type rules: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'cacheTTL': ''}, body=json.dumps({'cacheTTL': rules}), config=config) def set_domain_cache_full_url(self, domain, flag, config=None): """ set if use the full url as cache key :param domain: the domain name :type domain: string :param flag: :type flag: bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'cacheFullUrl': ''}, body=json.dumps({'cacheFullUrl': flag}), config=config) @required(domain=str) def set_domain_referer_acl(self, domain, blackList=None, whiteList=None, allowEmpty=True, config=None): """ set request referer access control :param domain: the domain name :type domain: string :param blackList: referer blackList :type blackList: list :param whitelist: referer whitelist :type whitelist: list :param allowempty: allow empty referer? :type allowempty: bool :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ acl = {} acl['allowEmpty'] = allowEmpty if blackList is not None: acl['blackList'] = blackList if whiteList is not None: acl['whiteList'] = whiteList return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'refererACL': ''}, body=json.dumps({'refererACL': acl}), config=config) @required(domain=str) def set_domain_ip_acl(self, domain, blackList=None, whiteList=None, config=None): """ set request ip access control :param domain: the domain name :type domain: string :param blackList: ip blackList :type blackList: list :param whitelist: ip whitelist :type whitelist: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ acl = {} if blackList is not None: acl['blackList'] = blackList if whiteList is not None: acl['whiteList'] = whiteList return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'ipACL': ''}, body=json.dumps({'ipACL': acl}), config=config) @required(domain=str, https=dict) def set_domain_https(self, domain, https, config=None): """ set request ip access control :param domain: the domain name :type domain: string :param https: https config :type https: dict :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'https': ''}, body=json.dumps({'https': https}), config=config) @required(domain=str, limitRate=int) def set_domain_limit_rate(self, domain, limitRate, config=None): """ set limit rate :param domain: the domain name :type domain: string :param limitRate: limit rate value (Byte/s) :type limitRate: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'limitRate': ''}, body=json.dumps({'limitRate': limitRate}), config=config) @required(domain=str, request_auth=dict) def set_domain_request_auth(self, domain, requestAuth, config=None): """ set request auth :param domain: the domain :type domain: string :param requestAuth: request auth config :type requestAuth: dict :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'requestAuth': ''}, body=json.dumps({'requestAuth': requestAuth}), config=config) @required(param=CdnStatsParam) def get_domain_stats(self, param, config=None): """ query stats of the domain or uid or tagId, eg : flow pv :param param: the stats query param :type param: cdn_stats_param.CdnStatsParam :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.POST, '/stat/query', body=json.dumps(param.__dict__), config=config) def get_domain_pv_stat(self, domain=None, startTime=None, endTime=None, period=300, withRegion=None, config=None): """ query pv and qps of the domain :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param withRegion: if need client region distribution :type withRegion: any :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period params['withRegion'] = withRegion return self._send_request( http_methods.GET, '/stat/pv', params=params, config=config) def get_domain_flow_stat(self, domain=None, startTime=None, endTime=None, period=300, withRegion=None, config=None): """ query bandwidth of the domain :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param withRegion: if need client region distribution :type withRegion: any :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period params['withRegion'] = withRegion return self._send_request( http_methods.GET, '/stat/flow', params=params, config=config) def get_domain_src_flow_stat(self, domain=None, startTime=None, endTime=None, period=300, config=None): """ query origin bandwidth of the domain :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period return self._send_request( http_methods.GET, '/stat/srcflow', params=params, config=config) def get_domain_hitrate_stat(self, domain=None, startTime=None, endTime=None, period=300, config=None): """ query hit rate of the domain :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period return self._send_request( http_methods.GET, '/stat/hitrate', params=params, config=config) def get_domain_httpcode_stat(self, domain=None, startTime=None, endTime=None, period=300, withRegion=None, config=None): """ query http response code of a domain or all domains of the user :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param withRegion: if need client region distribution :type withRegion: any :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period params['withRegion'] = withRegion return self._send_request( http_methods.GET, '/stat/httpcode', params=params, config=config) def get_domain_topn_url_stat(self, domain=None, startTime=None, endTime=None, period=300, config=None): """ query top n url of the domain or all domains of the user :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period return self._send_request( http_methods.GET, '/stat/topn/url', params=params, config=config) def get_domain_topn_referer_stat(self, domain=None, startTime=None, endTime=None, period=300, config=None): """ query top n referer of the domain or all domains of the user :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period return self._send_request( http_methods.GET, '/stat/topn/referer', params=params, config=config) def get_domain_uv_stat(self, domain=None, startTime=None, endTime=None, period=3600, config=None): """ query the total number of client of a domain or all domains of the user :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period return self._send_request( http_methods.GET, '/stat/uv', params=params, config=config) def get_domain_avg_speed_stat(self, domain=None, startTime=None, endTime=None, period=300, config=None): """ query average of the domain or all domains of the user :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param period: time interval of query result :type period: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['domain'] = domain if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['period'] = period return self._send_request( http_methods.GET, '/stat/avgspeed', params=params, config=config) @required(tasks=list) def purge(self, tasks, config=None): """ purge the cache of specified url or directory :param tasks: url or directory list to purge :type tasks: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ body = {} body['tasks'] = tasks return self._send_request( http_methods.POST, '/cache/purge', config=config, body=json.dumps(body)) def list_purge_tasks(self, id=None, url=None, startTime=None, endTime=None, marker=None, config=None): """ query the status of purge tasks :param id: purge task id to query :type id: string :param url: purge url to query :type url: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param marker: 'nextMarker' get from last query :type marker: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['id'] = id params['url'] = url if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['marker'] = marker return self._send_request( http_methods.GET, '/cache/purge', params=params, config=config) @required(tasks=list) def prefetch(self, tasks, config=None): """ prefetch the source of specified url from origin :param tasks: url or directory list need prefetch :type tasks: list :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ body = {} body['tasks'] = tasks return self._send_request( http_methods.POST, '/cache/prefetch', config=config, body=json.dumps(body)) def list_prefetch_tasks(self, id=None, url=None, startTime=None, endTime=None, marker=None, config=None): """ query the status of prefetch tasks :param id: prefetch task id to query :type id: string :param url: prefetch url to query :type url: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param marker: 'nextMarker' get from last query :type marker: int :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} params['id'] = id params['url'] = url if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime params['marker'] = marker return self._send_request( http_methods.GET, '/cache/prefetch', params=params, config=config) def list_quota(self, config=None): """ query purge quota of the user :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request(http_methods.GET, '/cache/quota', config=config) def get_domain_log(self, domain, startTime, endTime, config=None): """ get log of the domain in specified period of time :param domain: the domain name :type domain: string :param startTime: query start time :type startTime: Timestamp :param endTime: query end time :type endTime: Timestamp :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ params = {} if startTime is not None: params['startTime'] = startTime if endTime is not None: params['endTime'] = endTime return self._send_request( http_methods.GET, '/log/' + domain + '/log', params=params, config=config) def ip_query(self, action, ip, config=None): """ check specified ip whether belongs to Baidu CDN :param action: 'describeIp' :type action: string :param ip: specified ip :type ip: string """ params = {} params['action'] = action params['ip'] = ip if params is None: params = {} return self._send_request( http_methods.GET, '/utils', params=params, config=config) def list_nodes(self, config=None): """ Baidu back source IP address segment query :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/nodes/list', params={}, config=config) @required(domain=str) def set_seo(self, domain, push_record=False, directory_origin=False, config=None): """ set seo :param domain: the domain name :type domain: string :param push_record: push record to baidu or not :type param: boolean :param directory_origin: directory access origin or not :param config: None :type config: baidubce.BceClientConfiguration :return: :rtype: baidubce.bce_response.BceResponse """ body = dict() body['pushRecord'] = "ON" if push_record else "OFF" body['diretlyOrigin'] = "ON" if directory_origin else "OFF" return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'seoSwitch': ''}, body=json.dumps({'seoSwitch': body}), config=config) @required(domain=str) def get_seo(self, domain, config=None): """ get seo configuration. :param domain: the domain name :type domain: string :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.GET, '/domain/' + domain + '/config', params={'seoSwitch': ''}, config=config) @required(domain=str) def set_follow_protocol(self, domain, follow, config=None): """ set follow protocol. :param domain: the domain name :type domain: string :param follow: follow protocol or not :type follow: boolean :return: :rtype: baidubce.bce_response.BceResponse """ return self._send_request( http_methods.PUT, '/domain/' + domain + '/config', params={'followProtocol': ''}, body=json.dumps({'followProtocol': follow}), 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, utils.append_uri(CdnClient.prefix, path), body, headers, params)