/
keepalive.py
61 lines (49 loc) · 1.89 KB
/
keepalive.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import datetime
from requests import ConnectionError
from .baseendpoint import BaseEndpoint
from ..resources import KeepAliveResource
from ..exceptions import (
KeepAliveError,
APIError,
InvalidResponse,
)
from ..utils import check_status_code
class KeepAlive(BaseEndpoint):
"""
KeepAlive operations.
"""
_error = KeepAliveError
def __call__(self, session=None, lightweight=None):
"""
Makes keep alive request.
:param requests.session session: Requests session object
:param bool lightweight: If True will return dict not a resource
:rtype: KeepAliveResource
"""
(response, elapsed_time) = self.request(session=session)
self.client.set_session_token(response.get('token'))
return self.process_response(response, KeepAliveResource, elapsed_time, lightweight)
def request(self, payload=None, params=None, session=None):
session = session or self.client.session
date_time_sent = datetime.datetime.utcnow()
try:
response = session.post(self.url, headers=self.client.keep_alive_headers)
except ConnectionError:
raise APIError(None, exception='ConnectionError')
except Exception as e:
raise APIError(None, exception=e)
elapsed_time = (datetime.datetime.utcnow() - date_time_sent).total_seconds()
check_status_code(response)
try:
response_data = response.json()
except ValueError:
raise InvalidResponse(response.text)
if self._error_handler:
self._error_handler(response_data)
return response_data, elapsed_time
def _error_handler(self, response, method=None, params=None):
if response.get('status') != 'SUCCESS':
raise self._error(response)
@property
def url(self):
return '%s%s' % (self.client.identity_uri, 'keepAlive')