Ejemplo n.º 1
0
    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,
        )
Ejemplo n.º 2
0
    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,
        )
Ejemplo n.º 3
0
    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,
        )
Ejemplo n.º 4
0
    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, )
Ejemplo n.º 5
0
    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,
        )