From 9b828fbdc4818ceed6e6ef56758875755afd111c Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 1 Oct 2011 10:36:27 -0500 Subject: [PATCH 1/2] added method to pull requests to return the diff --- github2/client.py | 1 + github2/core.py | 2 ++ github2/pull_requests.py | 9 +++++++++ github2/request.py | 25 +++++++++++++++++++++++++ 4 files changed, 37 insertions(+) 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..93942dd 100644 --- a/github2/request.py +++ b/github2/request.py @@ -172,6 +172,31 @@ def raw_request(self, url, extra_post_data, method="GET"): return json + + def raw_non_json_request(self, url, extra_post_data, method="GET"): + scheme, netloc, path, query, fragment = urlsplit(url) + post_data = None + headers = self.http_headers + method = method.upper() + if extra_post_data or method == "POST": + post_data = self.encode_authentication_data(extra_post_data) + headers["Content-Length"] = str(len(post_data)) + else: + query = self.encode_authentication_data(parse_qs(query)) + url = urlunsplit((scheme, netloc, path, query, fragment)) + + response, content = self._http.request(url, method, post_data, headers) + if LOGGER.isEnabledFor(logging.DEBUG): + logging.debug("URL: %r POST_DATA: %r RESPONSE_TEXT: %r", url, + post_data, content) + if response.status >= 400: + raise HttpError("Unexpected response from github.com %d: %r" + % (response.status, content), content, + response.status) + result = content.decode(charset_from_headers(response)) + + return result + @property def http_headers(self): return { From a55fa1ad77b532bbd642d05adc742efacec014fe Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 1 Oct 2011 11:07:15 -0500 Subject: [PATCH 2/2] added method to pull requests to return the diff --- github2/request.py | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/github2/request.py b/github2/request.py index 93942dd..cb44541 100644 --- a/github2/request.py +++ b/github2/request.py @@ -148,24 +148,7 @@ def make_request(self, path, extra_post_data=None, method="GET"): return result def raw_request(self, url, extra_post_data, method="GET"): - scheme, netloc, path, query, fragment = urlsplit(url) - post_data = None - headers = self.http_headers - method = method.upper() - if extra_post_data or method == "POST": - post_data = self.encode_authentication_data(extra_post_data) - headers["Content-Length"] = str(len(post_data)) - else: - query = self.encode_authentication_data(parse_qs(query)) - url = urlunsplit((scheme, netloc, path, query, fragment)) - response, content = self._http.request(url, method, post_data, headers) - if LOGGER.isEnabledFor(logging.DEBUG): - logging.debug("URL: %r POST_DATA: %r RESPONSE_TEXT: %r", url, - post_data, content) - if response.status >= 400: - raise HttpError("Unexpected response from github.com %d: %r" - % (response.status, content), content, - response.status) + 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"]) @@ -174,6 +157,12 @@ def raw_request(self, url, extra_post_data, method="GET"): 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 @@ -184,7 +173,6 @@ def raw_non_json_request(self, url, extra_post_data, method="GET"): else: query = self.encode_authentication_data(parse_qs(query)) url = urlunsplit((scheme, netloc, path, query, fragment)) - response, content = self._http.request(url, method, post_data, headers) if LOGGER.isEnabledFor(logging.DEBUG): logging.debug("URL: %r POST_DATA: %r RESPONSE_TEXT: %r", url, @@ -193,9 +181,8 @@ def raw_non_json_request(self, url, extra_post_data, method="GET"): raise HttpError("Unexpected response from github.com %d: %r" % (response.status, content), content, response.status) - result = content.decode(charset_from_headers(response)) - return result + return response, content @property def http_headers(self): @@ -203,3 +190,4 @@ def http_headers(self): "User-Agent": "pygithub2 v1", "Accept": "application/json", } +