)]}'
{"keystone/common/utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f76f270091a4ebdb64542c5b4d818c30fee6416c","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            else:"},{"line_number":333,"context_line":"                yield chunk"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def read(self, i):"},{"line_number":336,"context_line":"        result \u003d self.data.read(i)"},{"line_number":337,"context_line":"        self.bytes_read +\u003d len(result)"},{"line_number":338,"context_line":"        if self.bytes_read \u003e self.limit:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc7U%3D","line":335,"updated":"2013-01-21 23:54:36.000000000","message":"This function could check self.bytes_read +\u003d i before reading to prevent allocating the buffer.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"113520a210148d17dba4b84d61074e36d7942f21","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            else:"},{"line_number":333,"context_line":"                yield chunk"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def read(self, i):"},{"line_number":336,"context_line":"        result \u003d self.data.read(i)"},{"line_number":337,"context_line":"        self.bytes_read +\u003d len(result)"},{"line_number":338,"context_line":"        if self.bytes_read \u003e self.limit:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc2g%3D","line":335,"in_reply_to":"AAAAM3%2F%2Fc7U%3D","updated":"2013-01-22 00:54:20.000000000","message":"Well... it could but just because you ask to read X number of bytes doesn\u0027t mean you\u0027ll actually get them right? I suppose I\u0027d rather bytes_read always be correct in this regard.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0f1886b9a7bbd98620df615fabb5b6d14faba156","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            else:"},{"line_number":333,"context_line":"                yield chunk"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def read(self, i):"},{"line_number":336,"context_line":"        result \u003d self.data.read(i)"},{"line_number":337,"context_line":"        self.bytes_read +\u003d len(result)"},{"line_number":338,"context_line":"        if self.bytes_read \u003e self.limit:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc2U%3D","line":335,"in_reply_to":"AAAAM3%2F%2Fc7U%3D","updated":"2013-01-22 00:44:05.000000000","message":"nice catch","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"}],"keystone/exception.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6aa099fb4ab8f451664f23c483fbb7f88343af6e","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class RequestTooLarge(Error):"},{"line_number":197,"context_line":"    \"\"\"Request is too large.\"\"\""},{"line_number":198,"context_line":"    code \u003d 413"},{"line_number":199,"context_line":"    title \u003d \u0027Request is too large.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FdBY%3D","line":198,"updated":"2013-01-21 22:56:34.000000000","message":"(nit) the rest of this file is in order by status code, so this should come directly after Conflict","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"113520a210148d17dba4b84d61074e36d7942f21","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class RequestTooLarge(Error):"},{"line_number":197,"context_line":"    \"\"\"Request is too large.\"\"\""},{"line_number":198,"context_line":"    code \u003d 413"},{"line_number":199,"context_line":"    title \u003d \u0027Request is too large.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc2Q%3D","line":198,"in_reply_to":"AAAAM3%2F%2FdBY%3D","updated":"2013-01-22 00:54:20.000000000","message":"I\u0027ll fix this in the next patchset.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"}],"keystone/middleware/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"43175c957436879a3ad03ee9875cc1971d4c97ba","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        if (req.content_length \u003e CONF.max_request_body_size or"},{"line_number":181,"context_line":"                len(req.body) \u003e CONF.max_request_body_size):"},{"line_number":182,"context_line":"            msg \u003d _(\"Request is too large.\")"},{"line_number":183,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":184,"context_line":"        else:"},{"line_number":185,"context_line":"            return self.application"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmdA%3D","line":183,"updated":"2013-01-14 15:50:41.000000000","message":"instead of raising a webob exception rendered as HTML:\n\n  e \u003d exception.ValidationError(_(\"Request is too large.\"))\n  return wsgi.render_exception(e)","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f76f270091a4ebdb64542c5b4d818c30fee6416c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        if req.content_length is None and req.is_body_readable:"},{"line_number":184,"context_line":"            limiter \u003d utils.LimitingReader(req.body_file,"},{"line_number":185,"context_line":"                                           CONF.max_request_body_size)"},{"line_number":186,"context_line":"            req.body_file \u003d limiter"},{"line_number":187,"context_line":"        return self.application"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc8Q%3D","line":186,"updated":"2013-01-21 23:54:36.000000000","message":"Is there a case missing here: if content_length is None and not req.is_body_readable . In this case the client closes the connection to indicate the end of the entity-body rather than sending the Content-Length header. http://tools.ietf.org/html/rfc2616#section-3.6 implies that this is possible.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"113520a210148d17dba4b84d61074e36d7942f21","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        if req.content_length is None and req.is_body_readable:"},{"line_number":184,"context_line":"            limiter \u003d utils.LimitingReader(req.body_file,"},{"line_number":185,"context_line":"                                           CONF.max_request_body_size)"},{"line_number":186,"context_line":"            req.body_file \u003d limiter"},{"line_number":187,"context_line":"        return self.application"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc1w%3D","line":186,"in_reply_to":"AAAAM3%2F%2Fc8Q%3D","updated":"2013-01-22 00:54:20.000000000","message":"I suppose I was relying on the webob pydoc here:\n\n    webob.is_body_readable is a flag that tells us\n    that we can read the input stream even though\n    CONTENT_LENGTH is missing.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"}],"tests/test_sizelimit.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c4b7c2a59f46dd5f98209f85b3d90ef0b12e6d01","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":41,"context_line":"        self.assertEqual(response.status_int, 200)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_content_length_to_large(self):"},{"line_number":44,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d MAX_REQUEST_BODY_SIZE + 1"},{"line_number":45,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":46,"context_line":"        self.assertEqual(response.status_int, 400)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fl98%3D","line":43,"updated":"2013-01-14 19:42:27.000000000","message":"spelling, to -\u003e too","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c4b7c2a59f46dd5f98209f85b3d90ef0b12e6d01","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(response.status_int, 200)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_content_length_to_large(self):"},{"line_number":44,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d MAX_REQUEST_BODY_SIZE + 1"},{"line_number":45,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":46,"context_line":"        self.assertEqual(response.status_int, 400)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fl9g%3D","line":44,"updated":"2013-01-14 19:42:27.000000000","message":"should you also set the request body? Otherwise it\u0027s not a valid request because the Content-Length is set but there\u0027s no content.","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"134b3cbe268a46bf8889effa65e95e0d5c904cbb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(response.status_int, 200)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_content_length_to_large(self):"},{"line_number":44,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d MAX_REQUEST_BODY_SIZE + 1"},{"line_number":45,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":46,"context_line":"        self.assertEqual(response.status_int, 400)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FdSU%3D","line":44,"in_reply_to":"AAAAM3%2F%2Fl9g%3D","updated":"2013-01-21 21:05:49.000000000","message":"Given this is a unit tests for middleware I think it is sufficient to only set the \u0027Content-Length\u0027 header since that is what we are testing. (in this test case.","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c4b7c2a59f46dd5f98209f85b3d90ef0b12e6d01","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_content_length_to_large(self):"},{"line_number":44,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d MAX_REQUEST_BODY_SIZE + 1"},{"line_number":45,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":46,"context_line":"        self.assertEqual(response.status_int, 400)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_request_to_large(self):"},{"line_number":49,"context_line":"        self.request.body \u003d \"0\" * (MAX_REQUEST_BODY_SIZE + 1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fl9Q%3D","line":46,"updated":"2013-01-14 19:42:27.000000000","message":"should the response be 413 Request Entity Too Large ?","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"696232b1e2a3e5ef9221c38e826879616bb4fe0f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_content_length_to_large(self):"},{"line_number":44,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d MAX_REQUEST_BODY_SIZE + 1"},{"line_number":45,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":46,"context_line":"        self.assertEqual(response.status_int, 400)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_request_to_large(self):"},{"line_number":49,"context_line":"        self.request.body \u003d \"0\" * (MAX_REQUEST_BODY_SIZE + 1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fl3k%3D","line":46,"in_reply_to":"AAAAM3%2F%2Fl9Q%3D","updated":"2013-01-14 20:22:16.000000000","message":"Nice catch, +1","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c4b7c2a59f46dd5f98209f85b3d90ef0b12e6d01","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":46,"context_line":"        self.assertEqual(response.status_int, 400)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_request_to_large(self):"},{"line_number":49,"context_line":"        self.request.body \u003d \"0\" * (MAX_REQUEST_BODY_SIZE + 1)"},{"line_number":50,"context_line":"        response \u003d self.request.get_response(self.middleware)"},{"line_number":51,"context_line":"        self.assertEqual(response.status_int, 400)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fl94%3D","line":48,"updated":"2013-01-14 19:42:27.000000000","message":"test_request_to_large -\u003e test_request_too_large","commit_id":"7dbceb554fde667f6815ab654599a0a91eed174f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f76f270091a4ebdb64542c5b4d818c30fee6416c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d None"},{"line_number":54,"context_line":"        self.assertRaises(exception.RequestTooLarge,"},{"line_number":55,"context_line":"                          self.request.get_response,"},{"line_number":56,"context_line":"                          self.middleware)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FdBA%3D","line":56,"updated":"2013-01-21 23:54:36.000000000","message":"We should have tests using \"chunked\" transfer coding, both valid and invalid cases.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"113520a210148d17dba4b84d61074e36d7942f21","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.request.headers[\u0027Content-Length\u0027] \u003d None"},{"line_number":54,"context_line":"        self.assertRaises(exception.RequestTooLarge,"},{"line_number":55,"context_line":"                          self.request.get_response,"},{"line_number":56,"context_line":"                          self.middleware)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fc1Y%3D","line":56,"in_reply_to":"AAAAM3%2F%2FdBA%3D","updated":"2013-01-22 00:54:20.000000000","message":"The code here just deals with limiting the request size... so chunking or not chunking is irrelevant right? All we care about is how big an incoming request is (in bytes) and whether or not there is a \u0027content-length\u0027 header.","commit_id":"4638b4652931e9927791440e21fae9be6f25a35d"}]}
