)]}'
{"rally/plugins/openstack/cleanup/manager.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"50ce816496970f933de02dc37cb180169b7a5191","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.manager_cls \u003d manager_cls"},{"line_number":43,"context_line":"        self.admin \u003d admin"},{"line_number":44,"context_line":"        self.users \u003d users or []"},{"line_number":45,"context_line":"        self.api_versions \u003d api_versions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _get_cached_client(user, cache\u003dNone, api_versions\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_7cb641fa","line":45,"updated":"2016-02-12 17:36:51.000000000","message":"Since this is already called api_info elsewhere I think I\u0027d prefer that this variable (and all of the arguments) be called api_info as well for consistency\u0027s sake.","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"8dbc2fa3de7d6dda7e130fc88e02005f9c14f406","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.manager_cls \u003d manager_cls"},{"line_number":43,"context_line":"        self.admin \u003d admin"},{"line_number":44,"context_line":"        self.users \u003d users or []"},{"line_number":45,"context_line":"        self.api_versions \u003d api_versions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _get_cached_client(user, cache\u003dNone, api_versions\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_ffc22352","line":45,"in_reply_to":"3a57f1b5_7cb641fa","updated":"2016-02-12 17:58:28.000000000","message":"I was following tasks syntax where it uses api_versions. I find later osclients.py is not following the same pattern. I may change the osclients","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"f350d860a1eff8046be9b8898a4e9c0af38d38ce","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.manager_cls \u003d manager_cls"},{"line_number":43,"context_line":"        self.admin \u003d admin"},{"line_number":44,"context_line":"        self.users \u003d users or []"},{"line_number":45,"context_line":"        self.api_versions \u003d api_versions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _get_cached_client(user, cache\u003dNone, api_versions\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_df1f27b5","line":45,"in_reply_to":"3a57f1b5_ffc22352","updated":"2016-02-12 18:03:33.000000000","message":"Sounds good -- consistency one way or another.","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"50ce816496970f933de02dc37cb180169b7a5191","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.api_versions \u003d api_versions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _get_cached_client(user, cache\u003dNone, api_versions\u003dNone):"},{"line_number":49,"context_line":"        \"\"\"Simplifies initialization and caching OpenStack clients.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if not user:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_7cdf213a","line":48,"updated":"2016-02-12 17:36:51.000000000","message":"Instead of passing api_versions to this every time, just remove the @staticmethod decorator and use self.api_versions","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"8dbc2fa3de7d6dda7e130fc88e02005f9c14f406","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.api_versions \u003d api_versions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _get_cached_client(user, cache\u003dNone, api_versions\u003dNone):"},{"line_number":49,"context_line":"        \"\"\"Simplifies initialization and caching OpenStack clients.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if not user:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_3fc99b59","line":48,"in_reply_to":"3a57f1b5_7cdf213a","updated":"2016-02-12 17:58:28.000000000","message":"Make sense, just not sure if it is being called from else where or it is intended to cache the created client to be used at later point by code external to this class.","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"12273a18721d47974d7583b305b63753a3e9b3cb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        if not isinstance(cache, dict):"},{"line_number":55,"context_line":"            return osclients.Clients(user[\"credential\"], api_info\u003dapi_versions)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        key \u003d str((user[\"credential\"], api_versions))"},{"line_number":58,"context_line":"        if key not in cache:"},{"line_number":59,"context_line":"            cache[key] \u003d osclients.Clients(key, api_info\u003dapi_versions)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_037f0eab","line":57,"updated":"2016-02-15 12:19:30.000000000","message":"Why does this use a string-ified tuple instead of just a tuple?","commit_id":"e8bb576f89a1830a862bf76502232d4f998a7229"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"c70f432ea12e74cc519705259e51226bfa958425","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        if not isinstance(cache, dict):"},{"line_number":55,"context_line":"            return osclients.Clients(user[\"credential\"], api_info\u003dapi_versions)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        key \u003d str((user[\"credential\"], api_versions))"},{"line_number":58,"context_line":"        if key not in cache:"},{"line_number":59,"context_line":"            cache[key] \u003d osclients.Clients(key, api_info\u003dapi_versions)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_2bd2db00","line":57,"in_reply_to":"dae33548_037f0eab","updated":"2016-02-15 16:35:42.000000000","message":"Looks like python doesn\u0027t like a dict (api_versions) inside a tuple, when used as a key. I get error can\u0027t use dict as hash","commit_id":"e8bb576f89a1830a862bf76502232d4f998a7229"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"fc941bf7ca3abf2b8401a9e7978e5ade9c6a86f0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        if not isinstance(cache, dict):"},{"line_number":55,"context_line":"            return osclients.Clients(user[\"credential\"], api_info\u003dapi_versions)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        key \u003d str((user[\"credential\"], api_versions))"},{"line_number":58,"context_line":"        if key not in cache:"},{"line_number":59,"context_line":"            cache[key] \u003d osclients.Clients(key, api_info\u003dapi_versions)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_ce5ffd70","line":57,"in_reply_to":"dae33548_2bd2db00","updated":"2016-02-15 16:57:54.000000000","message":"I\u0027d suggest turning it into a list of tuples, which is hashable:\n\n    key \u003d (user[\"credential\"], sorted(api_versions.items()))\n\nNo matter what you do, you need to sort it since dicts are unordered, so this isn\u0027t a reliable cache key.","commit_id":"e8bb576f89a1830a862bf76502232d4f998a7229"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"ebda023fc748a57e3ada45e46f0120788777472a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            return osclients.Clients(user[\"credential\"], api_info\u003dapi_versions)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        if api_versions:"},{"line_number":58,"context_line":"            key \u003d str((user[\"credential\"], sorted(api_versions.items())))"},{"line_number":59,"context_line":"        else:"},{"line_number":60,"context_line":"            key \u003d user[\"credential\"]"},{"line_number":61,"context_line":"        if key not in cache:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_003feeb4","line":58,"updated":"2016-02-15 19:08:44.000000000","message":"There should still be no need to stringify this.","commit_id":"51a6cbfb2573af78ee98fa8794fe3fad0833809f"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"c780ec5e097200120c29d93ff9daa548fdfd9550","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            return osclients.Clients(user[\"credential\"], api_info\u003dapi_versions)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        if api_versions:"},{"line_number":58,"context_line":"            key \u003d str((user[\"credential\"], sorted(api_versions.items())))"},{"line_number":59,"context_line":"        else:"},{"line_number":60,"context_line":"            key \u003d user[\"credential\"]"},{"line_number":61,"context_line":"        if key not in cache:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_00f6ce8e","line":58,"in_reply_to":"dae33548_003feeb4","updated":"2016-02-15 19:31:08.000000000","message":"That\u0027s what I thought, but python disagrees with \u0027list types are not hashable\u0027 error :(","commit_id":"51a6cbfb2573af78ee98fa8794fe3fad0833809f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"03b327f06640438175cd2e73f728f70dd8d02df1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            return osclients.Clients(user[\"credential\"], api_info\u003dapi_versions)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        if api_versions:"},{"line_number":58,"context_line":"            key \u003d str((user[\"credential\"], sorted(api_versions.items())))"},{"line_number":59,"context_line":"        else:"},{"line_number":60,"context_line":"            key \u003d user[\"credential\"]"},{"line_number":61,"context_line":"        if key not in cache:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_e083eaca","line":58,"in_reply_to":"dae33548_00f6ce8e","updated":"2016-02-15 19:33:55.000000000","message":"So:\n\n    key \u003d (user[\"credential\"], tuple(sorted(api_versions.items())))","commit_id":"51a6cbfb2573af78ee98fa8794fe3fad0833809f"}],"tests/unit/plugins/openstack/cleanup/test_manager.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"50ce816496970f933de02dc37cb180169b7a5191","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3a57f1b5_fc70f141","updated":"2016-02-12 17:36:51.000000000","message":"Need a unit test to ensure that api_versions is passed appropriately within the SeekAndDestroy object.","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"f350d860a1eff8046be9b8898a4e9c0af38d38ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3a57f1b5_dffba745","in_reply_to":"3a57f1b5_7f5ab3f3","updated":"2016-02-12 18:03:33.000000000","message":"The one in test_cleanup makes sure that it gets passed to SeekAndDestroy, so with one to make sure SeekAndDestroy passes it to osclients.Clients we\u0027ll definitely be good.","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"8dbc2fa3de7d6dda7e130fc88e02005f9c14f406","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3a57f1b5_7f5ab3f3","in_reply_to":"3a57f1b5_fc70f141","updated":"2016-02-12 17:58:28.000000000","message":"There is one in the test_cleanup, I will add another test for user resource cleanup also as per your comment. So we should be good I think?","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"}],"tests/unit/plugins/openstack/context/test_cleanup.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"50ce816496970f933de02dc37cb180169b7a5191","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        ])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class UserCleanupTestCase(test.TestCase):"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @mock.patch(\"%s.manager\" % BASE)"},{"line_number":126,"context_line":"    def test_validate(self, mock_manager):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_9c921d4b","line":123,"updated":"2016-02-12 17:36:51.000000000","message":"UserCleanup needs a test case with api_versions as well.","commit_id":"ce08cbb983827d6aab81dd7d79b88228ce80e4cb"}]}
