)]}'
{"cinderclient/shell_utils.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            value \u003d None"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        filters[key] \u003d value"},{"line_number":154,"context_line":"        return filters"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"def extract_metadata(args, type\u003d\u0027user_metadata\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_fe8256ff","line":154,"range":{"start_line":154,"start_character":0,"end_line":154,"end_character":22},"updated":"2017-02-06 11:37:39.000000000","message":"-1 \nDo we actually need return here? Because in such a way this function will work only with one filter arg.","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"958a69067327ba5e58662d82c3bbdfb0b33ad881","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            value \u003d None"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        filters[key] \u003d value"},{"line_number":154,"context_line":"        return filters"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"def extract_metadata(args, type\u003d\u0027user_metadata\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_91748e68","line":154,"range":{"start_line":154,"start_character":0,"end_line":154,"end_character":22},"in_reply_to":"1a430d35_fe8256ff","updated":"2017-02-08 03:31:01.000000000","message":"Done","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        args_metadata \u003d args.image_metadata"},{"line_number":161,"context_line":"    else:"},{"line_number":162,"context_line":"        args_metadata \u003d args.metadata"},{"line_number":163,"context_line":"    for metadatum in args_metadata:"},{"line_number":164,"context_line":"        # unset doesn\u0027t require a val, so we have the if/else"},{"line_number":165,"context_line":"        if \u0027\u003d\u0027 in metadatum:"},{"line_number":166,"context_line":"            (key, value) \u003d metadatum.split(\u0027\u003d\u0027, 1)"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            key \u003d metadatum"},{"line_number":169,"context_line":"            value \u003d None"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        metadata[key] \u003d value"},{"line_number":172,"context_line":"    return metadata"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"def print_volume_type_list(vtypes):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_be79aefe","line":172,"range":{"start_line":163,"start_character":0,"end_line":172,"end_character":19},"updated":"2017-02-06 11:37:39.000000000","message":"-1\nAnd as Ivan mentioned in the comment to previous patch set, we have the same code for build_filters and extract_metadata (despite the return error :)\nI think, it\u0027s better to write here something like\nreturn build_filters(args_metadata)","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"958a69067327ba5e58662d82c3bbdfb0b33ad881","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        args_metadata \u003d args.image_metadata"},{"line_number":161,"context_line":"    else:"},{"line_number":162,"context_line":"        args_metadata \u003d args.metadata"},{"line_number":163,"context_line":"    for metadatum in args_metadata:"},{"line_number":164,"context_line":"        # unset doesn\u0027t require a val, so we have the if/else"},{"line_number":165,"context_line":"        if \u0027\u003d\u0027 in metadatum:"},{"line_number":166,"context_line":"            (key, value) \u003d metadatum.split(\u0027\u003d\u0027, 1)"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            key \u003d metadatum"},{"line_number":169,"context_line":"            value \u003d None"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        metadata[key] \u003d value"},{"line_number":172,"context_line":"    return metadata"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"def print_volume_type_list(vtypes):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_b1718a78","line":172,"range":{"start_line":163,"start_character":0,"end_line":172,"end_character":19},"in_reply_to":"1a430d35_be79aefe","updated":"2017-02-08 03:31:01.000000000","message":"Done","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"}],"cinderclient/tests/unit/v3/test_volumes.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    % parse.quote_plus(\"{\u0027key1\u0027: \u0027val1\u0027}\"))"},{"line_number":102,"context_line":"        cs.assert_called(\u0027GET\u0027, expected)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_get_pools_with_filter(self):"},{"line_number":105,"context_line":"        cs \u003d fakes.FakeClient(api_version\u003dapi_versions.APIVersion(\u00273.28\u0027))"},{"line_number":106,"context_line":"        filter \u003d {\u0027name\u0027: \u0027AAA\u0027}"},{"line_number":107,"context_line":"        vol \u003d cs.volumes.get_pools(\u0027\u0027, filter)"},{"line_number":108,"context_line":"        cs.assert_called(\u0027GET\u0027, \u0027/scheduler-stats/get_pools?name\u003dAAA\u0027)"},{"line_number":109,"context_line":"        self._assert_request_id(vol)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_get_pools_with_filter_in_detail(self):"},{"line_number":112,"context_line":"        cs \u003d fakes.FakeClient(api_version\u003dapi_versions.APIVersion(\u00273.28\u0027))"},{"line_number":113,"context_line":"        filter \u003d {\u0027name\u0027: \u0027AAA\u0027}"},{"line_number":114,"context_line":"        vol \u003d cs.volumes.get_pools(\u0027--detail\u0027, filter)"},{"line_number":115,"context_line":"        cs.assert_called(\u0027GET\u0027,"},{"line_number":116,"context_line":"                         \u0027/scheduler-stats/get_pools?detail\u003dTrue\u0026name\u003dAAA\u0027)"},{"line_number":117,"context_line":"        self._assert_request_id(vol)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_7e82e695","line":117,"range":{"start_line":104,"start_character":0,"end_line":117,"end_character":36},"updated":"2017-02-06 11:37:39.000000000","message":"Why don\u0027t you use the ddt library here as in v3/test_shell file?","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"958a69067327ba5e58662d82c3bbdfb0b33ad881","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    % parse.quote_plus(\"{\u0027key1\u0027: \u0027val1\u0027}\"))"},{"line_number":102,"context_line":"        cs.assert_called(\u0027GET\u0027, expected)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_get_pools_with_filter(self):"},{"line_number":105,"context_line":"        cs \u003d fakes.FakeClient(api_version\u003dapi_versions.APIVersion(\u00273.28\u0027))"},{"line_number":106,"context_line":"        filter \u003d {\u0027name\u0027: \u0027AAA\u0027}"},{"line_number":107,"context_line":"        vol \u003d cs.volumes.get_pools(\u0027\u0027, filter)"},{"line_number":108,"context_line":"        cs.assert_called(\u0027GET\u0027, \u0027/scheduler-stats/get_pools?name\u003dAAA\u0027)"},{"line_number":109,"context_line":"        self._assert_request_id(vol)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_get_pools_with_filter_in_detail(self):"},{"line_number":112,"context_line":"        cs \u003d fakes.FakeClient(api_version\u003dapi_versions.APIVersion(\u00273.28\u0027))"},{"line_number":113,"context_line":"        filter \u003d {\u0027name\u0027: \u0027AAA\u0027}"},{"line_number":114,"context_line":"        vol \u003d cs.volumes.get_pools(\u0027--detail\u0027, filter)"},{"line_number":115,"context_line":"        cs.assert_called(\u0027GET\u0027,"},{"line_number":116,"context_line":"                         \u0027/scheduler-stats/get_pools?detail\u003dTrue\u0026name\u003dAAA\u0027)"},{"line_number":117,"context_line":"        self._assert_request_id(vol)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_f16792b4","line":117,"range":{"start_line":104,"start_character":0,"end_line":117,"end_character":36},"in_reply_to":"1a430d35_7e82e695","updated":"2017-02-08 03:31:01.000000000","message":"Done","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"}],"cinderclient/v3/shell.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"90a6d9d7b20ab7d79af42dec92860a1510b23376","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    _translate_keys(collection, convert)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"def _build_filters(args):"},{"line_number":154,"context_line":"    filters \u003d {}"},{"line_number":155,"context_line":"    for filter in args.filters:"},{"line_number":156,"context_line":"        if \u0027\u003d\u0027 in filter:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_97159e41","line":153,"updated":"2016-11-01 13:29:10.000000000","message":"We\u0027ve got almost the same method for metadata (\u0027_extract_metadata\u0027). Please, move it to utils to avoid code duplication","commit_id":"5d229c26cab137fb8dbb5cbf99a12b9fdff3d7ca"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"           default\u003dNone,"},{"line_number":1037,"context_line":"           start_version\u003d\u00273.28\u0027,"},{"line_number":1038,"context_line":"           help\u003d\u0027Filters pools by key and value pairs. Require \u0027"},{"line_number":1039,"context_line":"                \u0027api version \u003e\u003d3.16. Default\u003dNone.\u0027)"},{"line_number":1040,"context_line":"def do_get_pools(cs, args):"},{"line_number":1041,"context_line":"    \"\"\"Show pool information for backends. Admin only.\"\"\""},{"line_number":1042,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_41de2f6e","line":1039,"range":{"start_line":1039,"start_character":17,"end_line":1039,"end_character":35},"updated":"2017-02-06 11:37:39.000000000","message":"Require api version 3.16, but start_version for it is 3.28?","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"958a69067327ba5e58662d82c3bbdfb0b33ad881","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"           default\u003dNone,"},{"line_number":1037,"context_line":"           start_version\u003d\u00273.28\u0027,"},{"line_number":1038,"context_line":"           help\u003d\u0027Filters pools by key and value pairs. Require \u0027"},{"line_number":1039,"context_line":"                \u0027api version \u003e\u003d3.16. Default\u003dNone.\u0027)"},{"line_number":1040,"context_line":"def do_get_pools(cs, args):"},{"line_number":1041,"context_line":"    \"\"\"Show pool information for backends. Admin only.\"\"\""},{"line_number":1042,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_310cbaec","line":1039,"range":{"start_line":1039,"start_character":17,"end_line":1039,"end_character":35},"in_reply_to":"1a430d35_41de2f6e","updated":"2017-02-08 03:31:01.000000000","message":"Done","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"        pools \u003d cs.volumes.get_pools(args.detail, filters)"},{"line_number":1048,"context_line":"    else:"},{"line_number":1049,"context_line":"        pools \u003d cs.volumes.get_pools(args.detail)"},{"line_number":1050,"context_line":"    infos \u003d dict()"},{"line_number":1051,"context_line":"    infos.update(pools._info)"},{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    for info in infos[\u0027pools\u0027]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_61c08b7d","line":1050,"range":{"start_line":1050,"start_character":0,"end_line":1050,"end_character":18},"updated":"2017-02-06 11:37:39.000000000","message":"why do we need this dict? And why we can\u0027t use pools._info[\u0027pools\u0027] lower in the code for the loop?","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"958a69067327ba5e58662d82c3bbdfb0b33ad881","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"        pools \u003d cs.volumes.get_pools(args.detail, filters)"},{"line_number":1048,"context_line":"    else:"},{"line_number":1049,"context_line":"        pools \u003d cs.volumes.get_pools(args.detail)"},{"line_number":1050,"context_line":"    infos \u003d dict()"},{"line_number":1051,"context_line":"    infos.update(pools._info)"},{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"    for info in infos[\u0027pools\u0027]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_510dc6e6","line":1050,"range":{"start_line":1050,"start_character":0,"end_line":1050,"end_character":18},"in_reply_to":"1a430d35_61c08b7d","updated":"2017-02-08 03:31:01.000000000","message":"Done","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"                                          description\u003dargs.description,"},{"line_number":1118,"context_line":"                                          metadata\u003dsnapshot_metadata)"},{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"    info \u003d {}"},{"line_number":1121,"context_line":"    snapshot \u003d cs.volume_snapshots.get(snapshot.id)"},{"line_number":1122,"context_line":"    info.update(snapshot._info)"},{"line_number":1123,"context_line":"    info.pop(\u0027links\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_0127c764","line":1120,"range":{"start_line":1120,"start_character":11,"end_line":1120,"end_character":13},"updated":"2017-02-06 11:37:39.000000000","message":"It\u0027s better to use one code style for the code. Literal as in previos func or symbolic dictionary like here.","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"316499c8355260cc1fd78fe27da7e1e791a192ed","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"def do_get_pools(cs, args):"},{"line_number":1041,"context_line":"    \"\"\"Show pool information for backends. Admin only.\"\"\""},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"    if cs.api_version \u003e\u003d api_versions.APIVersion(\u00273.28\u0027):"},{"line_number":1044,"context_line":"        filters \u003d None"},{"line_number":1045,"context_line":"        if args.filters is not None:"},{"line_number":1046,"context_line":"            filters \u003d shell_utils.build_filters(args.filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_f0d8f11f","line":1043,"range":{"start_line":1043,"start_character":50,"end_line":1043,"end_character":54},"updated":"2017-02-10 15:39:06.000000000","message":"I have seen in other places people using constants at the top of the file to indicate the microversions used in that file.  I would like to make that change here.  It makes it clearer as to what all microversions are in the code and what the functionality provided is.","commit_id":"5654125df24a337eb5c85d4d49657079edcb7842"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"bfafbbb345d7ea2441f91c4d4485cb878aa15825","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"def do_get_pools(cs, args):"},{"line_number":1041,"context_line":"    \"\"\"Show pool information for backends. Admin only.\"\"\""},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"    if cs.api_version \u003e\u003d api_versions.APIVersion(\u00273.28\u0027):"},{"line_number":1044,"context_line":"        filters \u003d None"},{"line_number":1045,"context_line":"        if args.filters is not None:"},{"line_number":1046,"context_line":"            filters \u003d shell_utils.build_filters(args.filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_d56e50c8","line":1043,"range":{"start_line":1043,"start_character":50,"end_line":1043,"end_character":54},"in_reply_to":"fa31d9ce_f0d8f11f","updated":"2017-02-13 03:36:40.000000000","message":"Good point,done.","commit_id":"5654125df24a337eb5c85d4d49657079edcb7842"}],"cinderclient/v3/volumes.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"0ac18586fddab8d2d7bae20b6fb537b4b3272d7f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        \"\"\"Show pool information for backends.\"\"\""},{"line_number":204,"context_line":"        filters \u003d {} or filters"},{"line_number":205,"context_line":"        if detail:"},{"line_number":206,"context_line":"            filters.update({\u0027detail\u0027: True})"},{"line_number":207,"context_line":"        url \u003d self._build_list_url(\u0027scheduler-stats/get_pools\u0027,"},{"line_number":208,"context_line":"                                   detailed\u003dFalse,"},{"line_number":209,"context_line":"                                   search_opts\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_0158a731","line":206,"range":{"start_line":206,"start_character":12,"end_line":206,"end_character":44},"updated":"2017-02-06 11:37:39.000000000","message":"It\u0027s better to write filters[\u0027detail\u0027] \u003d True here. Not to create new dict instance","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"},{"author":{"_account_id":24309,"name":"xinyanzhang","email":"236592348@qq.com","username":"xinyanzhang"},"change_message_id":"958a69067327ba5e58662d82c3bbdfb0b33ad881","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        \"\"\"Show pool information for backends.\"\"\""},{"line_number":204,"context_line":"        filters \u003d {} or filters"},{"line_number":205,"context_line":"        if detail:"},{"line_number":206,"context_line":"            filters.update({\u0027detail\u0027: True})"},{"line_number":207,"context_line":"        url \u003d self._build_list_url(\u0027scheduler-stats/get_pools\u0027,"},{"line_number":208,"context_line":"                                   detailed\u003dFalse,"},{"line_number":209,"context_line":"                                   search_opts\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_91fbaec0","line":206,"range":{"start_line":206,"start_character":12,"end_line":206,"end_character":44},"in_reply_to":"1a430d35_0158a731","updated":"2017-02-08 03:31:01.000000000","message":"Done","commit_id":"81c04a54c7df0b74a421b1428e4de2487736ec61"}]}
