summaryrefslogtreecommitdiff
path: root/pylibchorus/chorus_client.py
blob: dbacea909d64ab64908392eaef82e66d84d67de1 (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
86
87
88
89
90
91
92
93
#!/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'

def login(username, password, session):
    '''POST login request to chorus server'''
    return _perform_http_method_(
        session.config.get('alpine', 'host'), _login_(username, password))

def logout(session):
    '''DELETE login request to chorus server'''
    return _perform_http_method_(
        session.config.get('alpine', 'host'),
        _logout_(session.sid, session.cookies))

def check_login_status(session):
    '''GET login request to chorus server'''
    return _perform_http_method_(
        session.config.get('alpine', 'host'),
        _check_login_(session.sid, session.cookies))

def _get_url_(host, endpoint=""):
    '''Return the host and path for the chorus instance'''
    return "http://%s/%s" % (host, endpoint)

def _perform_http_method_(host, request_data):
    '''Perform IO operation to Chorus Server using request_data object'''
    methods = {'GET': requests.get,
               'POST': requests.post,
               'DELETE': requests.delete,}
    method = methods[request_data['method']]
    response = method(_get_url_(host, request_data['url']),
                      params=request_data['params'],
                      headers=request_data['headers'],
                      cookies=request_data['cookies'],
                      data=request_data['data'])
    LOG.info("Request: %s status code: %d",
             request_data['url'],
             response.status_code)
    return response

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',
    }