)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"9b2562b479ccdb658b838b97335b35357daac02d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a392e4e9_1ad065e6","updated":"2024-01-25 20:57:12.000000000","message":"Fascinating to think what prompted this.","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b55c9271e8d571f59548c05907f240613e288286","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"eff093c9_ea53cd4f","updated":"2024-01-25 21:14:22.000000000","message":"ok, so we leave the important parent change w/o review for a month - but I spin up a stupid test-only follow up left over from hacking on it while reviewing and suddenly everyone has time to help out!","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0e71240209acae856c5982fa7e69bc31ac42dd00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"653be780_4273929c","in_reply_to":"eff093c9_ea53cd4f","updated":"2024-01-25 21:36:56.000000000","message":"Ain\u0027t it just the way...","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d563f255a10236e69aa4fb89bbf9788e4c9a244c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"280227bb_5a3eb8ac","updated":"2024-01-26 10:22:24.000000000","message":"I just didn\u0027t want to miss out on the +2-fest 😊","commit_id":"0a6daa1ad50b245ced9d98c5b1eceb76587d74ad"}],"test/unit/common/middleware/test_proxy_logging.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4a417bc15c0a3df1fe5793c0e7a68e8adaad033f","unresolved":true,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __call__(self, env, start_response):"},{"line_number":52,"context_line":"        if callable(self.body):"},{"line_number":53,"context_line":"            self.body \u003d self.body(env)"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            # /v1/a/c or /v1/a/c/o"},{"line_number":56,"context_line":"            split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e5a9b18_4d02e362","line":53,"updated":"2024-01-25 21:01:03.000000000","message":"Feels *really* close to the WSGI application API for something that isn\u0027t...","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b55c9271e8d571f59548c05907f240613e288286","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __call__(self, env, start_response):"},{"line_number":52,"context_line":"        if callable(self.body):"},{"line_number":53,"context_line":"            self.body \u003d self.body(env)"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            # /v1/a/c or /v1/a/c/o"},{"line_number":56,"context_line":"            split_path(env[\u0027PATH_INFO\u0027], 3, 4, True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"29d5a601_284cb1be","line":53,"in_reply_to":"4e5a9b18_4d02e362","updated":"2024-01-25 21:14:22.000000000","message":"yeah i mean it\u0027s just a fake; i figure make it do what we want","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4a417bc15c0a3df1fe5793c0e7a68e8adaad033f","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        start_response(self.response_str, headers)"},{"line_number":72,"context_line":"        while env[\u0027wsgi.input\u0027].read(5):"},{"line_number":73,"context_line":"            pass"},{"line_number":74,"context_line":"        # N.B. mw can set this anytime before the resp is finished"},{"line_number":75,"context_line":"        env.update(self.environ_updates)"},{"line_number":76,"context_line":"        return self.body"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bda83e8d_d6e360ec","line":74,"updated":"2024-01-25 21:01:03.000000000","message":"So would it be better to do something like\n```\ntry:\n    for chunk in self.body:\n        yield chunk\nfinally:\n    env.update(self.environ_updates)\n```\n? Or am I misreading the comment?","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b55c9271e8d571f59548c05907f240613e288286","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        start_response(self.response_str, headers)"},{"line_number":72,"context_line":"        while env[\u0027wsgi.input\u0027].read(5):"},{"line_number":73,"context_line":"            pass"},{"line_number":74,"context_line":"        # N.B. mw can set this anytime before the resp is finished"},{"line_number":75,"context_line":"        env.update(self.environ_updates)"},{"line_number":76,"context_line":"        return self.body"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a49eb464_94c248f6","line":74,"in_reply_to":"bda83e8d_d6e360ec","updated":"2024-01-25 21:14:22.000000000","message":"i mean; i was just trying to verify we can update it anytime; i thought *while* streaming the body was the most obtuse - but an explicit test for a finally block would be great too!","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4a417bc15c0a3df1fe5793c0e7a68e8adaad033f","unresolved":true,"context_lines":[{"line_number":863,"context_line":"            env[\u0027swift.proxy_logging_status\u0027] \u003d \u0027209\u0027"},{"line_number":864,"context_line":"            yield b\u0027baz\u0027"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"        fake_app \u003d FakeApp(body\u003dchunk_gen,"},{"line_number":867,"context_line":"                           response_str\u003d\u0027205 Weird\u0027)"},{"line_number":868,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware(fake_app, conf)"},{"line_number":869,"context_line":"        app.access_logger \u003d debug_logger()"}],"source_content_type":"text/x-python","patch_set":1,"id":"50d04b2f_a4badef9","line":866,"range":{"start_line":866,"start_character":32,"end_line":866,"end_character":41},"updated":"2024-01-25 21:01:03.000000000","message":"What if we just call `chunk_gen()` when we make the app? Are we calling `fake_app` more than once? Something like https://paste.opendev.org/show/b0NM2un0DxQ2UgKlm5iS/","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b55c9271e8d571f59548c05907f240613e288286","unresolved":false,"context_lines":[{"line_number":863,"context_line":"            env[\u0027swift.proxy_logging_status\u0027] \u003d \u0027209\u0027"},{"line_number":864,"context_line":"            yield b\u0027baz\u0027"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"        fake_app \u003d FakeApp(body\u003dchunk_gen,"},{"line_number":867,"context_line":"                           response_str\u003d\u0027205 Weird\u0027)"},{"line_number":868,"context_line":"        app \u003d proxy_logging.ProxyLoggingMiddleware(fake_app, conf)"},{"line_number":869,"context_line":"        app.access_logger \u003d debug_logger()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ddc0801_378d1264","line":866,"range":{"start_line":866,"start_character":32,"end_line":866,"end_character":41},"in_reply_to":"50d04b2f_a4badef9","updated":"2024-01-25 21:14:22.000000000","message":"yeah I like that better; I\u0027d forgoten I had a reference to the environ from the request object in the test I\u0027m passing in to the app 😊","commit_id":"98b401b534cf7e1cf9b9cbc6294b606ab14a9b24"}]}
