summaryrefslogtreecommitdiff
path: root/pylibchorus/chorus_client.py
blob: ed37be2c13c948edd758cacc76162462cd068ab0 (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/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',
    }

def _create_workfile_(workspace_id, workfile_name, sid, cookies):
    '''Create request data for workfile creation'''
    return {
        'data': {
            'workspace_id': workspace_id,
            'file_name': workfile_name,
        },
        'headers': {
            'content-type': CONTENT_TYPE,
        },
        'params': {
            'session_id': sid,
        },
        'cookies': cookies,
        'url': '/workspaces/%s/workfiles' % workspace_id,
        'method': 'POST',
    }

def _update_workfile_version_(userid, workfile_id, workfile, sid, cookies):
    '''Create request data to update a workfile'''
    return {
        'data': {
            'owner_id': userid,
            'modifier_id': userid,
            'commit_message': 'git commit',
            'content': workfile,
        },
        'params': {
            'session_id': sid,
        },
        'headers': {
            'content-type': CONTENT_TYPE,
        },
        'cookies': cookies,
        'url': '/workfiles/%s/versions' % workfile_id,
        'method': 'POST',
    }