• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ringcentral / ringcentral-python / 139

pending completion
139

push

travis-ci-com

DaKingKong
increase version number

550 of 615 relevant lines covered (89.43%)

1.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

89.06
/ringcentral/http/client.py
1
#!/usr/bin/env python
2
# encoding: utf-8
3
import json
2✔
4
import urllib
2✔
5
import requests
2✔
6

7
from .api_response import ApiResponse
2✔
8
from .api_exception import ApiException
2✔
9
from ..core import urlencode, iterator
2✔
10

11

12
class Client:
2✔
13
    def __init__(self):
2✔
14
        pass
2✔
15

16
    def send(self, request):
2✔
17
        response = None
2✔
18

19
        try:
2✔
20
            prepared = request
2✔
21
            if isinstance(prepared, requests.models.Request): # not a prepared request
2✔
22
                prepared = request.prepare()
2✔
23
            response = self.load_response(prepared)
2✔
24

25
            if response.ok():
2✔
26
                return response
2✔
27
            else:
28
                response.response().raise_for_status()
2✔
29

30
        except Exception as e:
2✔
31
            if response is None:
2✔
32
                response = ApiResponse(request)
×
33

34
            raise ApiException(response, e)
2✔
35

36
    def load_response(self, request):
2✔
37
        # TODO Persist between requests?
38
        session = None
2✔
39

40
        try:
2✔
41
            session = requests.sessions.Session()
2✔
42
            response = session.send(request)
2✔
43
            session.close()
2✔
44

45
            return ApiResponse(request, response)
2✔
46

47
        except Exception:
×
48
            if session:
×
49
                session.close()
×
50
            raise
×
51

52
    def create_request(self, method='', url='', query_params=None, body=None, headers=None):
2✔
53
        """
54
        :param method:
55
        :param url:
56
        :param query_params:
57
        :param body:
58
        :param headers:
59
        :return:requests.Request
60
        """
61

62
        if query_params:
2✔
63
            if type(query_params) is dict:
2✔
64
                query = ""
2✔
65
                for key, value in  iter(query_params.items()):
2✔
66
                    if type(value) is list:
2✔
67
                        for k in value:
2✔
68
                            query += ("%s=%s&" % (key, k))
2✔
69
                    else:
70
                        query += ("%s=%s&" % (key, value))
2✔
71
                query = query[:-1]
2✔
72
            else:
73
                query = urlencode(query_params)
×
74
            if query:
2✔
75
                url = url + ('&' if url.find('?') > 0 else '?') + query
2✔
76

77
        content_type = None
2✔
78
        
79
        if headers is None:
2✔
80
            headers = {}
2✔
81

82
        it = iterator(headers)
2✔
83

84
        for key, value in it:
2✔
85
            if key.lower().find('content-type') >= 0:
2✔
86
                content_type = value
2✔
87
            if key.lower().find('accept') >= 0:
2✔
88
                headers['Accept'] = value
×
89

90
        if content_type is None:
2✔
91
            content_type = 'application/json'
2✔
92
            headers['Content-Type'] = content_type
2✔
93

94
        if content_type.lower().find('application/json') >= 0:
2✔
95
            body = json.dumps(body) if body else None
2✔
96
        elif content_type.lower().find('application/x-www-form-urlencoded') >= 0:
2✔
97
            body = urlencode(body) if body else None
2✔
98

99
        return requests.Request(method, url, headers=headers, data=body)
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc