)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7079d1dc92648d2c46258654dcb7829b269c2374","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1bd28107_4d5b52bf","updated":"2021-12-18 05:43:27.000000000","message":"recheck","commit_id":"e3691b095171021ce031fcecdd1a42ca546b2f44"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"5dbdb8adc4ad8a59c960a32f133c7d0096a219ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f3e9e368_23ffbdb7","updated":"2021-12-20 21:22:03.000000000","message":"recheck\n\nprevious failures varied, ok to recheck","commit_id":"e3691b095171021ce031fcecdd1a42ca546b2f44"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0243a2db32973e5b288336c1491cc7d71403be0d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f4b6c757_92e8c398","updated":"2022-01-08 00:49:17.000000000","message":"recheck","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d20269ce_e39f0544","updated":"2022-01-12 17:35:07.000000000","message":"this is fine, but I think we could go further and be even happier\n\nhttps://review.opendev.org/c/openstack/swift/+/824471","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dba3421fc461d5bb93e246b1eb69a471ea1f5d78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"33b2e77a_bca365ee","updated":"2022-01-14 15:31:44.000000000","message":"this is pretty great, i can definately live with the getattr if that\u0027s the plan","commit_id":"ab8922ff88f1405984c247c3d84f4d3c353fe13a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e8455607d8d205e65bfa6889aa4149e1161c54df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"216cd57e_e990c912","updated":"2022-01-18 20:31:02.000000000","message":"I dig it!","commit_id":"1f212810fa307870d620c3e4241d258008021a8e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"189cebf3b34c24b86e350755e19662aefd73084d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"436bf28f_6dc0effb","updated":"2022-01-20 01:37:04.000000000","message":"Oh nice, much cleaner test cleanup then I had in the old follow up! Great work! Good riddence pipeline_property!","commit_id":"1f212810fa307870d620c3e4241d258008021a8e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d6e08e577c99ae096f6a7896c7a0478e9371f465","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"52e482f7_21a27852","updated":"2022-01-20 02:28:45.000000000","message":"opps, didn\u0027t mean for that to happen, not idea how I managed to do that with git review.. let me fix it.","commit_id":"55295005fd13a35cc78bba0adcfc85c4daf45d84"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"bd77dbc875fc538ba6a6901556b221ad5fbe8146","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c31c934f_4a2df08e","updated":"2022-01-20 02:39:17.000000000","message":"Sorry about that noise... turns out a -F in git review doesn\u0027t force a rebase, to current master (Like I thought it would do) it git pushes forcfully.\n\nSo sorry! This is back to the same as patchset 8 (just called 10).","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"146ef8631bb8439f12471cf68cd8115ce79e7400","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7deb7d84_f46ed322","updated":"2022-01-24 16:20:50.000000000","message":"this change is great!  I love _pipeline_final_app and hate pipeline property.\n\nI think it\u0027s mostly an accident that we also bundle in the app injection to InternalClient, which is another great cleanup!  The expirer tests I think had the hardest time with changes to loadapp, and I like how they look now.  I think if we want to fully embrace the app injection cleanup test_internal_client should drop loadapp mocking and InternalClient subclassing too.\n\n... but that\u0027s just tests; it\u0027s whatever - this is great.","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2d7c89c9cc830c43fd86fb25a981a1ff7e371dac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9cfc4bfd_23424c81","updated":"2022-01-25 17:17:03.000000000","message":"recheck","commit_id":"5f6a1dc1c02b130aab43c7fceb9bbf44ed9c28cc"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0637560e8b76c5a271b0f8f6320f2790e87fae6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"0fb4e079_427c5a48","updated":"2022-01-28 15:58:52.000000000","message":"love the negative line count ratio!  good riddence pipeline_property!","commit_id":"9bc1c008a56fbc4a69aafd3d3177d7be368b181d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"62da66728218c04c8496149d9b72db0470785af4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"0951ed0e_3fc23cdc","updated":"2022-02-03 04:48:53.000000000","message":"recheck","commit_id":"9bc1c008a56fbc4a69aafd3d3177d7be368b181d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"badea3c9c08d955b00d6e55f57b3771ddace91f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"48d49e9c_25dc2892","updated":"2022-02-03 21:27:35.000000000","message":"recheck","commit_id":"9bc1c008a56fbc4a69aafd3d3177d7be368b181d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"680a9feab8be12434a649c7765d75580b5685c06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5a65be32_5f499854","updated":"2022-02-03 23:21:23.000000000","message":"recheck","commit_id":"9bc1c008a56fbc4a69aafd3d3177d7be368b181d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a847e94743ef085e4933e576ba99017cd3f562f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5d4b14e6_7534700b","updated":"2022-02-02 20:30:54.000000000","message":"recheck","commit_id":"9bc1c008a56fbc4a69aafd3d3177d7be368b181d"}],"swift/common/internal_client.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":134,"context_line":"        self.set_initial_state()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def pipeline_property(name):"},{"line_number":138,"context_line":"    def getter(self):"},{"line_number":139,"context_line":"        return getattr(self.app._pipeline_final_app, name)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"8e93ca70_446bbd19","line":137,"updated":"2022-01-12 17:35:07.000000000","message":"i thought we were getting RID of pipeline_property!","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d21248c933ba02342024f3f0f6ba8d84ce935c1","unresolved":true,"context_lines":[{"line_number":134,"context_line":"        self.set_initial_state()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def pipeline_property(name):"},{"line_number":138,"context_line":"    def getter(self):"},{"line_number":139,"context_line":"        return getattr(self.app._pipeline_final_app, name)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"47175c37_a8f215fe","line":137,"in_reply_to":"8e93ca70_446bbd19","updated":"2022-01-14 01:11:00.000000000","message":"Fair enough -- for something claiming to get rid of pipeline_property, the post-patch grep isn\u0027t very satisfying. OTOH, the expirer test churn in https://review.opendev.org/c/openstack/swift/+/824497 really makes me appreciate the delayed-evaluation from the @properties ... what about implementing a __getattr__? Otherwise this\n\n 4 files changed, 24 insertions(+), 86 deletions(-)\n\n(so, net -62) change balloons to\n\n 7 files changed, 109 insertions(+), 152 deletions(-)\n\n(net -43) which doesn\u0027t seem as obvious of a win.","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":171,"context_line":"    container_ring \u003d pipeline_property(\u0027container_ring\u0027)"},{"line_number":172,"context_line":"    account_ring \u003d pipeline_property(\u0027account_ring\u0027)"},{"line_number":173,"context_line":"    auto_create_account_prefix \u003d pipeline_property("},{"line_number":174,"context_line":"        \u0027auto_create_account_prefix\u0027)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def make_request("},{"line_number":177,"context_line":"            self, method, path, headers, acceptable_statuses, body_file\u003dNone,"}],"source_content_type":"text/x-python","patch_set":6,"id":"8d1230b9_70561816","line":174,"updated":"2022-01-12 17:35:07.000000000","message":"let\u0027s just lift this into __init__","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dba3421fc461d5bb93e246b1eb69a471ea1f5d78","unresolved":true,"context_lines":[{"line_number":171,"context_line":"        ):"},{"line_number":172,"context_line":"            return getattr(self.app._pipeline_final_app, name)"},{"line_number":173,"context_line":"        # expect AttributeError"},{"line_number":174,"context_line":"        return super(InternalClient, self).__getattr__(name)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def make_request("},{"line_number":177,"context_line":"            self, method, path, headers, acceptable_statuses, body_file\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"e642379f_80523264","line":174,"updated":"2022-01-14 15:31:44.000000000","message":"and the reason we\u0027re not doing the obvoius thing in __init__ is \"just\" becaues some of our test Fake\u0027s don\u0027t have all the right attrbiutes?  I don\u0027t really *like* this, and artificially making code harder to maintain in an effort to minimzie test churn seems backwards.  Didn\u0027t we decide Matt already did all the fixing?","commit_id":"ab8922ff88f1405984c247c3d84f4d3c353fe13a"}],"swift/common/wsgi.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6677ccfcab0975a29196172915d732110b23233c","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        app._pipeline_final_app \u003d ultimate_app"},{"line_number":353,"context_line":"        for filter in filters:"},{"line_number":354,"context_line":"            app \u003d filter(app)"},{"line_number":355,"context_line":"            app._pipeline_final_app \u003d ultimate_app"},{"line_number":356,"context_line":"        return app"},{"line_number":357,"context_line":"    return ctx.create()"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba80536c_4121a2a7","line":355,"updated":"2021-12-16 05:47:50.000000000","message":"Strictly speaking there is only one app in the pipeline, the rest are middleware, so probably could just be `_pipeline_app` but final definitely get\u0027s rid of any ambiguity 😊","commit_id":"b11878b7393e09de81dd82dd1fd5b7eb0df4407e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4717db6843c319af636876b5c3f20a6f1eda7601","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        app._pipeline_final_app \u003d ultimate_app"},{"line_number":353,"context_line":"        for filter in filters:"},{"line_number":354,"context_line":"            app \u003d filter(app)"},{"line_number":355,"context_line":"            app._pipeline_final_app \u003d ultimate_app"},{"line_number":356,"context_line":"        return app"},{"line_number":357,"context_line":"    return ctx.create()"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f7b98fda_60bcaa31","line":355,"in_reply_to":"ba80536c_4121a2a7","updated":"2021-12-18 01:38:36.000000000","message":"Depends on how you look at it 😉\n\nMy (simplified) read on the PEP is that\n\n* an application is just a callable that takes an env and start_response function and returns some iterable of byte strings after calling start_response,\n* a server is something that invokes such an application, and\n* a middleware is an application on one side and a server on another\n\nso each middleware could fairly be called an application.","commit_id":"b11878b7393e09de81dd82dd1fd5b7eb0df4407e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":350,"context_line":"        filters \u003d [c.create() for c in reversed(ctx.filter_contexts)]"},{"line_number":351,"context_line":"        app \u003d ultimate_app"},{"line_number":352,"context_line":"        app._pipeline_final_app \u003d ultimate_app"},{"line_number":353,"context_line":"        for filter in filters:"},{"line_number":354,"context_line":"            app \u003d filter(app)"},{"line_number":355,"context_line":"            app._pipeline_final_app \u003d ultimate_app"},{"line_number":356,"context_line":"        return app"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ff159_5dd8dd84","line":353,"updated":"2022-01-12 17:35:07.000000000","message":"filter is a builtin function - pls use a different name","commit_id":"e3691b095171021ce031fcecdd1a42ca546b2f44"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":275,"context_line":"        raise AttributeError(\u0027No apps in pipeline have a \u0027"},{"line_number":276,"context_line":"                             \u0027%s attribute\u0027 % name)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    return property(getter)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"class PipelineWrapper(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"990267ef_eb393028","side":"PARENT","line":278,"updated":"2022-01-12 17:35:07.000000000","message":"this is so great!","commit_id":"379c29477665a33da4e227401c387067d0efc84b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":406,"context_line":"            func(PipelineWrapper(ctx))"},{"line_number":407,"context_line":"        # cache the freshly created app so we don\u0027t have to redo"},{"line_number":408,"context_line":"        # initialization checks and log startup messages again"},{"line_number":409,"context_line":"        ctx.app_context.create \u003d lambda: app"},{"line_number":410,"context_line":"    return ctx.create()"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"a8b48953_2a660941","side":"PARENT","line":409,"updated":"2022-01-12 17:35:07.000000000","message":"IIRC this wrapping of create does prevent some duplicated log messages on start up\n\nconfirmed on master we still loadapp twice; but w/o this when call ctx.create() below we\u0027ll get it twice per call (i.e. log 4 times intead of \"just\" 2 times)\n\nN.B. this change returns app and doesn\u0027t call create again; so we still get startup logging messages just twice","commit_id":"379c29477665a33da4e227401c387067d0efc84b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":358,"context_line":"            func(PipelineWrapper(ctx))"},{"line_number":359,"context_line":"        filters \u003d [c.create() for c in reversed(ctx.filter_contexts)]"},{"line_number":360,"context_line":"        app \u003d ultimate_app"},{"line_number":361,"context_line":"        app._pipeline_final_app \u003d ultimate_app"},{"line_number":362,"context_line":"        for filter in filters:"},{"line_number":363,"context_line":"            app \u003d filter(app)"},{"line_number":364,"context_line":"            app._pipeline_final_app \u003d ultimate_app"}],"source_content_type":"text/x-python","patch_set":6,"id":"7d9fcbbf_35e61ea5","line":361,"updated":"2022-01-12 17:35:07.000000000","message":"looks pretty faithful\n\nhttps://github.com/Pylons/pastedeploy/blob/master/paste/deploy/loadwsgi.py#L205-L216","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cbe5793efc2f010a8c5708a7eb17c160f3da2f89","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        filters \u003d [c.create() for c in reversed(ctx.filter_contexts)]"},{"line_number":360,"context_line":"        app \u003d ultimate_app"},{"line_number":361,"context_line":"        app._pipeline_final_app \u003d ultimate_app"},{"line_number":362,"context_line":"        for filter in filters:"},{"line_number":363,"context_line":"            app \u003d filter(app)"},{"line_number":364,"context_line":"            app._pipeline_final_app \u003d ultimate_app"},{"line_number":365,"context_line":"        return app"}],"source_content_type":"text/x-python","patch_set":6,"id":"a89f8eaf_41b36765","line":362,"updated":"2022-01-12 17:35:07.000000000","message":"filter shadows a builtin","commit_id":"079abc5f71d8932ccd3b10f2c9610597c734f433"}],"test/unit/common/test_internal_client.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"146ef8631bb8439f12471cf68cd8115ce79e7400","unresolved":true,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        with mock.patch.object("},{"line_number":290,"context_line":"                internal_client, \u0027loadapp\u0027, return_value\u003dapp) as mock_loadapp,\\"},{"line_number":291,"context_line":"                self.assertRaises(ValueError):"},{"line_number":292,"context_line":"            # First try with a bad arg"},{"line_number":293,"context_line":"            internal_client.InternalClient("},{"line_number":294,"context_line":"                conf_path, user_agent, request_tries\u003d0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"facdedb0_ce93639f","line":291,"updated":"2022-01-24 16:20:50.000000000","message":"there\u0027s still a lot of loadapp mocking in this module that could be replaced with the new app injection","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a7e9b792eba23532e961f9f33fc8246c3bb3df4b","unresolved":true,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        with mock.patch.object("},{"line_number":290,"context_line":"                internal_client, \u0027loadapp\u0027, return_value\u003dapp) as mock_loadapp,\\"},{"line_number":291,"context_line":"                self.assertRaises(ValueError):"},{"line_number":292,"context_line":"            # First try with a bad arg"},{"line_number":293,"context_line":"            internal_client.InternalClient("},{"line_number":294,"context_line":"                conf_path, user_agent, request_tries\u003d0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f210bda_7a4e2874","line":291,"in_reply_to":"facdedb0_ce93639f","updated":"2022-01-24 22:55:06.000000000","message":"I mean, at least *one* test needs to actually exercise that... but yeah, I can clean up some of the others if you like.","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"}],"test/unit/common/test_wsgi.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"348abb1b88184e651d53bff2f33f7b4200b79083","unresolved":true,"context_lines":[{"line_number":1885,"context_line":"            # Everybody gets a reference to the final app, too"},{"line_number":1886,"context_line":"            self.assertIs(app.app.app, app._pipeline_final_app)"},{"line_number":1887,"context_line":"            self.assertIs(app.app.app, app.app._pipeline_final_app)"},{"line_number":1888,"context_line":"            self.assertIs(app.app.app, app.app.app._pipeline_final_app)"},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"            # make sure you can turn off the pipeline modification if you want"},{"line_number":1891,"context_line":"            def blow_up(*_, **__):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ac571484_6618f53b","line":1888,"updated":"2021-12-17 04:25:20.000000000","message":"Lol, love this!","commit_id":"b11878b7393e09de81dd82dd1fd5b7eb0df4407e"}],"test/unit/container/test_reconciler.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"146ef8631bb8439f12471cf68cd8115ce79e7400","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __getattr__(self, name):"},{"line_number":66,"context_line":"        if name \u003d\u003d \u0027_pipeline_final_app\u0027:"},{"line_number":67,"context_line":"            return self"},{"line_number":68,"context_line":"        return getattr(self.storage_policy[None], name)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __call__(self, env, start_response):"}],"source_content_type":"text/x-python","patch_set":10,"id":"8a4acd8d_be601c38","line":67,"updated":"2022-01-24 16:20:50.000000000","message":"I don\u0027t understand why this change is needed, i\u0027m guessing this fake isn\u0027t ever used in a context where we\u0027re calling the real InternalClient.__init__","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b4e608a901abd29b11914799552093c2cca3b328","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __getattr__(self, name):"},{"line_number":66,"context_line":"        if name \u003d\u003d \u0027_pipeline_final_app\u0027:"},{"line_number":67,"context_line":"            return self"},{"line_number":68,"context_line":"        return getattr(self.storage_policy[None], name)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __call__(self, env, start_response):"}],"source_content_type":"text/x-python","patch_set":10,"id":"decf3146_e0b14357","line":67,"in_reply_to":"8a4acd8d_be601c38","updated":"2022-01-24 19:45:18.000000000","message":"Looks like it isn\u0027t -- I think it must\u0027ve been left over from a previous patchset where this *was* necessary.","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"146ef8631bb8439f12471cf68cd8115ce79e7400","unresolved":true,"context_lines":[{"line_number":1421,"context_line":"            object_ring_path \u003d os.path.join(self.tempdir,"},{"line_number":1422,"context_line":"                                            policy.ring_name + \u0027.ring.gz\u0027)"},{"line_number":1423,"context_line":"            write_fake_ring(object_ring_path)"},{"line_number":1424,"context_line":"        app \u003d loadapp(conf_path)._pipeline_final_app"},{"line_number":1425,"context_line":""},{"line_number":1426,"context_line":"        # validate loaded rings"},{"line_number":1427,"context_line":"        self.assertEqual(app.account_ring.serialized_path,"}],"source_content_type":"text/x-python","patch_set":10,"id":"94dcc637_52e73567","line":1424,"updated":"2022-01-24 16:20:50.000000000","message":"this is a lovely little cleanup - i like _pipeline_final_app SO much","commit_id":"26c0f31379ba4b47f84fe13c1f7f09a47abdb15a"}]}
