)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfadde9d149e4f70b3560e5dc5a04f23bce56c52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"960a489c_3157d5c2","updated":"2023-04-03 18:46:07.000000000","message":"I\u0027m guessing the plan is to squash this into the parent, yeah?","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"cbfdf1ef181aa11506e5fc74d08072df595655ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fe76a3fa_cde47319","updated":"2023-04-03 06:28:32.000000000","message":"Nice, thanks Al, yeah I did kinda cringe when I hasattr(\u0027app\u0027.. This is nicer.\n\nAs for the failed tests, I bet this is where you find all the places we use test \"middlewares\" in testing because they wont have the new attribute.","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4dbc9c0184edccfb3dd090f6b839a54e6dd15bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ea78c8d8_5ae8de16","updated":"2023-04-14 06:08:47.000000000","message":"Squashed this into the parent branch, thanks Al!","commit_id":"5b99341091ce246c31150249e6ea53e7f2981c53"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a88fa42fed873a5d58846e8c4cc2d8eae1ef23f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"348936af_3eb7b635","updated":"2023-04-04 14:30:00.000000000","message":"this is intended to be squashed into the parent","commit_id":"5b99341091ce246c31150249e6ea53e7f2981c53"}],"swift/common/internal_client.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfadde9d149e4f70b3560e5dc5a04f23bce56c52","unresolved":true,"context_lines":[{"line_number":179,"context_line":"    def is_gatekeeper_loaded(app):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            for app in app._pipeline:"},{"line_number":182,"context_line":"                if isinstance(app, GatekeeperMiddleware):"},{"line_number":183,"context_line":"                    raise ValueError("},{"line_number":184,"context_line":"                        \"Gatekeeper middleware is not allowed in the \""},{"line_number":185,"context_line":"                        \"InternalClient proxy pipeline\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"430f407d_a01254cc","line":182,"updated":"2023-04-03 18:46:07.000000000","message":"Do we need the instantiated apps in the pipeline? Would it be enough to use `issubclass()` with the `filters` list?\n\nDo we envision it being useful for, say, a middleware to send a subrequest starting at some arbitrary point in the middle of the pipeline?","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a88fa42fed873a5d58846e8c4cc2d8eae1ef23f3","unresolved":true,"context_lines":[{"line_number":179,"context_line":"    def is_gatekeeper_loaded(app):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            for app in app._pipeline:"},{"line_number":182,"context_line":"                if isinstance(app, GatekeeperMiddleware):"},{"line_number":183,"context_line":"                    raise ValueError("},{"line_number":184,"context_line":"                        \"Gatekeeper middleware is not allowed in the \""},{"line_number":185,"context_line":"                        \"InternalClient proxy pipeline\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"feb4323a_43185582","line":182,"in_reply_to":"430f407d_a01254cc","updated":"2023-04-04 14:30:00.000000000","message":"we don\u0027t *need* them, but why not? I could see _final_pipeline_app being retired in favour of pipeline[-1]. I could also imagine it being handy to be able to inspect the config of another middleware.","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfadde9d149e4f70b3560e5dc5a04f23bce56c52","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                        \"Gatekeeper middleware is not allowed in the \""},{"line_number":185,"context_line":"                        \"InternalClient proxy pipeline\")"},{"line_number":186,"context_line":"        except AttributeError:"},{"line_number":187,"context_line":"            pass"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def make_request("},{"line_number":190,"context_line":"            self, method, path, headers, acceptable_statuses, body_file\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"424de6a6_59f9d45a","line":187,"updated":"2023-04-03 18:46:07.000000000","message":"I expected a trivial `return False` at the end there...","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a88fa42fed873a5d58846e8c4cc2d8eae1ef23f3","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                        \"Gatekeeper middleware is not allowed in the \""},{"line_number":185,"context_line":"                        \"InternalClient proxy pipeline\")"},{"line_number":186,"context_line":"        except AttributeError:"},{"line_number":187,"context_line":"            pass"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def make_request("},{"line_number":190,"context_line":"            self, method, path, headers, acceptable_statuses, body_file\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3de61024_419d9074","line":187,"in_reply_to":"424de6a6_59f9d45a","updated":"2023-04-04 14:30:00.000000000","message":"the method could do with renaming - it doesn\u0027t return a boolean","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"}],"swift/common/wsgi.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"cbfdf1ef181aa11506e5fc74d08072df595655ad","unresolved":true,"context_lines":[{"line_number":363,"context_line":"        filters \u003d [c.create() for c in reversed(ctx.filter_contexts)]"},{"line_number":364,"context_line":"        pipeline \u003d [ultimate_app]"},{"line_number":365,"context_line":"        ultimate_app._pipeline \u003d pipeline"},{"line_number":366,"context_line":"        ultimate_app._pipeline_final_app \u003d ultimate_app"},{"line_number":367,"context_line":"        for filter_app in filters:"},{"line_number":368,"context_line":"            app \u003d filter_app(pipeline[0])"},{"line_number":369,"context_line":"            pipeline.insert(0, app)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e2c631d_b75adcd0","line":366,"range":{"start_line":366,"start_character":21,"end_line":366,"end_character":40},"updated":"2023-04-03 06:28:32.000000000","message":"I wonder if this is required anymore because now we can just use _pipeline[-1]. But I guess for historic and backwards compat. So doesn\u0027t hurt.","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a88fa42fed873a5d58846e8c4cc2d8eae1ef23f3","unresolved":true,"context_lines":[{"line_number":363,"context_line":"        filters \u003d [c.create() for c in reversed(ctx.filter_contexts)]"},{"line_number":364,"context_line":"        pipeline \u003d [ultimate_app]"},{"line_number":365,"context_line":"        ultimate_app._pipeline \u003d pipeline"},{"line_number":366,"context_line":"        ultimate_app._pipeline_final_app \u003d ultimate_app"},{"line_number":367,"context_line":"        for filter_app in filters:"},{"line_number":368,"context_line":"            app \u003d filter_app(pipeline[0])"},{"line_number":369,"context_line":"            pipeline.insert(0, app)"}],"source_content_type":"text/x-python","patch_set":1,"id":"de1997a9_0a86faac","line":366,"range":{"start_line":366,"start_character":21,"end_line":366,"end_character":40},"in_reply_to":"0e2c631d_b75adcd0","updated":"2023-04-04 14:30:00.000000000","message":"It would be a nice cleanup","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfadde9d149e4f70b3560e5dc5a04f23bce56c52","unresolved":true,"context_lines":[{"line_number":366,"context_line":"        ultimate_app._pipeline_final_app \u003d ultimate_app"},{"line_number":367,"context_line":"        for filter_app in filters:"},{"line_number":368,"context_line":"            app \u003d filter_app(pipeline[0])"},{"line_number":369,"context_line":"            pipeline.insert(0, app)"},{"line_number":370,"context_line":"            app._pipeline \u003d pipeline"},{"line_number":371,"context_line":"            app._pipeline_final_app \u003d ultimate_app"},{"line_number":372,"context_line":"        return app"}],"source_content_type":"text/x-python","patch_set":1,"id":"bdedf6d4_c37fbd01","line":369,"updated":"2023-04-03 18:46:07.000000000","message":"I suppose pipelines ought to be short enough that it won\u0027t really matter, but it might be better to do a bunch of `.append()`s, then a `pipeline.reverse()` at the end.","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a88fa42fed873a5d58846e8c4cc2d8eae1ef23f3","unresolved":true,"context_lines":[{"line_number":366,"context_line":"        ultimate_app._pipeline_final_app \u003d ultimate_app"},{"line_number":367,"context_line":"        for filter_app in filters:"},{"line_number":368,"context_line":"            app \u003d filter_app(pipeline[0])"},{"line_number":369,"context_line":"            pipeline.insert(0, app)"},{"line_number":370,"context_line":"            app._pipeline \u003d pipeline"},{"line_number":371,"context_line":"            app._pipeline_final_app \u003d ultimate_app"},{"line_number":372,"context_line":"        return app"}],"source_content_type":"text/x-python","patch_set":1,"id":"d279d747_bd284e3d","line":369,"in_reply_to":"bdedf6d4_c37fbd01","updated":"2023-04-04 14:30:00.000000000","message":"I prefer it this way - for me it\u0027s intuitive that the list is populated from right to left the same way the pipeline is built, and it makes sense that ultimate_app remains the ultimate app in the list as it is built.","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"}],"test/unit/common/test_wsgi.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfadde9d149e4f70b3560e5dc5a04f23bce56c52","unresolved":true,"context_lines":[{"line_number":1645,"context_line":"            exp_pipeline \u003d [app, app.app, app.app.app]"},{"line_number":1646,"context_line":"            self.assertEqual(exp_pipeline, app._pipeline)"},{"line_number":1647,"context_line":"            self.assertEqual(exp_pipeline, app.app._pipeline)"},{"line_number":1648,"context_line":"            self.assertEqual(exp_pipeline, app.app.app._pipeline)"},{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"            # make sure you can turn off the pipeline modification if you want"},{"line_number":1651,"context_line":"            def blow_up(*_, **__):"}],"source_content_type":"text/x-python","patch_set":1,"id":"436a5e43_d9bfcb50","line":1648,"updated":"2023-04-03 18:46:07.000000000","message":"Could even do some checks like\n\n self.assertIs(app._pipeline, app.app.app._pipeline)","commit_id":"fa8f8b713b20ef0bd3e9e0cc3d5c102430ab869c"}]}
