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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/usr/bin/env python
'''Alpine/Chorus Client API Module'''
import logging
import requests
LOG = logging.Logger(name=__name__)
CONTENT_TYPE = 'application/x-www-form-urlencoded'
JSON_CONTENT_TYPE = 'application/json'
class ChorusSession(object):
'''Chorus User Session Object'''
def __init__(self, config):
self.config = config
self.sid = None
self.cookies = None
def __enter__(self):
'''create session and return sid and cookies'''
request_data = _login_(self.config.get('alpine', 'username'),
self.config.get('alpine', 'password'))
LOG.debug("Opening Chorus Session")
post = requests.post(self.get_url(request_data['url']),
params=request_data['params'],
data=request_data['data'],
headers=request_data['headers'])
LOG.info("Status code for session open: %d", post.status_code)
json = post.json()
self.sid = json['response']['session_id']
self.cookies = post.cookies
return self
def __exit__(self, _type, _value, _traceback):
'''Close chorus session'''
request_data = _logout_(self.sid, self.cookies)
LOG.debug("Closing Chorus Session")
delete = requests.delete(self.get_url(request_data['url']),
params=request_data['params'],
headers=request_data['headers'],
cookies=request_data['cookies'])
LOG.info("Status code for close: %d", delete.status_code)
def get_url(self, path=""):
'''Return the host and path for the chorus instance'''
return "http://%s/%s" % (self.config.get('alpine', 'host'), path)
def _login_(username, password):
'''Create Request Data for ChorusSession'''
return {
'data': {
'username': username,
'password': password,
},
'headers': {
'content-type': CONTENT_TYPE,
},
'params': {
'session_id': '',
},
'cookies': None,
'url': '/sessions?session_id=',
'method': 'POST',
}
def _check_login_(_, cookies):
'''Create request data for check login check'''
return {
'data': None,
'params': None,
'headers': {
'content-type': CONTENT_TYPE,
},
'cookies': cookies,
'url': '/sessions',
'method': 'GET',
}
def _logout_(sid, cookies):
'''Create request data for ChorusSession'''
return {
'data': None,
'headers': {
'content-type': CONTENT_TYPE,
},
'params': {
'session_id': sid,
},
'cookies': cookies,
'url': '/sessions',
'method': 'DELETE',
}
|