diff --git a/github2/client.py b/github2/client.py index a26210d..f01f937 100644 --- a/github2/client.py +++ b/github2/client.py @@ -118,3 +118,4 @@ def get_network_data(self, project, nethash, start=None, end=None): project, "network_data_chunk"]), data) + diff --git a/github2/core.py b/github2/core.py index 4a1b619..2272889 100644 --- a/github2/core.py +++ b/github2/core.py @@ -172,6 +172,8 @@ def get_values(self, *args, **kwargs): else: return values + def raw_non_json_request(self, url): + return self.request.raw_non_json_request(url, {}) def doc_generator(docstring, attributes): """Utility function to augment BaseDataType docstring diff --git a/github2/pull_requests.py b/github2/pull_requests.py index c90872e..1f68805 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -92,3 +92,12 @@ def list(self, project, state="open"): """ return self.get_values(project, state, filter="pulls", datatype=PullRequest) + + def diff(self, *params): + if type(params[0]) is PullRequest: + pull_request = params[0] + return self.raw_non_json_request(pull_request.diff_url) + else: + [project, number] = params + return self.raw_non_json_request("/".join(["https://github.com", project, "pull", str(number) + ".diff"])) + diff --git a/github2/request.py b/github2/request.py index d350d55..cb44541 100644 --- a/github2/request.py +++ b/github2/request.py @@ -148,6 +148,21 @@ def make_request(self, path, extra_post_data=None, method="GET"): return result def raw_request(self, url, extra_post_data, method="GET"): + response, content = self.base_request(url, extra_post_data, method) + json = simplejson.loads(content.decode(charset_from_headers(response))) + if json.get("error"): + raise self.GithubError(json["error"][0]["error"]) + + return json + + + def raw_non_json_request(self, url, extra_post_data, method="GET"): + response, content = self.base_request(url, extra_post_data, method) + result = content.decode(charset_from_headers(response)) + + return result + + def base_request(self, url, extra_post_data, method="GET"): scheme, netloc, path, query, fragment = urlsplit(url) post_data = None headers = self.http_headers @@ -166,11 +181,8 @@ def raw_request(self, url, extra_post_data, method="GET"): raise HttpError("Unexpected response from github.com %d: %r" % (response.status, content), content, response.status) - json = simplejson.loads(content.decode(charset_from_headers(response))) - if json.get("error"): - raise self.GithubError(json["error"][0]["error"]) - return json + return response, content @property def http_headers(self): @@ -178,3 +190,4 @@ def http_headers(self): "User-Agent": "pygithub2 v1", "Accept": "application/json", } +