forked from ChristopherMacGown/python-github3
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrequest.py
More file actions
66 lines (54 loc) · 2.03 KB
/
request.py
File metadata and controls
66 lines (54 loc) · 2.03 KB
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
import base64
import json
import urllib
import urllib2
class Request(object):
def __init__(self, username=None, password=None, oauth_token=None):
self._username = username
self._password = password
self._oauth_token = oauth_token
self._opener = urllib2.build_opener()
def _authenticate(self, req):
if self._oauth_token:
req.add_header('Authorization', 'token %s' % self._oauth_token)
elif self._username is not None and self._password is not None:
b64_userpass = base64.b64encode(
'%s:%s' % (self._username, self._password))
b64_userpass = b64_userpass.replace('\n', '')
req.add_header('Authorization', 'Basic %s' % b64_userpass)
return req
# TODO(termie): There is probably a simple way to refactor this all
# but it doesn't seem worth the effort yet.
def head(self, url, **kw):
url = '%s?%s' % (url, urllib.urlencode(kw))
req = HTTPMethodRequest('HEAD', url)
req = self._authenticate(req)
return self._opener.open(req)
def get(self, url, **kw):
url = '%s?%s' % (url, urllib.urlencode(kw))
req = HTTPMethodRequest('GET', url)
req = self._authenticate(req)
return self._opener.open(req)
def post(self, url, **kw):
req = HTTPMethodRequest('POST', url, json.dumps(kw))
req = self._authenticate(req)
return self._opener.open(req)
def patch(self, url, **kw):
req = HTTPMethodRequest('PATCH', url, json.dumps(kw))
req = self._authenticate(req)
return self._opener.open(req)
def put(self, url, **kw):
req = HTTPMethodRequest('PATCH', url, json.dumps(kw))
req = self._authenticate(req)
return self._opener.open(req)
def delete(self, url, **kw):
url = '%s?%s' % (url, urllib.urlencode(kw))
req = HTTPMethodRequest('DELETE', url)
req = self._authenticate(req)
return self._opener.open(req)
class HTTPMethodRequest(urllib2.Request):
def __init__(self, method, *args, **kw):
self._method = method
urllib2.Request.__init__(self, *args, **kw)
def get_method(self):
return self._method