Skip to content

Commit 1dfa90c

Browse files
Ask SolemAsk Solem
authored andcommitted
Added support for network data (http://develop.github.com/p/network.html)
1 parent fbc49f1 commit 1dfa90c

2 files changed

Lines changed: 28 additions & 4 deletions

File tree

github2/client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,15 @@ def get_tree(self, project, tree_sha):
2424
tree = self.request.get("tree/show", project, tree_sha)
2525
return tree.get("tree", [])
2626

27+
def get_network_meta(self, project):
28+
return self.request.raw_request("/".join([self.request.github_url,
29+
project,
30+
"network_meta"] ), {})
2731

32+
def get_network_data(self, project, nethash, start=None, end=None):
33+
return self.request.raw_request("/".join([self.request.github_url,
34+
project,
35+
"network_data_chunk"]),
36+
{"nethash": nethash,
37+
"start": start,
38+
"end": end})

github2/request.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@
44
from urlparse import urlparse
55
from urllib import urlencode
66

7+
GITHUB_URL = "http://github.com"
8+
79
URL_PREFIX = "http://github.com/api/v2/json"
810

911
class GithubError(Exception):
1012
"""An error occured when making a request to the Github API."""
1113

1214
class 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

Comments
 (0)