340
|
1 import httplib2
|
|
2 import json
|
|
3 from urllib import urlencode
|
|
4
|
346
|
5 _credentials = None
|
|
6
|
|
7 def SetCredentials(username, password):
|
|
8 global _credentials
|
|
9 _credentials = (username, password)
|
|
10
|
|
11 def _SetupCredentials(h):
|
|
12 global _credentials
|
|
13 if _credentials != None:
|
|
14 h.add_credentials(_credentials[0], _credentials[1])
|
|
15
|
340
|
16 def DoGet(uri, data = {}):
|
|
17 d = ''
|
|
18 if len(data.keys()) > 0:
|
|
19 d = '?' + urlencode(data)
|
|
20
|
|
21 h = httplib2.Http()
|
346
|
22 _SetupCredentials(h)
|
340
|
23 resp, content = h.request(uri + d, 'GET')
|
|
24 if not (resp.status in [ 200 ]):
|
|
25 raise Exception(resp.status)
|
|
26 else:
|
|
27 try:
|
|
28 return json.loads(content)
|
|
29 except:
|
|
30 return content
|
|
31
|
|
32
|
|
33 def _DoPutOrPost(uri, method, data, contentType):
|
|
34 h = httplib2.Http()
|
346
|
35 _SetupCredentials(h)
|
340
|
36
|
|
37 if isinstance(data, str):
|
|
38 body = data
|
|
39 if len(contentType) != 0:
|
|
40 headers = { 'content-type' : contentType }
|
354
|
41 else:
|
|
42 headers = { 'content-type' : 'text/plain' }
|
340
|
43 else:
|
|
44 body = json.dumps(data)
|
|
45 headers = { 'content-type' : 'application/json' }
|
|
46
|
|
47 resp, content = h.request(
|
|
48 uri, method,
|
|
49 body = body,
|
|
50 headers = headers)
|
|
51
|
|
52 if not (resp.status in [ 200, 302 ]):
|
|
53 raise Exception(resp.status)
|
|
54 else:
|
|
55 try:
|
|
56 return json.loads(content)
|
|
57 except:
|
|
58 return content
|
|
59
|
|
60
|
|
61 def DoDelete(uri):
|
|
62 h = httplib2.Http()
|
346
|
63 _SetupCredentials(h)
|
340
|
64 resp, content = h.request(uri, 'DELETE')
|
346
|
65
|
340
|
66 if not (resp.status in [ 200 ]):
|
|
67 raise Exception(resp.status)
|
|
68 else:
|
|
69 try:
|
|
70 return json.loads(content)
|
|
71 except:
|
|
72 return content
|
|
73
|
|
74
|
|
75 def DoPut(uri, data = {}, contentType = ''):
|
|
76 return _DoPutOrPost(uri, 'PUT', data, contentType)
|
|
77
|
|
78
|
|
79 def DoPost(uri, data = {}, contentType = ''):
|
|
80 return _DoPutOrPost(uri, 'POST', data, contentType)
|