)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"814831d3636637ced4f49a00f203ea62d4dec5a9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"the keystoneclient library itself."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"If you are using V2 URLs you won\u0027t notice any change from this, and V3"},{"line_number":27,"context_line":"URLs don\u0027t work in Rally right now anyway, but I will look at that"},{"line_number":28,"context_line":"shortly."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I3fc6f7b9724922ab7d47ce371578897da611b455"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a5de9d1_21d7f524","line":27,"updated":"2016-02-02 12:35:12.000000000","message":"Can you clarify this paragraph? A versioned v3 URL works fine for several of the Keystone scenarios, and all of the non-Keystone scenarios, so I\u0027m not sure of the value of \"don\u0027t work\" here.","commit_id":"22b656e84b8da9cd51b6f809f3bab2be521fbb8c"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"b9a3b601e95363ce8457ee741e64099e6c10a179","unresolved":false,"context_lines":[{"line_number":24,"context_line":"the keystoneclient library itself."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"If you are using V2 URLs you won\u0027t notice any change from this, and V3"},{"line_number":27,"context_line":"URLs don\u0027t work in Rally right now anyway, but I will look at that"},{"line_number":28,"context_line":"shortly."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I3fc6f7b9724922ab7d47ce371578897da611b455"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a5ae5dd_aed51bba","line":27,"in_reply_to":"7a5de9d1_21d7f524","updated":"2016-02-03 01:07:13.000000000","message":"Done","commit_id":"22b656e84b8da9cd51b6f809f3bab2be521fbb8c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"415668af1df92548b0db9704bdf3ec1c0daf17ff","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and using a deprecated method. It was also second guessing the"},{"line_number":11,"context_line":"discovery process, which keystoneclient itself can handle on its own."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The main symptom of the flawed approach was that you were unable to use"},{"line_number":14,"context_line":"keystone URLs in the catalog that didn\u0027t have the version appended,"},{"line_number":15,"context_line":"e.g.:"},{"line_number":16,"context_line":"  * http://foo.rally:5000/v3"},{"line_number":17,"context_line":"  versus"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5a5ae5dd_15b0e9f3","line":14,"range":{"start_line":13,"start_character":1,"end_line":14,"end_character":66},"updated":"2016-02-03 12:17:50.000000000","message":"several month ago, keystoneclient was unable to do it.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"}],"rally/osclients.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e917e91e01150a166d62be02f5695106c5166821","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            \"username\", \"project_name\", \"tenant_name\", \"auth_url\","},{"line_number":212,"context_line":"            \"password\","},{"line_number":213,"context_line":"        ]"},{"line_number":214,"context_line":"        # If forcing a v2.0 URL then you cannot specify domain-related"},{"line_number":215,"context_line":"        # info, or the service discovery will fail."},{"line_number":216,"context_line":"        if \"v2.0\" not in args[\"auth_url\"]:"},{"line_number":217,"context_line":"            auth_arg_list.extend("}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_4cec93c7","line":214,"updated":"2016-02-03 13:57:26.000000000","message":"This should probably be a NOTE(yournick): ...","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"1ed0938de9c1c8f6c13f5689ffd7537a97a7cfad","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            \"username\", \"project_name\", \"tenant_name\", \"auth_url\","},{"line_number":212,"context_line":"            \"password\","},{"line_number":213,"context_line":"        ]"},{"line_number":214,"context_line":"        # If forcing a v2.0 URL then you cannot specify domain-related"},{"line_number":215,"context_line":"        # info, or the service discovery will fail."},{"line_number":216,"context_line":"        if \"v2.0\" not in args[\"auth_url\"]:"},{"line_number":217,"context_line":"            auth_arg_list.extend("}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_93de0c6c","line":214,"in_reply_to":"5a5ae5dd_4cec93c7","updated":"2016-02-04 01:22:23.000000000","message":"Done","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9e312d2e3b7dd02655a81b8b655dd383ce371419","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        if \"v2.0\" not in args[\"auth_url\"]:"},{"line_number":217,"context_line":"            auth_arg_list.extend("},{"line_number":218,"context_line":"                [\"user_domain_name\", \"domain_name\", \"project_domain_name\"])"},{"line_number":219,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":220,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":221,"context_line":"        sess \u003d session.Session(auth)"},{"line_number":222,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_client(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_dd74affe","line":221,"range":{"start_line":219,"start_character":8,"end_line":221,"end_character":36},"updated":"2016-02-03 14:49:45.000000000","message":"Also, please, move all code related to creation keystone session to _get_session method(see L146)","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"1ed0938de9c1c8f6c13f5689ffd7537a97a7cfad","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        if \"v2.0\" not in args[\"auth_url\"]:"},{"line_number":217,"context_line":"            auth_arg_list.extend("},{"line_number":218,"context_line":"                [\"user_domain_name\", \"domain_name\", \"project_domain_name\"])"},{"line_number":219,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":220,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":221,"context_line":"        sess \u003d session.Session(auth)"},{"line_number":222,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_client(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_b008de2e","line":221,"range":{"start_line":219,"start_character":8,"end_line":221,"end_character":36},"in_reply_to":"5a5ae5dd_dd74affe","updated":"2016-02-04 01:22:23.000000000","message":"Done","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"415668af1df92548b0db9704bdf3ec1c0daf17ff","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":220,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":221,"context_line":"        sess \u003d session.Session(auth)"},{"line_number":222,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_client(self):"},{"line_number":225,"context_line":"        \"\"\"Return keystone client.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_900067ac","line":222,"range":{"start_line":222,"start_character":15,"end_line":222,"end_character":50},"updated":"2016-02-03 12:17:50.000000000","message":"does it possible to specify desired version(I mean does version\u003d2 / version\u003d3 will work in this case)?","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"f54665b4cb4aa9d7f1e90c3a199cd01789ece762","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":220,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":221,"context_line":"        sess \u003d session.Session(auth)"},{"line_number":222,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_client(self):"},{"line_number":225,"context_line":"        \"\"\"Return keystone client.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_553b86d1","line":222,"range":{"start_line":222,"start_character":15,"end_line":222,"end_character":50},"in_reply_to":"5a5ae5dd_534c1470","updated":"2016-02-04 10:25:08.000000000","message":"That wouldn\u0027t work at all for us. We should not change auth_url programatically. Like if we got \u0027http://ip:5000/v3\u0027 then adding \u0027/v3\u0027 will break things.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"89cf7d69ebb6083a2abddee88397fb6520678cb9","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":220,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":221,"context_line":"        sess \u003d session.Session(auth)"},{"line_number":222,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_client(self):"},{"line_number":225,"context_line":"        \"\"\"Return keystone client.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_44dc3512","line":222,"range":{"start_line":222,"start_character":15,"end_line":222,"end_character":50},"in_reply_to":"5a5ae5dd_553b86d1","updated":"2016-02-05 00:12:25.000000000","message":"I figured out how to do it now, you just need to make sure the URL has no version on it, and then passing version\u003d to the Client() call works as expected.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"1ed0938de9c1c8f6c13f5689ffd7537a97a7cfad","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":220,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":221,"context_line":"        sess \u003d session.Session(auth)"},{"line_number":222,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def create_client(self):"},{"line_number":225,"context_line":"        \"\"\"Return keystone client.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_534c1470","line":222,"range":{"start_line":222,"start_character":15,"end_line":222,"end_character":50},"in_reply_to":"5a5ae5dd_900067ac","updated":"2016-02-04 01:22:23.000000000","message":"It doesn\u0027t work sadly (it should work, but I suspect a keystone bug), but the alternative is easy - you just append /v3 or /v2.0 on the URL and it does work fine.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d67d8a96f9471848cd116f37e7f9504da49d6106","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                [\"user_domain_name\", \"domain_name\", \"project_domain_name\"])"},{"line_number":216,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":217,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":218,"context_line":"        sess \u003d self._get_session(auth\u003dauth)"},{"line_number":219,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def create_client(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_2407be1d","line":218,"updated":"2016-02-04 10:39:37.000000000","message":"args[\"session\"] \u003d self._get_session(auth\u003dauth)\n\nthis will take care about potential arguments duplication","commit_id":"5224d2b5b9ba86582ecb135a8a228d9379d8e4a1"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"f0427e7d37d57d0dbae63df1531da065ccd59efc","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                [\"user_domain_name\", \"domain_name\", \"project_domain_name\"])"},{"line_number":216,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":217,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":218,"context_line":"        sess \u003d self._get_session(auth\u003dauth)"},{"line_number":219,"context_line":"        return client.Client(session\u003dsess, **args)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def create_client(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_a422c9ff","line":218,"in_reply_to":"5a5ae5dd_2407be1d","updated":"2016-02-04 12:03:58.000000000","message":"Good catch, fixed.","commit_id":"5224d2b5b9ba86582ecb135a8a228d9379d8e4a1"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"ef80efd72359ee1dc92f24786d13e86644f92af2","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        if \"v2.0\" not in args[\"auth_url\"]:"},{"line_number":214,"context_line":"            auth_arg_list.extend("},{"line_number":215,"context_line":"                [\"user_domain_name\", \"domain_name\", \"project_domain_name\"])"},{"line_number":216,"context_line":"        auth_args \u003d {key: args.get(key) for key in auth_arg_list}"},{"line_number":217,"context_line":"        auth \u003d identity.Password(**auth_args)"},{"line_number":218,"context_line":"        args[\"session\"] \u003d self._get_session(auth\u003dauth)"},{"line_number":219,"context_line":"        return client.Client(**args)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_e5895b76","line":216,"updated":"2016-02-05 14:10:53.000000000","message":"AFAIK Rally still maintains compatibility with 2.6, which lacks dict comprehensions.","commit_id":"43028c9bbae60b4fbdf31272e420e1096af363e6"}],"tests/unit/test_osclients.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e917e91e01150a166d62be02f5695106c5166821","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.kwargs.update(self.auth_kwargs)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_create_keystone_client(self):"},{"line_number":94,"context_line":"        # This is a very poor testing strategy as it tightly couples"},{"line_number":95,"context_line":"        # the test implementation to the tested function\u0027s"},{"line_number":96,"context_line":"        # implementation. Ideally, we\u0027d use a fake keystone but all"},{"line_number":97,"context_line":"        # that\u0027s happening here is that it\u0027s checking the right"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_0cd9bbf3","line":94,"updated":"2016-02-03 13:57:26.000000000","message":"NOTE(yournick) here as well, and below.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"1ed0938de9c1c8f6c13f5689ffd7537a97a7cfad","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.kwargs.update(self.auth_kwargs)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_create_keystone_client(self):"},{"line_number":94,"context_line":"        # This is a very poor testing strategy as it tightly couples"},{"line_number":95,"context_line":"        # the test implementation to the tested function\u0027s"},{"line_number":96,"context_line":"        # implementation. Ideally, we\u0027d use a fake keystone but all"},{"line_number":97,"context_line":"        # that\u0027s happening here is that it\u0027s checking the right"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_b3d9c885","line":94,"in_reply_to":"5a5ae5dd_0cd9bbf3","updated":"2016-02-04 01:22:23.000000000","message":"Done","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e917e91e01150a166d62be02f5695106c5166821","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                ksc_identity.Password())"},{"line_number":148,"context_line":"            ksc_client.Client.assert_called_once_with("},{"line_number":149,"context_line":"                session\u003dksc_session.Session(), **self.kwargs)"},{"line_number":150,"context_line":"            self.assertIs(client, ksc_client.Client())"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_ec545f55","line":150,"updated":"2016-02-03 13:57:26.000000000","message":"With the amount of code duplicated here, this would be a good place to use DDT.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"1ed0938de9c1c8f6c13f5689ffd7537a97a7cfad","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                ksc_identity.Password())"},{"line_number":148,"context_line":"            ksc_client.Client.assert_called_once_with("},{"line_number":149,"context_line":"                session\u003dksc_session.Session(), **self.kwargs)"},{"line_number":150,"context_line":"            self.assertIs(client, ksc_client.Client())"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_3362b8ae","line":150,"in_reply_to":"5a5ae5dd_ec545f55","updated":"2016-02-04 01:22:23.000000000","message":"I\u0027m going to politely disagree. These are not different scenarios of the same test, it\u0027s an entirely different test case requiring different assertions and different setup. The code looks similar because of all the damn mocking required due to the lack of a keystone test double.","commit_id":"320365b209f0db2258e8d4dd092bc9e084559557"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d67d8a96f9471848cd116f37e7f9504da49d6106","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ksc_identity \u003d mock.MagicMock()"},{"line_number":133,"context_line":"        ksc_password \u003d mock.MagicMock()"},{"line_number":134,"context_line":"        ksc_session \u003d mock.MagicMock()"},{"line_number":135,"context_line":"        ksc_auth \u003d mock.MagicMock()"},{"line_number":136,"context_line":"        with mock.patch.dict(\"sys.modules\","},{"line_number":137,"context_line":"                             {\"keystoneclient\": ksc_module,"},{"line_number":138,"context_line":"                              \"keystoneclient.auth\": ksc_auth}):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_8f6ecbc7","line":135,"updated":"2016-02-04 10:39:37.000000000","message":"There is a code duplication - all these mocks can be moved to setUp()","commit_id":"5224d2b5b9ba86582ecb135a8a228d9379d8e4a1"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"f0427e7d37d57d0dbae63df1531da065ccd59efc","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ksc_identity \u003d mock.MagicMock()"},{"line_number":133,"context_line":"        ksc_password \u003d mock.MagicMock()"},{"line_number":134,"context_line":"        ksc_session \u003d mock.MagicMock()"},{"line_number":135,"context_line":"        ksc_auth \u003d mock.MagicMock()"},{"line_number":136,"context_line":"        with mock.patch.dict(\"sys.modules\","},{"line_number":137,"context_line":"                             {\"keystoneclient\": ksc_module,"},{"line_number":138,"context_line":"                              \"keystoneclient.auth\": ksc_auth}):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_875f8f40","line":135,"in_reply_to":"5a5ae5dd_8f6ecbc7","updated":"2016-02-04 12:03:58.000000000","message":"I don\u0027t usually like hiding test input/setup away (it\u0027s a testing antipattern) but ok.","commit_id":"5224d2b5b9ba86582ecb135a8a228d9379d8e4a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"d67d8a96f9471848cd116f37e7f9504da49d6106","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        ksc_password \u003d mock.MagicMock()"},{"line_number":134,"context_line":"        ksc_session \u003d mock.MagicMock()"},{"line_number":135,"context_line":"        ksc_auth \u003d mock.MagicMock()"},{"line_number":136,"context_line":"        with mock.patch.dict(\"sys.modules\","},{"line_number":137,"context_line":"                             {\"keystoneclient\": ksc_module,"},{"line_number":138,"context_line":"                              \"keystoneclient.auth\": ksc_auth}):"},{"line_number":139,"context_line":"            ksc_module.client \u003d ksc_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_f5cab219","line":136,"updated":"2016-02-04 10:39:37.000000000","message":"This can be also moved to setUp()/tearDown() using mock.patch(...).start()/stop()\n\nhttp://paste.openstack.org/show/485940/","commit_id":"5224d2b5b9ba86582ecb135a8a228d9379d8e4a1"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"f0427e7d37d57d0dbae63df1531da065ccd59efc","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        ksc_password \u003d mock.MagicMock()"},{"line_number":134,"context_line":"        ksc_session \u003d mock.MagicMock()"},{"line_number":135,"context_line":"        ksc_auth \u003d mock.MagicMock()"},{"line_number":136,"context_line":"        with mock.patch.dict(\"sys.modules\","},{"line_number":137,"context_line":"                             {\"keystoneclient\": ksc_module,"},{"line_number":138,"context_line":"                              \"keystoneclient.auth\": ksc_auth}):"},{"line_number":139,"context_line":"            ksc_module.client \u003d ksc_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_5a472e4b","line":136,"in_reply_to":"5a5ae5dd_f5cab219","updated":"2016-02-04 12:03:58.000000000","message":"I\u0027m going to rewrite things a bit, hiding test input/setup away is really bad.","commit_id":"5224d2b5b9ba86582ecb135a8a228d9379d8e4a1"}]}
