Source code for performline.client

# Copyright (c) 2016, PerformLine, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of the company nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL PERFORMLINE, INC. BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

from __future__ import absolute_import
from .embedded.stdlib.clients.rest import StandardRestClient
from .embedded.stdlib.clients.rest.models import RestModel
from .embedded.stdlib.clients.rest.responses import SuccessResponse
from .products.common.api import CommonClientMethods
from .products.web.api import WebClientMethods
from .products.callcenter.api import CallCenterClientMethods
from .products.chatscout.api import ChatScoutClientMethods


ALLOWED_METHODS = ['get', 'post', 'put', 'delete', 'options', 'head']
RX_TRIM_SLASH = r'(?:^/*|/*$)'


[docs]class Client( ChatScoutClientMethods, CallCenterClientMethods, WebClientMethods, CommonClientMethods, StandardRestClient ): """PerformLine API Client""" url = 'https://api.performline.com' prefix = '/' def __init__(self, token, *args, **kwargs): self.headers['Authorization'] = 'Token {0}'.format(token) super(Client, self).__init__(*args, **kwargs)
[docs] def wrap_response(self, response, model, flat=False): """ Takes a SuccessResponse and returns the results as instances of the given model. Args: response (SuccessResponse): A SuccessResponse object containing the data to be wrapped. model (RestModel): A subclass of RestModel that should be used when creating instances for each result in the response. flat (bool, optional): Whether single-element lists should return just that element instead of the list itself. Returns: If ``response`` contains zero results, returns `None`. If ``response`` has one element and ``flat`` equals `True`, return the first element as an instance of type ``model``. In all other cases, return a list of instances of type ``model``. """ if isinstance(response, SuccessResponse) and response.length > 0: if issubclass(model, RestModel): models = [model(self, i) for i in response.results()] if flat and len(models) == 1: return models[0] else: return models else: return model return None