)]}'
{"swift/common/swob.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"30783254d32ca753d6e1aa8aaf3429f730998abc","unresolved":true,"context_lines":[{"line_number":1401,"context_line":"        if self.request and self.request.method \u003d\u003d \u0027HEAD\u0027:"},{"line_number":1402,"context_line":"            # We explicitly do NOT want to set self.content_length to 0 here."},{"line_number":1403,"context_line":"            # Be friendly to our app_iter..."},{"line_number":1404,"context_line":"            drain_and_close(app_iter, min_bytes\u003d2000)"},{"line_number":1405,"context_line":"            return [b\u0027\u0027]"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"        if self.conditional_response and self.request and \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f998e60_178433a5","line":1404,"range":{"start_line":1404,"start_character":48,"end_line":1404,"end_character":52},"updated":"2023-08-17 17:58:16.000000000","message":"arbitrary choice","commit_id":"30764add008d96b61844699da5773182affa13e3"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"30783254d32ca753d6e1aa8aaf3429f730998abc","unresolved":true,"context_lines":[{"line_number":3902,"context_line":""},{"line_number":3903,"context_line":"    :param response_or_app_iter: An iterator or an object that has an"},{"line_number":3904,"context_line":"        ``app_iter`` attribute that is an iterator."},{"line_number":3905,"context_line":"    :param min_bytes: Drain until at least this number of bytes has been read"},{"line_number":3906,"context_line":"        from the iterator, or the iterator exits. A value of zero (the default)"},{"line_number":3907,"context_line":"        will cause the iterator to be read until it exits. Note: in practice,"},{"line_number":3908,"context_line":"        more than ``min_bytes_to_drain`` bytes may actually be read from the"}],"source_content_type":"text/x-python","patch_set":1,"id":"3921331e_713a20a5","line":3905,"range":{"start_line":3905,"start_character":11,"end_line":3905,"end_character":20},"updated":"2023-08-17 17:58:16.000000000","message":"I\u0027m not sure if this is best called min_bytes or max_bytes ? I went for min because we may in fact read more than min_bytes.","commit_id":"30764add008d96b61844699da5773182affa13e3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"30783254d32ca753d6e1aa8aaf3429f730998abc","unresolved":true,"context_lines":[{"line_number":3915,"context_line":"    for _chunk in app_iter:"},{"line_number":3916,"context_line":"        bytes_read +\u003d len(_chunk)"},{"line_number":3917,"context_line":"        if min_bytes and bytes_read \u003e\u003d min_bytes:"},{"line_number":3918,"context_line":"            break"},{"line_number":3919,"context_line":"    close_if_possible(app_iter)"},{"line_number":3920,"context_line":""},{"line_number":3921,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d560e3b7_51fbb6f9","line":3918,"updated":"2023-08-17 17:58:16.000000000","message":"testing min_bytes *after* it is incremented means we may break after reading the very last byte of the iter.\n\nAlternatively, moving the \u0027if...break\u0027 ahead of the increment means StopIteration would happen and LeakTrackingIter would catch that, if the iter had in fact been emptied. But, otherwise, we\u0027d read an extra chunk before reaching the break.","commit_id":"30764add008d96b61844699da5773182affa13e3"}],"test/unit/common/middleware/helpers.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"30783254d32ca753d6e1aa8aaf3429f730998abc","unresolved":true,"context_lines":[{"line_number":36,"context_line":"        self.mark_closed \u003d mark_closed"},{"line_number":37,"context_line":"        self.mark_read \u003d mark_read"},{"line_number":38,"context_line":"        self.key \u003d key"},{"line_number":39,"context_line":"        self.bytes_read \u003d 0"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __iter__(self):"},{"line_number":42,"context_line":"        return self"}],"source_content_type":"text/x-python","patch_set":1,"id":"79279865_eceffcc7","line":39,"updated":"2023-08-17 17:58:16.000000000","message":"maybe wants a callback?","commit_id":"30764add008d96b61844699da5773182affa13e3"}],"test/unit/common/test_swob.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"30783254d32ca753d6e1aa8aaf3429f730998abc","unresolved":true,"context_lines":[{"line_number":1279,"context_line":"        self.assertEqual(tracking, {"},{"line_number":1280,"context_line":"            \u0027closed\u0027: 2,"},{"line_number":1281,"context_line":"            \u0027read\u0027: 1,  # the app_iter was not completely read"},{"line_number":1282,"context_line":"        })"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def test_call_preserves_closeability(self):"},{"line_number":1285,"context_line":"        def test_app(environ, start_response):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0048a81_624f5881","line":1282,"updated":"2023-08-17 17:58:16.000000000","message":"illustrates than when the body had been exactly consumed, StopIteration was not fired and LeakTrackingIter does not report the iter as \u0027read\u0027","commit_id":"30764add008d96b61844699da5773182affa13e3"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7e3aac4b51ac5c6d98f1a83f943bfcce0103d841","unresolved":true,"context_lines":[{"line_number":81,"context_line":"from swift.common.swob import Request, Response"},{"line_number":82,"context_line":"from test.unit import requires_o_tmpfile_support_in_tmp, \\"},{"line_number":83,"context_line":"    quiet_eventlet_exceptions"},{"line_number":84,"context_line":"from test.unit.common.middleware.helpers import LeakTrackingIter"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"if six.PY2:"},{"line_number":87,"context_line":"    import eventlet.green.httplib as green_http_client"}],"source_content_type":"text/x-python","patch_set":1,"id":"07b7fcd4_d6733398","line":84,"updated":"2023-08-17 17:59:56.000000000","message":"not great importing from test.unit.common.middleware.helpers","commit_id":"30764add008d96b61844699da5773182affa13e3"}]}
