44from urlparse import urlparse
55from urllib import urlencode
66
7+ GITHUB_URL = "http://github.com"
8+
79URL_PREFIX = "http://github.com/api/v2/json"
810
911class GithubError (Exception ):
1012 """An error occured when making a request to the Github API."""
1113
1214class GithubRequest (object ):
13- url_prefix = URL_PREFIX
15+ github_url = GITHUB_URL
16+ url_format = "%(github_url)s/api/%(api_version)s/%(api_format)s"
17+ api_version = "v2"
18+ api_format = "json"
1419 GithubError = GithubError
1520
1621 connector_for_scheme = {
@@ -21,7 +26,13 @@ class GithubRequest(object):
2126 def __init__ (self , username , api_token , url_prefix = None ):
2227 self .username = username
2328 self .api_token = api_token
24- self .url_prefix = url_prefix or self .url_prefix
29+ self .url_prefix = url_prefix
30+ if not self .url_prefix :
31+ self .url_prefix = self .url_format % {
32+ "github_url" : self .github_url ,
33+ "api_version" : self .api_version ,
34+ "api_format" : self .api_format ,
35+ }
2536
2637 def encode_authentication_data (self , extra_post_data ):
2738 post_data = {"user" : self .username ,
@@ -40,6 +51,9 @@ def post(self, *path_components, **extra_post_data):
4051 def make_request (self , path , extra_post_data = None ):
4152 extra_post_data = extra_post_data or {}
4253 url = "/" .join ([self .url_prefix , path ])
54+ return self .raw_request (url , extra_post_data )
55+
56+ def raw_request (self , url , extra_post_data ):
4357 print ("URL: %s" % url )
4458 resource = urlparse (url )
4559 post_data = self .encode_authentication_data (extra_post_data )
@@ -51,8 +65,7 @@ def make_request(self, path, extra_post_data=None):
5165 connection = connector (resource .hostname , resource .port )
5266 connection .request ("POST" , resource .path , post_data , headers )
5367 response = connection .getresponse ()
54- response_text = response .read ()
55- print (response_text )
68+ response_text = response .read ().encode ("utf-8" )
5669 json = simplejson .loads (response_text )
5770 if json .get ("error" ):
5871 raise self .GithubError (json ["error" ][0 ]["error" ])
0 commit comments