)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sergey Gotliv \u003csgotliv@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-22 11:55:57 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding pagination capabilities to snapshots and backups lists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Snapshot and backups pagination was recently implemented in the Cinder"},{"line_number":10,"context_line":"backend. This patch is implementing a pagination for the snapshots and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba15a1d1_2f2f883f","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":61},"updated":"2015-09-22 11:55:35.000000000","message":"-1: First line must not exceed 50 chars: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sergey Gotliv \u003csgotliv@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-22 11:55:57 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding pagination capabilities to snapshots and backups lists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Snapshot and backups pagination was recently implemented in the Cinder"},{"line_number":10,"context_line":"backend. This patch is implementing a pagination for the snapshots and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_8efa54bc","line":7,"in_reply_to":"ba15a1d1_2f2f883f","updated":"2015-09-28 13:49:08.000000000","message":"Done","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"}],"cinderclient/base.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"18fbe9161eee36e188b33a96503512d7b7919855","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        else:"},{"line_number":146,"context_line":"            # sort_key and sort_dir deprecated in kilo, prefer sort"},{"line_number":147,"context_line":"            if sort_key:"},{"line_number":148,"context_line":"                query_params[\u0027sort_key\u0027] \u003d \\"},{"line_number":149,"context_line":"                    self._format_sort_key_param(sort_key)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            if sort_dir:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_4012dbb5","line":148,"updated":"2015-09-22 02:35:51.000000000","message":"Please use () to replace \\.","commit_id":"9c684268cfbc7d22e495cb04561801761dfdf14d"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"18fbe9161eee36e188b33a96503512d7b7919855","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                    self._format_sort_key_param(sort_key)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            if sort_dir:"},{"line_number":152,"context_line":"                query_params[\u0027sort_dir\u0027] \u003d \\"},{"line_number":153,"context_line":"                    self._format_sort_dir_param(sort_dir)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # Transform the dict to a sequence of two-element tuples in fixed"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_a04417b7","line":152,"updated":"2015-09-22 02:35:51.000000000","message":"Please use () to replace \\.","commit_id":"9c684268cfbc7d22e495cb04561801761dfdf14d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"try:"},{"line_number":28,"context_line":"    from urllib import urlencode"},{"line_number":29,"context_line":"except ImportError:"},{"line_number":30,"context_line":"    from urllib.parse import urlencode"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinderclient import exceptions"},{"line_number":33,"context_line":"from cinderclient.openstack.common.apiclient import base as common_base"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_2f078882","line":30,"updated":"2015-09-22 11:55:35.000000000","message":"-1: I know you just moved this from volumes, but please use six.moves instead and don\u0027t import a method directly\n\n from six.moves import urllib\n\nAnd then use\n\n urllib.parse.urlencode\n\nOr even:\n\n from six.moves.urllib import parse\n\nAnd then use\n\n parse.urlencode","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":27,"context_line":"try:"},{"line_number":28,"context_line":"    from urllib import urlencode"},{"line_number":29,"context_line":"except ImportError:"},{"line_number":30,"context_line":"    from urllib.parse import urlencode"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinderclient import exceptions"},{"line_number":33,"context_line":"from cinderclient.openstack.common.apiclient import base as common_base"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_aeab98d5","line":30,"in_reply_to":"ba15a1d1_2f078882","updated":"2015-09-28 13:49:08.000000000","message":"Done","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# Valid sort directions and client sort keys"},{"line_number":38,"context_line":"SORT_DIR_VALUES \u003d (\u0027asc\u0027, \u0027desc\u0027)"},{"line_number":39,"context_line":"SORT_KEY_VALUES \u003d (\u0027id\u0027, \u0027status\u0027, \u0027size\u0027, \u0027availability_zone\u0027, \u0027name\u0027,"},{"line_number":40,"context_line":"                   \u0027bootable\u0027, \u0027created_at\u0027)"},{"line_number":41,"context_line":"# Mapping of client keys to actual sort keys"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_4d5524c4","line":38,"updated":"2015-09-22 11:55:35.000000000","message":"opt: I think these should be class attributes in Manager class.","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2272728d54ddb746b5c6a6dbc523212a362a6c73","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# Valid sort directions and client sort keys"},{"line_number":38,"context_line":"SORT_DIR_VALUES \u003d (\u0027asc\u0027, \u0027desc\u0027)"},{"line_number":39,"context_line":"SORT_KEY_VALUES \u003d (\u0027id\u0027, \u0027status\u0027, \u0027size\u0027, \u0027availability_zone\u0027, \u0027name\u0027,"},{"line_number":40,"context_line":"                   \u0027bootable\u0027, \u0027created_at\u0027)"},{"line_number":41,"context_line":"# Mapping of client keys to actual sort keys"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_d3d3035e","line":38,"in_reply_to":"9a1a9d01_dd30f203","updated":"2015-10-05 11:57:34.000000000","message":"Ok, I understand.","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# Valid sort directions and client sort keys"},{"line_number":38,"context_line":"SORT_DIR_VALUES \u003d (\u0027asc\u0027, \u0027desc\u0027)"},{"line_number":39,"context_line":"SORT_KEY_VALUES \u003d (\u0027id\u0027, \u0027status\u0027, \u0027size\u0027, \u0027availability_zone\u0027, \u0027name\u0027,"},{"line_number":40,"context_line":"                   \u0027bootable\u0027, \u0027created_at\u0027)"},{"line_number":41,"context_line":"# Mapping of client keys to actual sort keys"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_dd30f203","line":38,"in_reply_to":"ba15a1d1_4d5524c4","updated":"2015-09-28 13:49:08.000000000","message":"I agree in general. Meantime these values are in use by shell.py so they have to remain static parameters. I don\u0027t want to make unrelated changes in that patch.","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        query_params \u003d {}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for opt, val in six.iteritems(search_opts):"},{"line_number":134,"context_line":"            if val:"},{"line_number":135,"context_line":"                query_params[opt] \u003d val"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_d2fd4f6f","line":133,"updated":"2015-09-22 11:55:35.000000000","message":"nit: We agreed to use search_opts.items() instead for python 3 compatibility, because for small number of elements like this one the little gain we obtain using iteritems doesn\u0027t justify diminished readability.\n\nAnd this should be using dict comprehension:\n\n query_params \u003d {opt: val for opt, val in search_opts.items() if val}","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        query_params \u003d {}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for opt, val in six.iteritems(search_opts):"},{"line_number":134,"context_line":"            if val:"},{"line_number":135,"context_line":"                query_params[opt] \u003d val"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_b321c1b6","line":133,"in_reply_to":"ba15a1d1_d2fd4f6f","updated":"2015-09-28 13:49:08.000000000","message":"Done","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":232,"context_line":"               % \u0027, \u0027.join(SORT_DIR_VALUES))"},{"line_number":233,"context_line":"        raise ValueError(msg)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def format_sort_key_param(self, sort_key):"},{"line_number":236,"context_line":"        pass"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def format_sort_dir_param(self, sort_key\u003dNone, sort_dir\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_2d855058","line":235,"updated":"2015-09-22 11:55:35.000000000","message":"-1: This method is unnecessary, please remove it.","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":232,"context_line":"               % \u0027, \u0027.join(SORT_DIR_VALUES))"},{"line_number":233,"context_line":"        raise ValueError(msg)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def format_sort_key_param(self, sort_key):"},{"line_number":236,"context_line":"        pass"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def format_sort_dir_param(self, sort_key\u003dNone, sort_dir\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_732b2995","line":235,"in_reply_to":"ba15a1d1_2d855058","updated":"2015-09-28 13:49:08.000000000","message":"Done","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    def format_sort_key_param(self, sort_key):"},{"line_number":236,"context_line":"        pass"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def format_sort_dir_param(self, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":239,"context_line":"        pass"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_ad91609c","line":238,"updated":"2015-09-22 11:55:35.000000000","message":"-1: This method is unnecessary, please remove it.","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    def format_sort_key_param(self, sort_key):"},{"line_number":236,"context_line":"        pass"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def format_sort_dir_param(self, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":239,"context_line":"        pass"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_13198d88","line":238,"in_reply_to":"ba15a1d1_ad91609c","updated":"2015-09-28 13:49:08.000000000","message":"Done","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"59384da2d6377686b40179daff26a5813bb626a0","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            search_opts \u003d {}"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        query_params \u003d {}"},{"line_number":129,"context_line":"        for key, val in search_opts.items():"},{"line_number":130,"context_line":"            if val:"},{"line_number":131,"context_line":"                query_params[key] \u003d val"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_13517bd8","line":129,"updated":"2015-10-05 11:58:00.000000000","message":"I see you didn\u0027t want to use dict comprehension even though we no longer need to support Python 2.6 code   ;-)","commit_id":"e707c7aa9f08d4a6d6a7f18b61c22de6095c757a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"44715781b7ed566eaf95cd526b35a6b6178a9b27","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            search_opts \u003d {}"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        query_params \u003d {}"},{"line_number":129,"context_line":"        for key, val in search_opts.items():"},{"line_number":130,"context_line":"            if val:"},{"line_number":131,"context_line":"                query_params[key] \u003d val"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_34a14c95","line":129,"in_reply_to":"7a2fa921_6e5cd325","updated":"2015-10-06 09:41:10.000000000","message":"My bad, forgot that only cinder dropped support for py26, but not cinderclient.","commit_id":"e707c7aa9f08d4a6d6a7f18b61c22de6095c757a"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"af35bdbafeff8b379dbc92a5b27f2a92cdb063e8","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            search_opts \u003d {}"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        query_params \u003d {}"},{"line_number":129,"context_line":"        for key, val in search_opts.items():"},{"line_number":130,"context_line":"            if val:"},{"line_number":131,"context_line":"                query_params[key] \u003d val"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_6e5cd325","line":129,"in_reply_to":"9a1a9d01_13517bd8","updated":"2015-10-06 08:49:32.000000000","message":"We have a python2.6 gate which fails to process inline \u0027for\u0027 for dictionaries.","commit_id":"e707c7aa9f08d4a6d6a7f18b61c22de6095c757a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4c3a01fdcfdba1d0e9f4ea1feab4fb0e9b102763","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                 \"query_string\": query_string})"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _format_sort_param(self, sort):"},{"line_number":167,"context_line":"        \u0027\u0027\u0027Formats the sort information into the sort query string parameter."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        The input sort information can be any of the following:"},{"line_number":170,"context_line":"        - Comma-separated string in the form of \u003ckey[:dir]\u003e"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_5500b401","line":167,"updated":"2015-10-10 12:17:34.000000000","message":"I won\u0027t downvote since it\u0027s easy enough to fix up in future patches, but just for your awareness, docstring\u0027s need to use double quotes, not single quotes.","commit_id":"e707c7aa9f08d4a6d6a7f18b61c22de6095c757a"}],"cinderclient/tests/unit/v2/test_volume_backups.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"db33c0dbbd4a52d91deb8f037fbbb68b5d575c0e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        cs.backups.list()"},{"line_number":46,"context_line":"        cs.assert_called(\u0027GET\u0027, \u0027/backups/detail\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        cs.backups.list(limit\u003d2, marker\u003d100)"},{"line_number":49,"context_line":"        cs.assert_called(\u0027GET\u0027, \u0027/backups/detail?limit\u003d2\u0026marker\u003d100\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        cs.backups.list(sort\u003d\"id\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_d2a46f09","line":48,"updated":"2015-09-22 11:55:35.000000000","message":"-1: Only test 1 thing in each test.  You should add 2 different tests for the tests you have added, like you did in snapshot actions.","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"},{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"35a5e0da10338a3f9ec33402c47353578cdce105","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        cs.backups.list()"},{"line_number":46,"context_line":"        cs.assert_called(\u0027GET\u0027, \u0027/backups/detail\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        cs.backups.list(limit\u003d2, marker\u003d100)"},{"line_number":49,"context_line":"        cs.assert_called(\u0027GET\u0027, \u0027/backups/detail?limit\u003d2\u0026marker\u003d100\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        cs.backups.list(sort\u003d\"id\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_ceca8ca1","line":48,"in_reply_to":"ba15a1d1_d2a46f09","updated":"2015-09-28 13:49:08.000000000","message":"Done","commit_id":"2c103f7842aacdd901f6a98affa7eb888ac70030"}]}
