summaryrefslogtreecommitdiff
path: root/pylibchorus/chorus_client.py
blob: 5c7119f29b7400fc476b95bb38bac181eac32161 (plain)
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
#!/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 _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',
    }