def _read_pr_commits(self, r, number): pr = self.issues.get(int(number)) if not isinstance(pr, PR): return (404, None) url = url_parse(r.url) qs = url.decode_query() # github pages are 1-indexeds page = int(qs.get('page') or 1) - 1 per_page = int(qs.get('per_page') or 100) offset = page * per_page limit = page + 1 * per_page headers = {'Content-Type': 'application/json'} if len(pr.commits) > limit: nextlink = url.replace(query=url_encode(dict(qs, page=page + 1))) headers['Link'] = '<%s>; rel="next"' % str(nextlink) commits = [ c.to_json() for c in sorted(pr.commits, key=lambda c: (c.author.date, c.committer.date)) [offset:limit] ] body = io.BytesIO(json.dumps(commits).encode('utf-8')) return responses.HTTPResponse( status=200, reason="OK", headers=headers, body=body, preload_content=False, )
def get_response(self, request): """ Need to override this so we can pass decode_content=False """ if not isinstance(request, Request): url = urlparse(request.url) if request.body is None: body = None elif isinstance(request.body, six.text_type): body = six.BytesIO(six.b(request.body)) elif hasattr(request.body, "read"): body = six.BytesIO(request.body.read()) else: body = six.BytesIO(request.body) req = Request.from_values( path="?".join([url.path, url.query]), input_stream=body, content_length=request.headers.get("Content-Length"), content_type=request.headers.get("Content-Type"), method=request.method, base_url="{scheme}://{netloc}".format( scheme=url.scheme, netloc=url.netloc ), headers=[(k, v) for k, v in six.iteritems(request.headers)], ) request = req headers = self.get_headers() result = self.callback(request) if isinstance(result, Exception): raise result status, r_headers, body = result body = responses._handle_body(body) headers.update(r_headers) return responses.HTTPResponse( status=status, reason=six.moves.http_client.responses.get(status), body=body, headers=headers, preload_content=False, # Need to not decode_content to mimic requests decode_content=False, )
def get_response(self, request): m = self.url.match(request.url) r = self.sim.repos[m.group('repo')].api(m.group('path'), request) if isinstance(r, responses.HTTPResponse): return r (status, r) = r headers = self.get_headers() body = io.BytesIO(b'') if r is not None: body = io.BytesIO(json.dumps(r).encode('utf-8')) return responses.HTTPResponse( status=status, reason=r.get('message') if isinstance(r, dict) else "bollocks", body=body, headers=headers, preload_content=False, )
def get_response(self, request): m = self.url.match(request.url) r = self.dispatch(request, m) if isinstance(r, responses.HTTPResponse): return r (status, r) = r headers = self.get_headers() if r is None: body = io.BytesIO(b'') headers['Content-Type'] = 'text/plain' else: body = io.BytesIO(json.dumps(r).encode('utf-8')) return responses.HTTPResponse( status=status, reason=r.get('message') if isinstance(r, dict) else "bollocks", body=body, headers=headers, preload_content=False, )
def get_response(self, request): ''' Need to override this so we can pass decode_content=False ''' headers = self.get_headers() result = self.callback(request) if isinstance(result, Exception): raise result status, r_headers, body = result body = responses._handle_body(body) headers.update(r_headers) return responses.HTTPResponse( status=status, reason=six.moves.http_client.responses.get(status), body=body, headers=headers, preload_content=False, # Need to not decode_content to mimic requests decode_content=False, )