)]}'
{"manilaclient/tests/functional/base.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                          cleanup_in_class\u003dTrue, microversion\u003dNone):"},{"line_number":163,"context_line":"        if client is None:"},{"line_number":164,"context_line":"            client \u003d cls.get_admin_client()"},{"line_number":165,"context_line":"        share_type, extra_spec_arr \u003d client.create_share_type("},{"line_number":166,"context_line":"            name\u003dname,"},{"line_number":167,"context_line":"            driver_handles_share_servers\u003ddriver_handles_share_servers,"},{"line_number":168,"context_line":"            extra_specs\u003dextra_specs,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_1520f2f6","line":165,"range":{"start_line":165,"start_character":31,"end_line":165,"end_character":34},"updated":"2016-05-24 12:49:50.000000000","message":"arr?","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                          cleanup_in_class\u003dTrue, microversion\u003dNone):"},{"line_number":163,"context_line":"        if client is None:"},{"line_number":164,"context_line":"            client \u003d cls.get_admin_client()"},{"line_number":165,"context_line":"        share_type, extra_spec_arr \u003d client.create_share_type("},{"line_number":166,"context_line":"            name\u003dname,"},{"line_number":167,"context_line":"            driver_handles_share_servers\u003ddriver_handles_share_servers,"},{"line_number":168,"context_line":"            extra_specs\u003dextra_specs,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_7e7c7deb","line":165,"range":{"start_line":165,"start_character":31,"end_line":165,"end_character":34},"in_reply_to":"bab6814e_1520f2f6","updated":"2016-05-25 12:43:25.000000000","message":"That was meant to say its an array :) doesn\u0027t look good?","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1ffa5aabd1f876354c671ba9e63ea2dbb1af980e","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                          cleanup_in_class\u003dTrue, microversion\u003dNone):"},{"line_number":163,"context_line":"        if client is None:"},{"line_number":164,"context_line":"            client \u003d cls.get_admin_client()"},{"line_number":165,"context_line":"        share_type, extra_spec_arr \u003d client.create_share_type("},{"line_number":166,"context_line":"            name\u003dname,"},{"line_number":167,"context_line":"            driver_handles_share_servers\u003ddriver_handles_share_servers,"},{"line_number":168,"context_line":"            extra_specs\u003dextra_specs,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_cb6dea9a","line":165,"range":{"start_line":165,"start_character":31,"end_line":165,"end_character":34},"in_reply_to":"bab6814e_7e7c7deb","updated":"2016-05-25 12:55:00.000000000","message":"Doesn\u0027t.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"}],"manilaclient/tests/functional/client.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2603ff218a2931f8bb62dac4183e0c2a36d8aebf","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        if not isinstance(is_public, six.string_types):"},{"line_number":166,"context_line":"            is_public \u003d six.text_type(is_public)"},{"line_number":167,"context_line":"        cmd \u003d (\u0027type-create %(name)s %(dhss)s --is-public %(is_public)s \u0027"},{"line_number":168,"context_line":"               \u0027--extra_specs snapshot-support\u003d%(snapshot_support)s\u0027) % {"},{"line_number":169,"context_line":"                   \u0027name\u0027: name, \u0027dhss\u0027: dhss, \u0027is_public\u0027: is_public,"},{"line_number":170,"context_line":"                   \u0027snapshot_support\u0027: snapshot_support}"},{"line_number":171,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_8f2f9187","line":168,"range":{"start_line":168,"start_character":30,"end_line":168,"end_character":46},"updated":"2016-05-13 08:56:09.000000000","message":"s/snapshot-support/snapshot_support","commit_id":"1a663a8b2e7d4b575e9e0f81445e4a49ad8bd958"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"f4d7d213c29d3df624d295767fa6f938b410a0cb","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        if not isinstance(is_public, six.string_types):"},{"line_number":166,"context_line":"            is_public \u003d six.text_type(is_public)"},{"line_number":167,"context_line":"        cmd \u003d (\u0027type-create %(name)s %(dhss)s --is-public %(is_public)s \u0027"},{"line_number":168,"context_line":"               \u0027--extra_specs snapshot-support\u003d%(snapshot_support)s\u0027) % {"},{"line_number":169,"context_line":"                   \u0027name\u0027: name, \u0027dhss\u0027: dhss, \u0027is_public\u0027: is_public,"},{"line_number":170,"context_line":"                   \u0027snapshot_support\u0027: snapshot_support}"},{"line_number":171,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_b51bc3c9","line":168,"range":{"start_line":168,"start_character":30,"end_line":168,"end_character":46},"in_reply_to":"dab17558_8f2f9187","updated":"2016-05-13 10:54:13.000000000","message":"sorry, will correct it.","commit_id":"1a663a8b2e7d4b575e9e0f81445e4a49ad8bd958"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4eb13d2bd4ebdf6739564beaa1ee291ff443dd71","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # Share types"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def create_share_type(self, name\u003dNone, driver_handles_share_servers\u003dTrue,"},{"line_number":145,"context_line":"                          snapshot_support\u003dTrue, is_public\u003dTrue,"},{"line_number":146,"context_line":"                          microversion\u003dNone):"},{"line_number":147,"context_line":"        \"\"\"Creates share type."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        :param name: text -- name of share type to use, if not set then"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_bb89a428","line":146,"range":{"start_line":144,"start_character":32,"end_line":146,"end_character":43},"updated":"2016-05-16 12:03:02.000000000","message":"Interface should have changed too. For the moment you cannot test your changes in functional tests.","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"7ca9c06c4397bc792eb1267bbfc7e3a5fa69b0d1","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # Share types"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def create_share_type(self, name\u003dNone, driver_handles_share_servers\u003dTrue,"},{"line_number":145,"context_line":"                          snapshot_support\u003dTrue, is_public\u003dTrue,"},{"line_number":146,"context_line":"                          microversion\u003dNone):"},{"line_number":147,"context_line":"        \"\"\"Creates share type."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        :param name: text -- name of share type to use, if not set then"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_fb23fa02","line":146,"range":{"start_line":144,"start_character":32,"end_line":146,"end_character":43},"in_reply_to":"dab17558_bb89a428","updated":"2016-05-17 08:36:28.000000000","message":"cmd \u003d (\u0027type-create %(name)s %(dhss)s --is-public %(is_public)s \u0027\n               \u0027--extra_specs snapshot_support\u003d%(snapshot_support)s \u0027\n               \u0027 replication_type\u003d%(replication_type)s\u0027 ) % {\n                   \u0027name\u0027: name, \u0027dhss\u0027: dhss, \u0027is_public\u0027: is_public,\n                   \u0027snapshot_support\u0027: snapshot_support,\n                   \u0027replication_type\u0027: replication_type}\n        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)\n        share_type_raw_multiline \u003d share_type_raw.split(\"\\n\")\n        for i in range(len(share_type_raw_multiline)):\n            if (\"optional_extra_specs\" in share_type_raw_multiline[i]):\n                index \u003d i\n                break\n\n        multiline_str \u003d share_type_raw_multiline[index+1].split(\"|\")\n        \n        \n        if multiline_str[1].strip() \u003d\u003d  \u0027\u0027:\n            multiline_str[1] \u003d \u0027 optional_extra_spec2 \u0027\n            join_str \u003d \"|\"\n            share_type_raw_multiline[index+1] \u003d join_str.join(multiline_str)\n        \n        join_str \u003d \"\\n\"\n        share_type_raw \u003d join_str.join(share_type_raw_multiline)\n        \n        share_type \u003d output_parser.details(share_type_raw, True)\n        \n        return share_type","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"92046dd28dff33c373524294929fa93c66f79adc","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # Share types"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def create_share_type(self, name\u003dNone, driver_handles_share_servers\u003dTrue,"},{"line_number":145,"context_line":"                          snapshot_support\u003dTrue, is_public\u003dTrue,"},{"line_number":146,"context_line":"                          microversion\u003dNone):"},{"line_number":147,"context_line":"        \"\"\"Creates share type."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        :param name: text -- name of share type to use, if not set then"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_c686db64","line":146,"range":{"start_line":144,"start_character":32,"end_line":146,"end_character":43},"in_reply_to":"dab17558_fb23fa02","updated":"2016-05-18 08:55:06.000000000","message":"Again, interface of this method is not changed when CLI has been changed. This one should have new \"extra-specs\" argument. And existing \"snapshot_support\" should be removed as you did in CLI.","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if not isinstance(is_public, six.string_types):"},{"line_number":162,"context_line":"            is_public \u003d six.text_type(is_public)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        extra_spec_str \u003d \u0027\u0027"},{"line_number":165,"context_line":"        if extra_specs is None:"},{"line_number":166,"context_line":"            extra_specs \u003d {}"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            for k, v in extra_specs.items():"},{"line_number":169,"context_line":"                if not isinstance(v, six.string_types):"},{"line_number":170,"context_line":"                    extra_specs[k] \u003d six.text_type(v)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"            extra_spec_str \u003d \u0027 \u0027.join(\u0027{}\u003d{}\u0027.format(key, val)"},{"line_number":173,"context_line":"                                      for key, val in extra_specs.items())"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        cmd \u003d (\u0027type-create %(name)s %(dhss)s --is-public %(is_public)s\u0027) % {"},{"line_number":176,"context_line":"            \u0027name\u0027: name, \u0027dhss\u0027: dhss, \u0027is_public\u0027: is_public}"},{"line_number":177,"context_line":"        cmd \u003d cmd + \" --extra_specs \" + extra_spec_str"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_40675a25","line":177,"range":{"start_line":164,"start_character":8,"end_line":177,"end_character":54},"updated":"2016-05-24 12:49:50.000000000","message":"Here, you always set \"--extra-specs\" option even if there is None. So it will result in \"manila type-create name %dhss_value% --extra_specs\" command and fail.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if not isinstance(is_public, six.string_types):"},{"line_number":162,"context_line":"            is_public \u003d six.text_type(is_public)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        extra_spec_str \u003d \u0027\u0027"},{"line_number":165,"context_line":"        if extra_specs is None:"},{"line_number":166,"context_line":"            extra_specs \u003d {}"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            for k, v in extra_specs.items():"},{"line_number":169,"context_line":"                if not isinstance(v, six.string_types):"},{"line_number":170,"context_line":"                    extra_specs[k] \u003d six.text_type(v)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"            extra_spec_str \u003d \u0027 \u0027.join(\u0027{}\u003d{}\u0027.format(key, val)"},{"line_number":173,"context_line":"                                      for key, val in extra_specs.items())"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        cmd \u003d (\u0027type-create %(name)s %(dhss)s --is-public %(is_public)s\u0027) % {"},{"line_number":176,"context_line":"            \u0027name\u0027: name, \u0027dhss\u0027: dhss, \u0027is_public\u0027: is_public}"},{"line_number":177,"context_line":"        cmd \u003d cmd + \" --extra_specs \" + extra_spec_str"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_1e8a91bf","line":177,"range":{"start_line":164,"start_character":8,"end_line":177,"end_character":54},"in_reply_to":"bab6814e_40675a25","updated":"2016-05-25 12:43:25.000000000","message":"will fix it.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        share_type_raw_multiline \u003d share_type_raw.split(\"\\n\")"},{"line_number":182,"context_line":"        extra_spec_arr \u003d []"},{"line_number":183,"context_line":"        found \u003d 0"},{"line_number":184,"context_line":"        for i in range(len(share_type_raw_multiline)):"},{"line_number":185,"context_line":"            if (\"optional_extra_specs\" in share_type_raw_multiline[i] or ("},{"line_number":186,"context_line":"                    found \u003d\u003d 1)) and \"|\" in share_type_raw_multiline[i]:"},{"line_number":187,"context_line":"                found \u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_55171a54","line":184,"range":{"start_line":184,"start_character":8,"end_line":184,"end_character":54},"updated":"2016-05-24 12:49:50.000000000","message":"for line in share_type_raw_multiline:\n    if (\"optional_extra_specs\" in line or (found \u003d\u003d 1)) and \"|\" in line:\n         found \u003d 1\n         ...","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        found \u003d 0"},{"line_number":184,"context_line":"        for i in range(len(share_type_raw_multiline)):"},{"line_number":185,"context_line":"            if (\"optional_extra_specs\" in share_type_raw_multiline[i] or ("},{"line_number":186,"context_line":"                    found \u003d\u003d 1)) and \"|\" in share_type_raw_multiline[i]:"},{"line_number":187,"context_line":"                found \u003d 1"},{"line_number":188,"context_line":"                multiline_str \u003d share_type_raw_multiline[i].split(\"|\")"},{"line_number":189,"context_line":"                if multiline_str[1].strip() in (\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_80ce62b2","line":186,"range":{"start_line":186,"start_character":37,"end_line":186,"end_character":71},"updated":"2016-05-24 12:49:50.000000000","message":"It is always True. Each line has symbol \"|\".","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1ffa5aabd1f876354c671ba9e63ea2dbb1af980e","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        found \u003d 0"},{"line_number":184,"context_line":"        for i in range(len(share_type_raw_multiline)):"},{"line_number":185,"context_line":"            if (\"optional_extra_specs\" in share_type_raw_multiline[i] or ("},{"line_number":186,"context_line":"                    found \u003d\u003d 1)) and \"|\" in share_type_raw_multiline[i]:"},{"line_number":187,"context_line":"                found \u003d 1"},{"line_number":188,"context_line":"                multiline_str \u003d share_type_raw_multiline[i].split(\"|\")"},{"line_number":189,"context_line":"                if multiline_str[1].strip() in (\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_6b05dec0","line":186,"range":{"start_line":186,"start_character":37,"end_line":186,"end_character":71},"in_reply_to":"bab6814e_3e2b1596","updated":"2016-05-25 12:55:00.000000000","message":"ok","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        found \u003d 0"},{"line_number":184,"context_line":"        for i in range(len(share_type_raw_multiline)):"},{"line_number":185,"context_line":"            if (\"optional_extra_specs\" in share_type_raw_multiline[i] or ("},{"line_number":186,"context_line":"                    found \u003d\u003d 1)) and \"|\" in share_type_raw_multiline[i]:"},{"line_number":187,"context_line":"                found \u003d 1"},{"line_number":188,"context_line":"                multiline_str \u003d share_type_raw_multiline[i].split(\"|\")"},{"line_number":189,"context_line":"                if multiline_str[1].strip() in (\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_3e2b1596","line":186,"range":{"start_line":186,"start_character":37,"end_line":186,"end_character":71},"in_reply_to":"bab6814e_80ce62b2","updated":"2016-05-25 12:43:25.000000000","message":"No each line doesnt have | as the last line of output is of this sort. this doesn\u0027t have | hence was the check.\n+------------+--------------------","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            if (\"optional_extra_specs\" in share_type_raw_multiline[i] or ("},{"line_number":186,"context_line":"                    found \u003d\u003d 1)) and \"|\" in share_type_raw_multiline[i]:"},{"line_number":187,"context_line":"                found \u003d 1"},{"line_number":188,"context_line":"                multiline_str \u003d share_type_raw_multiline[i].split(\"|\")"},{"line_number":189,"context_line":"                if multiline_str[1].strip() in (\u0027\u0027,"},{"line_number":190,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":191,"context_line":"                    extra_spec_arr.append(multiline_str[2])"},{"line_number":192,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":193,"context_line":"        return share_type, extra_spec_arr"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_818784d6","line":191,"range":{"start_line":188,"start_character":16,"end_line":191,"end_character":59},"updated":"2016-05-24 12:49:50.000000000","message":"Whole this logic should be done in parser. For the moment, until parser is smart enough we can create local wrapper that knows how to handle list of values for single key.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":191,"context_line":"                    extra_spec_arr.append(multiline_str[2])"},{"line_number":192,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":193,"context_line":"        return share_type, extra_spec_arr"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @not_found_wrapper"},{"line_number":196,"context_line":"    def delete_share_type(self, share_type, microversion\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_c6c0827f","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":41},"updated":"2016-05-24 12:49:50.000000000","message":"Why do you add second element instead of redefinition broken existing attr \"optional_extra_specs\" in \"share_type\" dict?","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":191,"context_line":"                    extra_spec_arr.append(multiline_str[2])"},{"line_number":192,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":193,"context_line":"        return share_type, extra_spec_arr"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @not_found_wrapper"},{"line_number":196,"context_line":"    def delete_share_type(self, share_type, microversion\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_f9d88781","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":41},"in_reply_to":"bab6814e_c6c0827f","updated":"2016-05-25 12:43:25.000000000","message":"IF i understand correctly, you are saying that instead of creating a 2nd element, i shud i have redefined optional_extra_specs in the share_type output itself?\n\n\nAs number of optional args were varying, changing it in the output was not coming as a clean code. separating it out i found better. what do you say ?","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1ffa5aabd1f876354c671ba9e63ea2dbb1af980e","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":191,"context_line":"                    extra_spec_arr.append(multiline_str[2])"},{"line_number":192,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":193,"context_line":"        return share_type, extra_spec_arr"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @not_found_wrapper"},{"line_number":196,"context_line":"    def delete_share_type(self, share_type, microversion\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_8b9c825e","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":41},"in_reply_to":"bab6814e_f9d88781","updated":"2016-05-25 12:55:00.000000000","message":"Yes, update \"share-type\" object.\n\nI am not sure I understand second question.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8508157fa8fe399bc69eee0aca34157716e42c1a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":189,"context_line":"                    optional_extra_specs_multi.append(multiline_str[2])"},{"line_number":190,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":191,"context_line":"        share_type[\u0027optional_extra_specs_multi\u0027] \u003d optional_extra_specs_multi"},{"line_number":192,"context_line":"        return share_type"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @not_found_wrapper"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_b88914cd","line":191,"range":{"start_line":191,"start_character":40,"end_line":191,"end_character":46},"updated":"2016-07-04 10:00:47.000000000","message":"How to understand this \"multi\" part?","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"96c5c8ccdf7c49cdc3bb62975f4ee1a7eae35681","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":189,"context_line":"                    optional_extra_specs_multi.append(multiline_str[2])"},{"line_number":190,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":191,"context_line":"        share_type[\u0027optional_extra_specs_multi\u0027] \u003d optional_extra_specs_multi"},{"line_number":192,"context_line":"        return share_type"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @not_found_wrapper"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_57b2c806","line":191,"range":{"start_line":191,"start_character":40,"end_line":191,"end_character":46},"in_reply_to":"1aa78d24_117a3e88","updated":"2016-07-13 08:48:01.000000000","message":"optional_extra_specs is the key already present in dict already.\ndo you say to overwrite it ? \noptional_extra_specs key\u0027s value is a multiline text - but optional_extra_specs_multi \u0027s value is an array","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"fd7a6be148c5c9ba8c2831af33af33f87c0e2113","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":189,"context_line":"                    optional_extra_specs_multi.append(multiline_str[2])"},{"line_number":190,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":191,"context_line":"        share_type[\u0027optional_extra_specs_multi\u0027] \u003d optional_extra_specs_multi"},{"line_number":192,"context_line":"        return share_type"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @not_found_wrapper"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_117a3e88","line":191,"range":{"start_line":191,"start_character":40,"end_line":191,"end_character":46},"in_reply_to":"1aa78d24_2572fdad","updated":"2016-07-12 13:03:32.000000000","message":"Why you do not use original name that is \"optional_extra_specs\"?","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"114c7742a387cf97ba43e75fd901af598252b2ab","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":189,"context_line":"                    optional_extra_specs_multi.append(multiline_str[2])"},{"line_number":190,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":191,"context_line":"        share_type[\u0027optional_extra_specs_multi\u0027] \u003d optional_extra_specs_multi"},{"line_number":192,"context_line":"        return share_type"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @not_found_wrapper"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_c3743537","line":191,"range":{"start_line":191,"start_character":40,"end_line":191,"end_character":46},"in_reply_to":"1aa78d24_57b2c806","updated":"2016-07-13 11:41:33.000000000","message":"I have two workable options, \n\n1) is to return the parsed output, which is a list, as 2nd return value and not changing the share_type dict.\nsimilar to https://review.openstack.org/#/c/315012/5/manilaclient/tests/functional/client.py\n\n2)is by adding a new key to share_type dict.\ni can\u0027t think of a better new key name. Kindly suggest if any.\n\nIf i use same key \u0027optional_extra_spec\u0027 for storing optional_extra_specs_multi list, i will lose the text present there(which in anyway was a not complete text), instead i will get new parsed list at  share_type[\u0027optional_extra_specs\u0027]. i hope its fine.\n\nAny other test if using same create_share_type() from client.py, can obtain the complete list of optional extra specs from same place as earlier.","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"cddd4dced52985107f086e01870a2f328d71bf9b","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                                \u0027optional_extra_specs\u0027):"},{"line_number":189,"context_line":"                    optional_extra_specs_multi.append(multiline_str[2])"},{"line_number":190,"context_line":"        share_type \u003d output_parser.details(share_type_raw, True)"},{"line_number":191,"context_line":"        share_type[\u0027optional_extra_specs_multi\u0027] \u003d optional_extra_specs_multi"},{"line_number":192,"context_line":"        return share_type"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @not_found_wrapper"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_2572fdad","line":191,"range":{"start_line":191,"start_character":40,"end_line":191,"end_character":46},"in_reply_to":"1aa78d24_b88914cd","updated":"2016-07-05 04:18:09.000000000","message":"Okay.. Valeriy, Can you please suggest me what name should be given to this variable?","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d027113a6f4463ccc3c68b1291cd4dcf2cacbae1","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                if not isinstance(v, six.string_types):"},{"line_number":179,"context_line":"                    extra_specs[k] \u003d six.text_type(v)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"            extra_spec_str \u003d \u0027 \u0027.join(\u0027{}\u003d{}\u0027.format(key, val)"},{"line_number":182,"context_line":"                                      for key, val in extra_specs.items())"},{"line_number":183,"context_line":"            cmd \u003d cmd + \" --extra_specs \" + extra_spec_str"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_1ff0b490","line":182,"range":{"start_line":181,"start_character":12,"end_line":182,"end_character":74},"updated":"2016-08-04 16:31:39.000000000","message":"It could be a part of previous iteration.","commit_id":"83ecf5daa8fd289514a9cde7d81886ca9660e8df"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        if snapshot_support is not None:"},{"line_number":171,"context_line":"            if not isinstance(snapshot_support, six.string_types):"},{"line_number":172,"context_line":"                snapshot_support \u003d six.text_type(snapshot_support)"},{"line_number":173,"context_line":"                cmd \u003d cmd + \" --snapshot-support \" + snapshot_support"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        if extra_specs is not None:"},{"line_number":176,"context_line":"            extra_spec_str \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_2a22c301","line":173,"range":{"start_line":173,"start_character":16,"end_line":173,"end_character":69},"updated":"2016-09-01 10:04:24.000000000","message":"cmd +\u003d \" --snapshot-support \" + snapshot_support","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            for k, v in extra_specs.items():"},{"line_number":178,"context_line":"                if not isinstance(v, six.string_types):"},{"line_number":179,"context_line":"                    extra_specs[k] \u003d six.text_type(v)"},{"line_number":180,"context_line":"                extra_spec_str \u003d extra_spec_str + \"{}\u003d\u0027{}\u0027 \".format(k, v)"},{"line_number":181,"context_line":"            cmd \u003d cmd + \" --extra_specs \" + extra_spec_str"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_7f600f36","line":180,"range":{"start_line":180,"start_character":16,"end_line":180,"end_character":73},"updated":"2016-09-01 10:04:24.000000000","message":"extra_spec_str +\u003d \"{}\u003d\u0027{}\u0027 \".format(k, v)\n\nor\n\nextra_spec_str +\u003d \"%s\u003d\u0027%s\u0027 \" % (k, v)","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                if not isinstance(v, six.string_types):"},{"line_number":179,"context_line":"                    extra_specs[k] \u003d six.text_type(v)"},{"line_number":180,"context_line":"                extra_spec_str \u003d extra_spec_str + \"{}\u003d\u0027{}\u0027 \".format(k, v)"},{"line_number":181,"context_line":"            cmd \u003d cmd + \" --extra_specs \" + extra_spec_str"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        share_type_raw \u003d self.manila(cmd, microversion\u003dmicroversion)"},{"line_number":184,"context_line":"        share_type \u003d utils.details(share_type_raw)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_2a69e325","line":181,"range":{"start_line":181,"start_character":12,"end_line":181,"end_character":58},"updated":"2016-09-01 10:04:24.000000000","message":"cmd +\u003d \" --extra_specs \" + extra_spec_str","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"}],"manilaclient/tests/functional/test_share_types.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2603ff218a2931f8bb62dac4183e0c2a36d8aebf","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            self.assertIn(key, share_type)"},{"line_number":115,"context_line":"        self.assertEqual(share_type_name, share_type[\u0027Name\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":117,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":118,"context_line":"        self.assertEqual(\u0027public\u0027 if is_public else \u0027private\u0027,"},{"line_number":119,"context_line":"                         share_type[\u0027Visibility\u0027].lower())"},{"line_number":120,"context_line":"        self.assertEqual(\u0027-\u0027, share_type[\u0027is_default\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_cf8a391a","line":117,"range":{"start_line":117,"start_character":2,"end_line":117,"end_character":8},"updated":"2016-05-13 08:56:09.000000000","message":"Add a check about snapshot_support. The key is not right(code line 168.       https://review.openstack.org/#/c/315012/3/manilaclient/tests/functional/client.py ), but the test did not check out.","commit_id":"1a663a8b2e7d4b575e9e0f81445e4a49ad8bd958"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"f4d7d213c29d3df624d295767fa6f938b410a0cb","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            self.assertIn(key, share_type)"},{"line_number":115,"context_line":"        self.assertEqual(share_type_name, share_type[\u0027Name\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":117,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":118,"context_line":"        self.assertEqual(\u0027public\u0027 if is_public else \u0027private\u0027,"},{"line_number":119,"context_line":"                         share_type[\u0027Visibility\u0027].lower())"},{"line_number":120,"context_line":"        self.assertEqual(\u0027-\u0027, share_type[\u0027is_default\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_355d137a","line":117,"range":{"start_line":117,"start_character":2,"end_line":117,"end_character":8},"in_reply_to":"dab17558_72c4d691","updated":"2016-05-13 10:54:13.000000000","message":"I am finding it a little difficult here to assert for snapshot_support and replication_type values here.\n\nas the cli output is multiple line, \n optional_extra_specs field, for type_create.\n\nNow when we create a type from this test function and parse the cli output, using output_parser.details(it splits string on \"\\n\") i dont get the two extra specs in share_type[\u0027optional_extra_specs\"].\n\nInstead i get share_type[\u0027optional_extra_specs\u0027] \u003d \u0027snapshot_support\u0027 : True \nand i get share_type[\u0027\u0027] \u003d \u0027replication_type\u0027 : \u0027unknown\u0027\n\nAm trying to think some way to tackle it.. any ideas?","commit_id":"1a663a8b2e7d4b575e9e0f81445e4a49ad8bd958"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b70f553fbfde12054578d6ada1b55ae9aad7f9ab","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            self.assertIn(key, share_type)"},{"line_number":115,"context_line":"        self.assertEqual(share_type_name, share_type[\u0027Name\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":117,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":118,"context_line":"        self.assertEqual(\u0027public\u0027 if is_public else \u0027private\u0027,"},{"line_number":119,"context_line":"                         share_type[\u0027Visibility\u0027].lower())"},{"line_number":120,"context_line":"        self.assertEqual(\u0027-\u0027, share_type[\u0027is_default\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_72c4d691","line":117,"range":{"start_line":117,"start_character":2,"end_line":117,"end_character":8},"in_reply_to":"dab17558_cf8a391a","updated":"2016-05-13 09:16:15.000000000","message":"In other words, The \"snapshot_support\u003dtrue\"(False, True, True, \"2.7\") and  \"snapshot_support\u003dfalse\"(False, True, False, \"2.6\") test can not be checked.","commit_id":"1a663a8b2e7d4b575e9e0f81445e4a49ad8bd958"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4eb13d2bd4ebdf6739564beaa1ee291ff443dd71","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        (False, True, False, \"2.6\"),"},{"line_number":89,"context_line":"        (False, False, True, \"2.7\"),"},{"line_number":90,"context_line":"    )"},{"line_number":91,"context_line":"    @ddt.unpack"},{"line_number":92,"context_line":"    def test_create_delete_share_type(self, is_public, dhss,"},{"line_number":93,"context_line":"                                      snapshot_support\u003dTrue,"},{"line_number":94,"context_line":"                                      microversion\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_3bcc9469","line":91,"updated":"2016-05-16 12:03:02.000000000","message":"You changes to share types create command are not covered with functional tests at all.","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"7ca9c06c4397bc792eb1267bbfc7e3a5fa69b0d1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        (False, True, False, \"2.6\"),"},{"line_number":89,"context_line":"        (False, False, True, \"2.7\"),"},{"line_number":90,"context_line":"    )"},{"line_number":91,"context_line":"    @ddt.unpack"},{"line_number":92,"context_line":"    def test_create_delete_share_type(self, is_public, dhss,"},{"line_number":93,"context_line":"                                      snapshot_support\u003dTrue,"},{"line_number":94,"context_line":"                                      microversion\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_9b33ce13","line":91,"in_reply_to":"dab17558_3bcc9469","updated":"2016-05-17 08:36:28.000000000","message":"self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)\n        self.assertEqual(snapshot_support_expected, share_type[\u0027optional_extra_specs\u0027])\n        self.assertEqual(replication_type_expected, share_type[\u0027optional_extra_spec2\u0027])","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"92046dd28dff33c373524294929fa93c66f79adc","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        (False, True, False, \"2.6\"),"},{"line_number":89,"context_line":"        (False, False, True, \"2.7\"),"},{"line_number":90,"context_line":"    )"},{"line_number":91,"context_line":"    @ddt.unpack"},{"line_number":92,"context_line":"    def test_create_delete_share_type(self, is_public, dhss,"},{"line_number":93,"context_line":"                                      snapshot_support\u003dTrue,"},{"line_number":94,"context_line":"                                      microversion\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_c651bb10","line":91,"in_reply_to":"dab17558_9b33ce13","updated":"2016-05-18 08:55:06.000000000","message":"Your changes implement possibility to set any key-value pair (extra specs) via \"type-create\" command. And it is not tested. And I am completely confused by such comments.","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            self.assertIn(key, share_type)"},{"line_number":128,"context_line":"        self.assertEqual(share_type_name, share_type[\u0027Name\u0027])"},{"line_number":129,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":130,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for ex_spec in expected_extra_spec:"},{"line_number":133,"context_line":"            self.assertTrue(any(ex_spec \u003d\u003d e.strip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_5be8eb16","line":130,"range":{"start_line":130,"start_character":24,"end_line":130,"end_character":70},"updated":"2016-05-24 12:49:50.000000000","message":"Here you compare list to integer. It is always True in py2.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            self.assertIn(key, share_type)"},{"line_number":128,"context_line":"        self.assertEqual(share_type_name, share_type[\u0027Name\u0027])"},{"line_number":129,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":130,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for ex_spec in expected_extra_spec:"},{"line_number":133,"context_line":"            self.assertTrue(any(ex_spec \u003d\u003d e.strip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_19962b4c","line":130,"range":{"start_line":130,"start_character":24,"end_line":130,"end_character":70},"in_reply_to":"bab6814e_5be8eb16","updated":"2016-05-25 12:43:25.000000000","message":"will fix it.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":130,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for ex_spec in expected_extra_spec:"},{"line_number":133,"context_line":"            self.assertTrue(any(ex_spec \u003d\u003d e.strip()"},{"line_number":134,"context_line":"                                for e in extra_spec_arr))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.assertEqual(\u0027public\u0027 if is_public else \u0027private\u0027,"},{"line_number":137,"context_line":"                         share_type[\u0027Visibility\u0027].lower())"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_5bd2ab35","line":134,"range":{"start_line":132,"start_character":8,"end_line":134,"end_character":57},"updated":"2016-05-24 12:49:50.000000000","message":"Here you do cycle in cycle. Better to do something following:\n\n\"\"\"\nself.assertEqual(len(expected_list), len(actual_list))\nfor actual_datum in actual_list:\n    self.assertIn(actual_datum.strip(), expected_list)\n\"\"\"","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(dhss_expected, share_type[\u0027required_extra_specs\u0027])"},{"line_number":130,"context_line":"        self.assertTrue(share_type.get(\u0027optional_extra_specs\u0027, []) \u003e 0)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for ex_spec in expected_extra_spec:"},{"line_number":133,"context_line":"            self.assertTrue(any(ex_spec \u003d\u003d e.strip()"},{"line_number":134,"context_line":"                                for e in extra_spec_arr))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.assertEqual(\u0027public\u0027 if is_public else \u0027private\u0027,"},{"line_number":137,"context_line":"                         share_type[\u0027Visibility\u0027].lower())"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_197d8b1c","line":134,"range":{"start_line":132,"start_character":8,"end_line":134,"end_character":57},"in_reply_to":"bab6814e_5bd2ab35","updated":"2016-05-25 12:43:25.000000000","message":"okay thanks for suggestion.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8508157fa8fe399bc69eee0aca34157716e42c1a","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            st[\u0027ID\u0027], microversion\u003dmicroversion)"},{"line_number":277,"context_line":"        self.assertNotIn(\u0027foo_key : foo_value\u0027, extra_specs)"},{"line_number":278,"context_line":"        self.assertIn(\u0027bar_key : bar_value\u0027, extra_specs)"},{"line_number":279,"context_line":"        self.assertIn(\u0027driver_handles_share_servers : %s\u0027 % dhss, extra_specs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_d8aa2070","side":"PARENT","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":78},"updated":"2016-07-04 10:00:47.000000000","message":"Why it is removed?","commit_id":"80fc72a72aaf0473d59bb989b93365b61de61bad"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2c9fa83c2d7b666fb31203b60d466eedf47df00e","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            st[\u0027ID\u0027], microversion\u003dmicroversion)"},{"line_number":277,"context_line":"        self.assertNotIn(\u0027foo_key : foo_value\u0027, extra_specs)"},{"line_number":278,"context_line":"        self.assertIn(\u0027bar_key : bar_value\u0027, extra_specs)"},{"line_number":279,"context_line":"        self.assertIn(\u0027driver_handles_share_servers : %s\u0027 % dhss, extra_specs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_a5e38d32","side":"PARENT","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":78},"in_reply_to":"1aa78d24_d8aa2070","updated":"2016-07-05 08:12:21.000000000","message":"that was by mistake removed. Thanks for pointing","commit_id":"80fc72a72aaf0473d59bb989b93365b61de61bad"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"647509c9f473ad93f04047107d71287faec4698d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                              \u0027foo\u0027: \u0027bar\u0027,"},{"line_number":98,"context_line":"                              \u0027foo2\u0027: \u0027abcd\u0027}),"},{"line_number":99,"context_line":"        (False, True, True, {\u0027foo2\u0027: \u0027abcd\u0027}),"},{"line_number":100,"context_line":"        (False, True, False, {\u0027foo2\u0027: \u0027abcd\u0027}),"},{"line_number":101,"context_line":"    )"},{"line_number":102,"context_line":"    @ddt.unpack"},{"line_number":103,"context_line":"    def test_create_delete_share_type(self, is_public, dhss,"},{"line_number":104,"context_line":"                                      spec_snapshot_support\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_26070919","line":101,"range":{"start_line":100,"start_character":47,"end_line":101,"end_character":5},"updated":"2016-08-30 03:31:38.000000000","message":"Please add the test about {\u0027capabilities:dedupe\u0027: \u0027\u003cis\u003e True\u0027}","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"}],"manilaclient/tests/unit/v2/fakes.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":715,"context_line":""},{"line_number":716,"context_line":"    def post_types(self, body, **kw):"},{"line_number":717,"context_line":"        share_type \u003d body[\u0027share_type\u0027]"},{"line_number":718,"context_line":"        required_extra_specs \u003d {\"driver_handles_share_servers\": share_type["},{"line_number":719,"context_line":"            \u0027extra_specs\u0027][\u0027driver_handles_share_servers\u0027]}"},{"line_number":720,"context_line":"        return (202, {}, {"},{"line_number":721,"context_line":"            \u0027share_type\u0027: {"},{"line_number":722,"context_line":"                \u0027id\u0027: 3,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_cfe7dbe2","line":719,"range":{"start_line":718,"start_character":8,"end_line":719,"end_character":59},"updated":"2016-08-26 14:05:37.000000000","message":"wrapping\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"}],"manilaclient/tests/unit/v2/test_types.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"647509c9f473ad93f04047107d71287faec4698d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            \"share_type\": {"},{"line_number":103,"context_line":"                \"name\": \u0027test-type-3\u0027,"},{"line_number":104,"context_line":"                \u0027share_type_access:is_public\u0027: is_public,"},{"line_number":105,"context_line":"                \"extra_specs\": expected_extra_specs"},{"line_number":106,"context_line":"            }"},{"line_number":107,"context_line":"        }"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_c6bf3da8","line":105,"range":{"start_line":105,"start_character":50,"end_line":105,"end_character":51},"updated":"2016-08-30 03:31:38.000000000","message":"trailing comma","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"}],"manilaclient/v2/share_types.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4eb13d2bd4ebdf6739564beaa1ee291ff443dd71","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self._optional_extra_specs \u003d {"},{"line_number":33,"context_line":"            \u0027snapshot_support\u0027: info.get(\u0027extra_specs\u0027, {}).get("},{"line_number":34,"context_line":"                \u0027snapshot_support\u0027, \u0027unknown\u0027),"},{"line_number":35,"context_line":"            \u0027replication_type\u0027: info.get(\u0027extra_specs\u0027, {}).get("},{"line_number":36,"context_line":"                \u0027replication_type\u0027, \u0027unknown\u0027),"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __repr__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_5b1518e3","line":36,"range":{"start_line":35,"start_character":12,"end_line":36,"end_character":47},"updated":"2016-05-16 12:03:02.000000000","message":"Why it is set?","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"92046dd28dff33c373524294929fa93c66f79adc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self._optional_extra_specs \u003d {"},{"line_number":33,"context_line":"            \u0027snapshot_support\u0027: info.get(\u0027extra_specs\u0027, {}).get("},{"line_number":34,"context_line":"                \u0027snapshot_support\u0027, \u0027unknown\u0027),"},{"line_number":35,"context_line":"            \u0027replication_type\u0027: info.get(\u0027extra_specs\u0027, {}).get("},{"line_number":36,"context_line":"                \u0027replication_type\u0027, \u0027unknown\u0027),"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __repr__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_c63b7b9b","line":36,"range":{"start_line":35,"start_character":12,"end_line":36,"end_character":47},"in_reply_to":"dab17558_5b1518e3","updated":"2016-05-18 08:55:06.000000000","message":"I am asking because it has no relation to the goal of commit at all. You implement possibility to set any key-value pairs.","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4eb13d2bd4ebdf6739564beaa1ee291ff443dd71","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @api_versions.wraps(\"1.0\", \"2.6\")"},{"line_number":160,"context_line":"    def create(self, name, spec_driver_handles_share_servers,"},{"line_number":161,"context_line":"               extra_specs\u003d{}, is_public\u003dTrue):"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":164,"context_line":"            extra_specs[\u0027snapshot_support\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_1b955086","line":161,"range":{"start_line":161,"start_character":27,"end_line":161,"end_character":29},"updated":"2016-05-16 12:03:02.000000000","message":"Usage of mutable object as default value is very dangerous.\n\nSee http://docs.python-guide.org/en/latest/writing/gotchas/\n\nSame below.","commit_id":"d1de07a9fc63aa93c7717ca48e2641df26615344"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"aba23cbdca619b744f442d01993be7a1563f65a1","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, manager, info, loaded\u003dFalse):"},{"line_number":30,"context_line":"        super(ShareType, self).__init__(manager, info, loaded)"},{"line_number":31,"context_line":"        self._required_extra_specs \u003d info.get(\u0027required_extra_specs\u0027, {})"},{"line_number":32,"context_line":"        self._optional_extra_specs \u003d info.get(\u0027extra_specs\u0027, {})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __repr__(self):"},{"line_number":35,"context_line":"        return \"\u003cShareType: %s\u003e\" % self.name"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_1178f6c3","line":32,"range":{"start_line":31,"start_character":8,"end_line":32,"end_character":64},"updated":"2016-05-28 13:55:24.000000000","message":"In info dict, the \u0027driver_handles_share_servers\u0027 always exist in \u0027required_extra_specs\u0027 and \u0027extra_specs\u0027.\nSo it will lead to \u0027manila type-create\u0027 command echo error: the \u0027driver_handles_share_servers\u0027 always in \u0027optional_extra_specs\u0027.\nWe should remove the required_extra_specs from extra_specs.\n\"\"\"\"\"\"\nself._optional_extra_specs \u003d info.get(\u0027extra_specs\u0027, {})\nfor key in self._required_extra_specs.keys():\n    self._optional_extra_specs.pop(key)\n\"\"\"\"\"\n\ninfo:\n{u\u0027required_extra_specs\u0027: {u\u0027driver_handles_share_servers\u0027: True}, u\u0027extra_specs\u0027: {u\u0027snapshot_support\u0027: u\u0027True\u0027, u\u0027test\u0027: u\u0027true\u0027, u\u0027driver_handles_share_servers\u0027: u\u0027True\u0027}, u\u0027share_type_access:is_public\u0027: True, u\u0027id\u0027: u\u0027142fe359-8ea4-46f5-8f99-1c75228ac50f\u0027, u\u0027name\u0027: u\u0027del_zj2\u0027}","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8a253d10585534d411eca0a012efd7096c8a5ea4","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        return self._create(\"/types\", body, \"share_type\")"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @api_versions.wraps(\"1.0\", \"2.6\")"},{"line_number":155,"context_line":"    def create(self, name, spec_driver_handles_share_servers,"},{"line_number":156,"context_line":"               extra_specs\u003dNone, is_public\u003dTrue):"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if extra_specs is None:"},{"line_number":159,"context_line":"            extra_specs \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_065f2a0f","line":156,"range":{"start_line":155,"start_character":4,"end_line":156,"end_character":49},"updated":"2016-05-24 12:49:50.000000000","message":"It is interface, and we cannot just get and change it. It is ok to add new option \"extra_specs\", but old \"snapshot_support\" should stay. Then just combine logic of old and new options.\n\nAlso, need to add note with deprecation for that optional key that its usage should be reduced to zero.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"26c38da39024a8b86f0c4d36f8f0c0fde8908c3c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        return self._create(\"/types\", body, \"share_type\")"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @api_versions.wraps(\"1.0\", \"2.6\")"},{"line_number":155,"context_line":"    def create(self, name, spec_driver_handles_share_servers,"},{"line_number":156,"context_line":"               extra_specs\u003dNone, is_public\u003dTrue):"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if extra_specs is None:"},{"line_number":159,"context_line":"            extra_specs \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_d9fe636a","line":156,"range":{"start_line":155,"start_character":4,"end_line":156,"end_character":49},"in_reply_to":"bab6814e_065f2a0f","updated":"2016-05-25 12:43:25.000000000","message":"okay.","commit_id":"2eb6c7f2121bf2665b6b28ba1fe6a0739a3b6688"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"26377a991ac82277e7e13b6587c0045ddecfbaab","unresolved":false,"context_lines":[{"line_number":175,"context_line":"               spec_snapshot_support\u003dTrue, extra_specs\u003dNone,"},{"line_number":176,"context_line":"               is_public\u003dTrue):"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        if extra_specs is None:"},{"line_number":179,"context_line":"            extra_specs \u003d {}"},{"line_number":180,"context_line":"            extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":181,"context_line":"        else:"},{"line_number":182,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":183,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        return self._do_create("},{"line_number":186,"context_line":"            name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_8cad71eb","line":183,"range":{"start_line":178,"start_character":8,"end_line":183,"end_character":71},"updated":"2016-06-30 10:21:08.000000000","message":"It should be defined only once and in \"_do_create\" method. Do not do code duplication when it can be avoided.","commit_id":"f18de38e2203bffecba8a88207dfa9725407b911"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8508157fa8fe399bc69eee0aca34157716e42c1a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if extra_specs is None:"},{"line_number":142,"context_line":"            extra_specs \u003d {}"},{"line_number":143,"context_line":"            extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_38824453","line":143,"range":{"start_line":142,"start_character":12,"end_line":143,"end_character":67},"updated":"2016-07-04 10:00:47.000000000","message":"It could be one line:\n\n\"\"\"\n\nextra_specs \u003d {\"snapshot_support\": spec_snapshot_support}\n\n\"\"\"","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2c9fa83c2d7b666fb31203b60d466eedf47df00e","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if extra_specs is None:"},{"line_number":142,"context_line":"            extra_specs \u003d {}"},{"line_number":143,"context_line":"            extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_65c0857d","line":143,"range":{"start_line":142,"start_character":12,"end_line":143,"end_character":67},"in_reply_to":"1aa78d24_38824453","updated":"2016-07-05 08:12:21.000000000","message":"Done","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"8508157fa8fe399bc69eee0aca34157716e42c1a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":149,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_f8039cb6","line":148,"range":{"start_line":148,"start_character":21,"end_line":148,"end_character":49},"updated":"2016-07-04 10:00:47.000000000","message":"No check for presence of that key in \"extra_specs\". Also, maybe better to name this new argument as \"optional_extra_specs\". In that case it will spill the light on the cause for excluding \"driver_handles_share_servers\" spec from this dict.","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"114c7742a387cf97ba43e75fd901af598252b2ab","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":149,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_20424f0f","line":148,"range":{"start_line":148,"start_character":21,"end_line":148,"end_character":49},"in_reply_to":"1aa78d24_274a7355","updated":"2016-07-13 11:41:33.000000000","message":"will do so in next patch","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"96c5c8ccdf7c49cdc3bb62975f4ee1a7eae35681","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":149,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_274a7355","line":148,"range":{"start_line":148,"start_character":21,"end_line":148,"end_character":49},"in_reply_to":"1aa78d24_921d91c0","updated":"2016-07-13 08:48:01.000000000","message":"ok.. got it, will change the name of dict to optional_extra_specs","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c9956675d23598c3924bd197e5169e85b68dd59f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":149,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_921d91c0","line":148,"range":{"start_line":148,"start_character":21,"end_line":148,"end_character":49},"in_reply_to":"1aa78d24_de5adf29","updated":"2016-07-12 12:51:24.000000000","message":"Manilaclient provides two interfaces - \"CLI\" and \"python\" clients. And using python client we are able to get two values for that spec. It should be handled here.","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2c9fa83c2d7b666fb31203b60d466eedf47df00e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":146,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":149,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_de5adf29","line":148,"range":{"start_line":148,"start_character":21,"end_line":148,"end_character":49},"in_reply_to":"1aa78d24_f8039cb6","updated":"2016-07-05 08:12:21.000000000","message":"As per the check placed in manilaclient/v2/shell.py \u0027extra_spec\u0027 can not contain key \u0027driver_handles_share_servers\u0027. It will give command error in shell.py itself.\n\nas \u0027driver_handles_share_servers\u0027 a mandatory arg, its not allowed to be respecified in extra_spec.","commit_id":"6ae3c3cb6126c2dc78b4b48f8c7250427b326e89"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"51f902726c881db90f11d86cb10a364bb668ca89","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :param name: Descriptive name of the share type"},{"line_number":139,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if extra_specs is None:"},{"line_number":142,"context_line":"            extra_specs \u003d {\"snapshot_support\": spec_snapshot_support}"},{"line_number":143,"context_line":"        else:"},{"line_number":144,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":145,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":148,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        body \u003d {"},{"line_number":151,"context_line":"            \"share_type\": {"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_b1b08a44","line":148,"range":{"start_line":141,"start_character":8,"end_line":148,"end_character":46},"updated":"2016-07-12 13:08:43.000000000","message":"See comment in PS9 [1].\n\n[1] https://review.openstack.org/#/c/315012/9/manilaclient/v2/share_types.py","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2d81de221b6e7b2da233b4e5e5da899d90f3cb18","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :param name: Descriptive name of the share type"},{"line_number":139,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if extra_specs is None:"},{"line_number":142,"context_line":"            extra_specs \u003d {\"snapshot_support\": spec_snapshot_support}"},{"line_number":143,"context_line":"        else:"},{"line_number":144,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":145,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":148,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        body \u003d {"},{"line_number":151,"context_line":"            \"share_type\": {"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_f72f74f3","line":148,"range":{"start_line":141,"start_character":8,"end_line":148,"end_character":46},"in_reply_to":"1aa78d24_77ce122e","updated":"2016-07-13 08:46:53.000000000","message":"Where?","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"575cd5d4eb3e6485e3e400b8d55ef1fc9c056bbc","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :param name: Descriptive name of the share type"},{"line_number":139,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if extra_specs is None:"},{"line_number":142,"context_line":"            extra_specs \u003d {\"snapshot_support\": spec_snapshot_support}"},{"line_number":143,"context_line":"        else:"},{"line_number":144,"context_line":"            if \u0027snapshot_support\u0027 not in extra_specs:"},{"line_number":145,"context_line":"                extra_specs[\u0027snapshot_support\u0027] \u003d spec_snapshot_support"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":148,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        body \u003d {"},{"line_number":151,"context_line":"            \"share_type\": {"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_77ce122e","line":148,"range":{"start_line":141,"start_character":8,"end_line":148,"end_character":46},"in_reply_to":"1aa78d24_b1b08a44","updated":"2016-07-12 13:46:54.000000000","message":"Done","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"51f902726c881db90f11d86cb10a364bb668ca89","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @api_versions.wraps(\"1.0\", \"2.6\")"},{"line_number":161,"context_line":"    def create(self, name, spec_driver_handles_share_servers,"},{"line_number":162,"context_line":"               spec_snapshot_support\u003dTrue, extra_specs\u003dNone,"},{"line_number":163,"context_line":"               is_public\u003dTrue):"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._do_create("}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_312dba46","line":162,"range":{"start_line":162,"start_character":43,"end_line":162,"end_character":60},"updated":"2016-07-12 13:08:43.000000000","message":"Better to add this new argument after current last one. In this case we will be sure we didn\u0027t break anyone. For the moment someone could use \"python\" mainlaclient calling it using positional arguments. Same below.","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"575cd5d4eb3e6485e3e400b8d55ef1fc9c056bbc","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @api_versions.wraps(\"1.0\", \"2.6\")"},{"line_number":161,"context_line":"    def create(self, name, spec_driver_handles_share_servers,"},{"line_number":162,"context_line":"               spec_snapshot_support\u003dTrue, extra_specs\u003dNone,"},{"line_number":163,"context_line":"               is_public\u003dTrue):"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._do_create("}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_37c80a22","line":162,"range":{"start_line":162,"start_character":43,"end_line":162,"end_character":60},"in_reply_to":"1aa78d24_312dba46","updated":"2016-07-12 13:46:54.000000000","message":"Done","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2d81de221b6e7b2da233b4e5e5da899d90f3cb18","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @api_versions.wraps(\"1.0\", \"2.6\")"},{"line_number":161,"context_line":"    def create(self, name, spec_driver_handles_share_servers,"},{"line_number":162,"context_line":"               spec_snapshot_support\u003dTrue, extra_specs\u003dNone,"},{"line_number":163,"context_line":"               is_public\u003dTrue):"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._do_create("}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_570ac879","line":162,"range":{"start_line":162,"start_character":43,"end_line":162,"end_character":60},"in_reply_to":"1aa78d24_37c80a22","updated":"2016-07-13 08:46:53.000000000","message":"Where?","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"77ee4e859d3fd997e43994dd7a7949a7f6e8f552","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def __init__(self, manager, info, loaded\u003dFalse):"},{"line_number":30,"context_line":"        super(ShareType, self).__init__(manager, info, loaded)"},{"line_number":31,"context_line":"        self._required_extra_specs \u003d info.get(\u0027required_extra_specs\u0027, {})"},{"line_number":32,"context_line":"        self._optional_extra_specs \u003d dict(info.get(\u0027extra_specs\u0027, {}))"},{"line_number":33,"context_line":"        for key in self._required_extra_specs.keys():"},{"line_number":34,"context_line":"            self._optional_extra_specs.pop(key, None)"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_e8a806de","line":32,"range":{"start_line":32,"start_character":37,"end_line":32,"end_character":42},"updated":"2016-07-22 10:58:42.000000000","message":"Why do you use \"dict(...)\" translation when it is already dict in any case?","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2e63cec33e4438f196dd81ac6c3e1d4c27425ba8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def __init__(self, manager, info, loaded\u003dFalse):"},{"line_number":30,"context_line":"        super(ShareType, self).__init__(manager, info, loaded)"},{"line_number":31,"context_line":"        self._required_extra_specs \u003d info.get(\u0027required_extra_specs\u0027, {})"},{"line_number":32,"context_line":"        self._optional_extra_specs \u003d dict(info.get(\u0027extra_specs\u0027, {}))"},{"line_number":33,"context_line":"        for key in self._required_extra_specs.keys():"},{"line_number":34,"context_line":"            self._optional_extra_specs.pop(key, None)"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_bc4db09b","line":32,"range":{"start_line":32,"start_character":37,"end_line":32,"end_character":42},"in_reply_to":"dada55a8_e8a806de","updated":"2016-07-25 05:16:24.000000000","message":"If i dont do that, in that case,  self._optional_extra_specs  will be referring to same dict as original dict, instead of copying it into self._optional_extra_specs.\n\nLater when i modify self._optional_extra_specs then original dict also is modified.","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"77ee4e859d3fd997e43994dd7a7949a7f6e8f552","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":147,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":148,"context_line":"                spec_snapshot_support)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        optional_extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":151,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_61255109","line":149,"updated":"2016-07-22 10:58:42.000000000","message":"elif spec_snapshot_support:\n    raise %SomeException%(\"\u0027snapshot_support\u0027 extra spec is provided twice\")","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2e63cec33e4438f196dd81ac6c3e1d4c27425ba8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":147,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":148,"context_line":"                spec_snapshot_support)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        optional_extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":151,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_171f775c","line":149,"in_reply_to":"dada55a8_61255109","updated":"2016-07-25 05:16:24.000000000","message":"will do so","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"77ee4e859d3fd997e43994dd7a7949a7f6e8f552","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        :param name: Descriptive name of the share type"},{"line_number":142,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":"        if optional_extra_specs is None:"},{"line_number":145,"context_line":"            optional_extra_specs \u003d {\"snapshot_support\": spec_snapshot_support}"},{"line_number":146,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":147,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":148,"context_line":"                spec_snapshot_support)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        optional_extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":151,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        body \u003d {"},{"line_number":154,"context_line":"            \"share_type\": {"}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_281cde12","line":151,"range":{"start_line":144,"start_character":8,"end_line":151,"end_character":46},"updated":"2016-07-22 10:58:42.000000000","message":"Still no check for duplication.\n\nUser of this \"python\" client should not be able to get \"OK\" answer providing these two keys twice - via dict and dedicated arguments.\n\nSaying user of python client, I mean that we can and we use manilaclient directly via python without its CLI wrapper, where you do that check. For example, Manila UI does it. Also some other projects such as Sahara and Heat.","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2e63cec33e4438f196dd81ac6c3e1d4c27425ba8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        :param name: Descriptive name of the share type"},{"line_number":142,"context_line":"        :rtype: :class:`ShareType`"},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":"        if optional_extra_specs is None:"},{"line_number":145,"context_line":"            optional_extra_specs \u003d {\"snapshot_support\": spec_snapshot_support}"},{"line_number":146,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":147,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":148,"context_line":"                spec_snapshot_support)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        optional_extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":151,"context_line":"            spec_driver_handles_share_servers)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        body \u003d {"},{"line_number":154,"context_line":"            \"share_type\": {"}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_57ae0fe8","line":151,"range":{"start_line":144,"start_character":8,"end_line":151,"end_character":46},"in_reply_to":"dada55a8_281cde12","updated":"2016-07-25 05:16:24.000000000","message":"Thanks for explanation, i will make the change","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"249d793c65303f5b92c39940535b2723a3649539","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":156,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if spec_driver_handles_share_servers is not None:"},{"line_number":159,"context_line":"            if \u0027driver_handles_share_servers\u0027 in optional_extra_specs:"},{"line_number":160,"context_line":"                msg \u003d (\"\u0027driver_handles_share_servers\u0027 is already set via \""},{"line_number":161,"context_line":"                       \"positional argument\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_9fac0037","line":158,"updated":"2016-08-03 06:10:59.000000000","message":"spec_driver_handles_share_servers is a positional parameter, do we really need to check if it\u0027s None?","commit_id":"83ecf5daa8fd289514a9cde7d81886ca9660e8df"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"13491ba5f192d3eeb3033b22a23e86c580e4fd8e","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":156,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if spec_driver_handles_share_servers is not None:"},{"line_number":159,"context_line":"            if \u0027driver_handles_share_servers\u0027 in optional_extra_specs:"},{"line_number":160,"context_line":"                msg \u003d (\"\u0027driver_handles_share_servers\u0027 is already set via \""},{"line_number":161,"context_line":"                       \"positional argument\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_87c75911","line":158,"in_reply_to":"bacf61ea_9fac0037","updated":"2016-08-04 06:19:47.000000000","message":"Can you","commit_id":"83ecf5daa8fd289514a9cde7d81886ca9660e8df"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"249d793c65303f5b92c39940535b2723a3649539","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                optional_extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("},{"line_number":165,"context_line":"                    spec_driver_handles_share_servers)"},{"line_number":166,"context_line":"        else:"},{"line_number":167,"context_line":"            msg \u003d (\"\u0027driver_handles_share_servers\u0027 is not set via \""},{"line_number":168,"context_line":"                   \"positional argument\")"},{"line_number":169,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_bf0bc42a","line":167,"range":{"start_line":167,"start_character":21,"end_line":167,"end_character":49},"updated":"2016-08-03 06:10:59.000000000","message":"If spec_driver_handles_share_servers is indeed possibly None, presenting \u0027spec_driver_handles_share_servers\u0027 here would be more explicit.","commit_id":"83ecf5daa8fd289514a9cde7d81886ca9660e8df"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"647509c9f473ad93f04047107d71287faec4698d","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        if spec_snapshot_support is not None:"},{"line_number":149,"context_line":"            if \u0027snapshot_support\u0027 in optional_extra_specs:"},{"line_number":150,"context_line":"                msg \u003d \"\u0027snapshot_support\u0027 extra spec is provided twice\""},{"line_number":151,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":152,"context_line":"            else:"},{"line_number":153,"context_line":"                optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_c6ed7db8","line":150,"range":{"start_line":150,"start_character":70,"end_line":150,"end_character":71},"updated":"2016-08-30 03:31:38.000000000","message":"period","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"647509c9f473ad93f04047107d71287faec4698d","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        if optional_extra_specs is None:"},{"line_number":146,"context_line":"            optional_extra_specs \u003d {}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        if spec_snapshot_support is not None:"},{"line_number":149,"context_line":"            if \u0027snapshot_support\u0027 in optional_extra_specs:"},{"line_number":150,"context_line":"                msg \u003d \"\u0027snapshot_support\u0027 extra spec is provided twice\""},{"line_number":151,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":152,"context_line":"            else:"},{"line_number":153,"context_line":"                optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":154,"context_line":"                    spec_snapshot_support)"},{"line_number":155,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":156,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if spec_driver_handles_share_servers is not None:"},{"line_number":159,"context_line":"            if \u0027driver_handles_share_servers\u0027 in optional_extra_specs:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_791ff607","line":156,"range":{"start_line":148,"start_character":8,"end_line":156,"end_character":59},"updated":"2016-08-30 03:31:38.000000000","message":"Why you need to check it again? It seams you already be checked in https://review.openstack.org/#/c/315012/20/manilaclient/v2/shell.py","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"647509c9f473ad93f04047107d71287faec4698d","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        if spec_driver_handles_share_servers is not None:"},{"line_number":159,"context_line":"            if \u0027driver_handles_share_servers\u0027 in optional_extra_specs:"},{"line_number":160,"context_line":"                msg \u003d (\"\u0027driver_handles_share_servers\u0027 is already set via \""},{"line_number":161,"context_line":"                       \"positional argument\")"},{"line_number":162,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":163,"context_line":"            else:"},{"line_number":164,"context_line":"                optional_extra_specs[\u0027driver_handles_share_servers\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_4686cddb","line":161,"range":{"start_line":161,"start_character":43,"end_line":161,"end_character":44},"updated":"2016-08-30 03:31:38.000000000","message":"period","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"647509c9f473ad93f04047107d71287faec4698d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                    spec_driver_handles_share_servers)"},{"line_number":166,"context_line":"        else:"},{"line_number":167,"context_line":"            msg \u003d (\"\u0027driver_handles_share_servers\u0027 is not set via \""},{"line_number":168,"context_line":"                   \"positional argument\")"},{"line_number":169,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_666f512b","line":168,"range":{"start_line":168,"start_character":39,"end_line":168,"end_character":40},"updated":"2016-08-30 03:31:38.000000000","message":"period","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def __init__(self, manager, info, loaded\u003dFalse):"},{"line_number":31,"context_line":"        super(ShareType, self).__init__(manager, info, loaded)"},{"line_number":32,"context_line":"        self._required_extra_specs \u003d info.get(\u0027required_extra_specs\u0027, {})"},{"line_number":33,"context_line":"        self._optional_extra_specs \u003d dict(info.get(\u0027extra_specs\u0027, {}))"},{"line_number":34,"context_line":"        for key in self._required_extra_specs.keys():"},{"line_number":35,"context_line":"            self._optional_extra_specs.pop(key, None)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_0a697fbe","line":33,"range":{"start_line":33,"start_character":37,"end_line":33,"end_character":41},"updated":"2016-09-01 10:04:24.000000000","message":"https://www.python.org/dev/peps/pep-0274/","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"12315e9410d5c99997963392b39301b8851d850a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        if optional_extra_specs is None:"},{"line_number":146,"context_line":"            optional_extra_specs \u003d {}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        if spec_snapshot_support is not None:"},{"line_number":149,"context_line":"            if \u0027snapshot_support\u0027 in optional_extra_specs:"},{"line_number":150,"context_line":"                msg \u003d \"\u0027snapshot_support\u0027 extra spec is provided twice.\""},{"line_number":151,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":152,"context_line":"            else:"},{"line_number":153,"context_line":"                optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":154,"context_line":"                    spec_snapshot_support)"},{"line_number":155,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":156,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if spec_driver_handles_share_servers is not None:"},{"line_number":159,"context_line":"            if \u0027driver_handles_share_servers\u0027 in optional_extra_specs:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_05e1bed0","line":156,"range":{"start_line":148,"start_character":8,"end_line":156,"end_character":59},"updated":"2016-08-31 09:44:43.000000000","message":"Why you need to check it again? It seams you already be checked in https://review.openstack.org/#/c/315012/20/manilaclient/v2/shell.py","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        if optional_extra_specs is None:"},{"line_number":146,"context_line":"            optional_extra_specs \u003d {}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        if spec_snapshot_support is not None:"},{"line_number":149,"context_line":"            if \u0027snapshot_support\u0027 in optional_extra_specs:"},{"line_number":150,"context_line":"                msg \u003d \"\u0027snapshot_support\u0027 extra spec is provided twice.\""},{"line_number":151,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":152,"context_line":"            else:"},{"line_number":153,"context_line":"                optional_extra_specs[\u0027snapshot_support\u0027] \u003d ("},{"line_number":154,"context_line":"                    spec_snapshot_support)"},{"line_number":155,"context_line":"        elif \u0027snapshot_support\u0027 not in optional_extra_specs:"},{"line_number":156,"context_line":"            optional_extra_specs[\u0027snapshot_support\u0027] \u003d True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if spec_driver_handles_share_servers is not None:"},{"line_number":159,"context_line":"            if \u0027driver_handles_share_servers\u0027 in optional_extra_specs:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_ea129b08","line":156,"range":{"start_line":148,"start_character":8,"end_line":156,"end_character":59},"in_reply_to":"fa7ab95a_05e1bed0","updated":"2016-09-01 10:04:24.000000000","message":"Because it is python client that can be used without CLI. It is used without CLI by all other apps such as manila-ui.","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"}],"manilaclient/v2/shell.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"26377a991ac82277e7e13b6587c0045ddecfbaab","unresolved":false,"context_lines":[{"line_number":2621,"context_line":"    help\u003d\"Required extra specification. \""},{"line_number":2622,"context_line":"         \"Valid values are \u0027true\u0027/\u00271\u0027 and \u0027false\u0027/\u00270\u0027\")"},{"line_number":2623,"context_line":"@cliutils.arg("},{"line_number":2624,"context_line":"    \u0027--snapshot_support\u0027,"},{"line_number":2625,"context_line":"    \u0027--snapshot-support\u0027,"},{"line_number":2626,"context_line":"    metavar\u003d\u0027\u003csnapshot_support\u003e\u0027,"},{"line_number":2627,"context_line":"    action\u003d\u0027single_alias\u0027,"},{"line_number":2628,"context_line":"    help\u003d\"Boolean extra spec that used for filtering of back ends by their \""},{"line_number":2629,"context_line":"         \"capability to create share snapshots. (Default is True).\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_cc701943","side":"PARENT","line":2626,"range":{"start_line":2624,"start_character":0,"end_line":2626,"end_character":33},"updated":"2016-06-30 10:21:08.000000000","message":"It should not be removed. Should be kept for compatibility reasons, because you change interface. Keeping it will be required additional check that value for \"snapshot_support\" is not provided twice.","commit_id":"80fc72a72aaf0473d59bb989b93365b61de61bad"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"26377a991ac82277e7e13b6587c0045ddecfbaab","unresolved":false,"context_lines":[{"line_number":2651,"context_line":"        msg \u003d (\"Argument spec_driver_handles_share_servers \""},{"line_number":2652,"context_line":"               \"argument is not valid: %s\" % six.text_type(e))"},{"line_number":2653,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2654,"context_line":"    kwargs[\u0027extra_specs\u0027] \u003d _extract_extra_specs(args)"},{"line_number":2655,"context_line":"    try:"},{"line_number":2656,"context_line":"        if \u0027snapshot_support\u0027 in kwargs[\u0027extra_specs\u0027]:"},{"line_number":2657,"context_line":"            kwargs[\u0027extra_specs\u0027][\u0027snapshot_support\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_8c24510d","line":2654,"range":{"start_line":2654,"start_character":4,"end_line":2654,"end_character":54},"updated":"2016-06-30 10:21:08.000000000","message":"Before doing so, need to make verification for absence of extra spec keys duplication. For example:\n\nCommand \"manila type-create foo2 true --extra-specs a\u003da1 b\u003db1 a\u003da2\" will succed where \"a\" key will have \"a2\" value. But it should raise exception that duplication appeared.","commit_id":"f18de38e2203bffecba8a88207dfa9725407b911"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"51f902726c881db90f11d86cb10a364bb668ca89","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    return _extract_key_value_options(args, \u0027extra_specs\u0027, advanced)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"def _extract_key_value_options(args, option_name, advanced\u003dFalse):"},{"line_number":251,"context_line":"    result_dict \u003d {}"},{"line_number":252,"context_line":"    options \u003d getattr(args, option_name, None)"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_cdddbc15","line":250,"range":{"start_line":250,"start_character":50,"end_line":250,"end_character":64},"updated":"2016-07-12 13:08:43.000000000","message":"Why do you need such argument? Why it cannot be used always?","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2d81de221b6e7b2da233b4e5e5da899d90f3cb18","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    return _extract_key_value_options(args, \u0027extra_specs\u0027, advanced)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"def _extract_key_value_options(args, option_name, advanced\u003dFalse):"},{"line_number":251,"context_line":"    result_dict \u003d {}"},{"line_number":252,"context_line":"    options \u003d getattr(args, option_name, None)"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_37ff3c67","line":250,"range":{"start_line":250,"start_character":50,"end_line":250,"end_character":64},"in_reply_to":"1aa78d24_b7d23afe","updated":"2016-07-13 08:46:53.000000000","message":"What do mean? What keys can be provided twice?","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"62fea3b38eada944297447aeb9f1f1e7a85b3218","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    return _extract_key_value_options(args, \u0027extra_specs\u0027, advanced)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"def _extract_key_value_options(args, option_name, advanced\u003dFalse):"},{"line_number":251,"context_line":"    result_dict \u003d {}"},{"line_number":252,"context_line":"    options \u003d getattr(args, option_name, None)"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_b7d23afe","line":250,"range":{"start_line":250,"start_character":50,"end_line":250,"end_character":64},"in_reply_to":"1aa78d24_cdddbc15","updated":"2016-07-12 13:44:51.000000000","message":"Can be done, will affect other paths with same error if a key is given twice. is it okay? will put it in general.","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"51f902726c881db90f11d86cb10a364bb668ca89","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                value \u003d None"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if advanced:"},{"line_number":264,"context_line":"                key \u003d str.replace(key, \u0027-\u0027, \u0027_\u0027)"},{"line_number":265,"context_line":"                if key not in result_dict:"},{"line_number":266,"context_line":"                    result_dict[key] \u003d value"},{"line_number":267,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_ede878b5","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":48},"updated":"2016-07-12 13:08:43.000000000","message":"Why do you need such translation?","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2d81de221b6e7b2da233b4e5e5da899d90f3cb18","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                value \u003d None"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if advanced:"},{"line_number":264,"context_line":"                key \u003d str.replace(key, \u0027-\u0027, \u0027_\u0027)"},{"line_number":265,"context_line":"                if key not in result_dict:"},{"line_number":266,"context_line":"                    result_dict[key] \u003d value"},{"line_number":267,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_f7bad4be","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":48},"in_reply_to":"1aa78d24_17186ed2","updated":"2016-07-13 08:46:53.000000000","message":"It is restricted. \"action\u003d\u0027single_alias\u0027\" disallows it.","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"953d39608498318d634abbb0360d3017ecec4fd8","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                value \u003d None"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if advanced:"},{"line_number":264,"context_line":"                key \u003d str.replace(key, \u0027-\u0027, \u0027_\u0027)"},{"line_number":265,"context_line":"                if key not in result_dict:"},{"line_number":266,"context_line":"                    result_dict[key] \u003d value"},{"line_number":267,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_77c70445","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":48},"in_reply_to":"1aa78d24_17186ed2","updated":"2016-07-13 08:45:13.000000000","message":"This translation is reqd in our case but may not be needed in other cases \nlets say if some one gives \u0027--snapshot_support\u0027,  and gives \u0027--snapshot-support\u0027, in extra-specs \nor the reverse \nthen to detect redundancy i had to translate from hyphen to underscore. and then i check like this \nif args.snapshot_support and \u0027snapshot_support\u0027 in kwargs[\u0027extra_specs\u0027]: \n        msg \u003d (\"Argument \u0027snapshot_support\u0027 value specified twice\") \n        raise exceptions.CommandError(msg) \n\nso this may not be desired for other places.. \nNot only that, in extra-specs itself if some one gives snapshot-support twice but with different format like extra-specs snapshot-support \u003d True snapshot_support\u003dFalse\nthis translation is needed","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"2d81de221b6e7b2da233b4e5e5da899d90f3cb18","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                value \u003d None"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if advanced:"},{"line_number":264,"context_line":"                key \u003d str.replace(key, \u0027-\u0027, \u0027_\u0027)"},{"line_number":265,"context_line":"                if key not in result_dict:"},{"line_number":266,"context_line":"                    result_dict[key] \u003d value"},{"line_number":267,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_d74cf8c9","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":48},"in_reply_to":"1aa78d24_77c70445","updated":"2016-07-13 08:46:53.000000000","message":"We have only \"snapshot_support\" spec.","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"62fea3b38eada944297447aeb9f1f1e7a85b3218","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                value \u003d None"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            if advanced:"},{"line_number":264,"context_line":"                key \u003d str.replace(key, \u0027-\u0027, \u0027_\u0027)"},{"line_number":265,"context_line":"                if key not in result_dict:"},{"line_number":266,"context_line":"                    result_dict[key] \u003d value"},{"line_number":267,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_17186ed2","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":48},"in_reply_to":"1aa78d24_ede878b5","updated":"2016-07-12 13:44:51.000000000","message":"Its reqd, as if someone gives snapshot_support and snapshot-support as two keys, that was unrecognized as duplicate without this translation done here.","commit_id":"5e0394431c408a91a75dd5791db89fe0b07197f0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"77ee4e859d3fd997e43994dd7a7949a7f6e8f552","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            if key not in result_dict:"},{"line_number":263,"context_line":"                result_dict[key] \u003d value"},{"line_number":264,"context_line":"            else:"},{"line_number":265,"context_line":"                msg \u003d (\"Argument %(arg)s is given twice in\""},{"line_number":266,"context_line":"                       \" %(option)s\") % {\u0027arg\u0027: key, \u0027option\u0027: option_name}"},{"line_number":267,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":268,"context_line":"    return result_dict"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_8876aa04","line":266,"range":{"start_line":265,"start_character":16,"end_line":266,"end_character":75},"updated":"2016-07-22 10:58:42.000000000","message":"Message is incorrect. \"Couple of options overlap with each other\" is not the same as \"given twice in one option\".","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2e63cec33e4438f196dd81ac6c3e1d4c27425ba8","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            if key not in result_dict:"},{"line_number":263,"context_line":"                result_dict[key] \u003d value"},{"line_number":264,"context_line":"            else:"},{"line_number":265,"context_line":"                msg \u003d (\"Argument %(arg)s is given twice in\""},{"line_number":266,"context_line":"                       \" %(option)s\") % {\u0027arg\u0027: key, \u0027option\u0027: option_name}"},{"line_number":267,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":268,"context_line":"    return result_dict"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_979247f5","line":266,"range":{"start_line":265,"start_character":16,"end_line":266,"end_character":75},"in_reply_to":"dada55a8_8876aa04","updated":"2016-07-25 05:16:24.000000000","message":"okay","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"77ee4e859d3fd997e43994dd7a7949a7f6e8f552","unresolved":false,"context_lines":[{"line_number":2673,"context_line":"    kwargs[\u0027extra_specs\u0027] \u003d _extract_extra_specs(args)"},{"line_number":2674,"context_line":""},{"line_number":2675,"context_line":"    if \u0027driver_handles_share_servers\u0027 in kwargs[\u0027extra_specs\u0027]:"},{"line_number":2676,"context_line":"        msg \u003d (\"Argument \u0027driver_handles_share_servers\u0027 can not be\""},{"line_number":2677,"context_line":"               \" specified in extra specs\")"},{"line_number":2678,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"    if args.snapshot_support and \u0027snapshot_support\u0027 in kwargs[\u0027extra_specs\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_0843da6d","line":2677,"range":{"start_line":2676,"start_character":14,"end_line":2677,"end_character":43},"updated":"2016-07-22 10:58:42.000000000","message":"Better to rewrite it. It should say that it is already set via positional argument.","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":16305,"name":"NidhiMittalHada","email":"nidhimittal19@gmail.com","username":"nidhimittalhada"},"change_message_id":"2e63cec33e4438f196dd81ac6c3e1d4c27425ba8","unresolved":false,"context_lines":[{"line_number":2673,"context_line":"    kwargs[\u0027extra_specs\u0027] \u003d _extract_extra_specs(args)"},{"line_number":2674,"context_line":""},{"line_number":2675,"context_line":"    if \u0027driver_handles_share_servers\u0027 in kwargs[\u0027extra_specs\u0027]:"},{"line_number":2676,"context_line":"        msg \u003d (\"Argument \u0027driver_handles_share_servers\u0027 can not be\""},{"line_number":2677,"context_line":"               \" specified in extra specs\")"},{"line_number":2678,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2679,"context_line":""},{"line_number":2680,"context_line":"    if args.snapshot_support and \u0027snapshot_support\u0027 in kwargs[\u0027extra_specs\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"dada55a8_57644ee4","line":2677,"range":{"start_line":2676,"start_character":14,"end_line":2677,"end_character":43},"in_reply_to":"dada55a8_0843da6d","updated":"2016-07-25 05:16:24.000000000","message":"Argument \u0027driver_handles_share_servers\u0027 already set via positional argument. setting this","commit_id":"6950afc781338d5f85944f2d820c04284627d491"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d027113a6f4463ccc3c68b1291cd4dcf2cacbae1","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            if key not in result_dict:"},{"line_number":263,"context_line":"                result_dict[key] \u003d value"},{"line_number":264,"context_line":"            else:"},{"line_number":265,"context_line":"                msg \u003d \"Couple of options overlap with each other\""},{"line_number":266,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":267,"context_line":"    return result_dict"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_2d50f531","line":265,"range":{"start_line":265,"start_character":23,"end_line":265,"end_character":64},"updated":"2016-08-04 16:31:39.000000000","message":"Please, add here names of options. It is even better to gather all of them and only then raise error.","commit_id":"83ecf5daa8fd289514a9cde7d81886ca9660e8df"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if len(duplicate) \u003e 0:"},{"line_number":269,"context_line":"            duplicate_str \u003d \u0027, \u0027.join(duplicate)"},{"line_number":270,"context_line":"            msg \u003d (\"Couple of options \u0027%(duplicate_str)s\u0027 are mentioned \""},{"line_number":271,"context_line":"                   \"multiple times\") % {\u0027duplicate_str\u0027: duplicate_str}"},{"line_number":272,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_0fdc63e3","line":270,"range":{"start_line":270,"start_character":20,"end_line":270,"end_character":37},"updated":"2016-08-26 14:05:37.000000000","message":"Option(s)","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if len(duplicate) \u003e 0:"},{"line_number":269,"context_line":"            duplicate_str \u003d \u0027, \u0027.join(duplicate)"},{"line_number":270,"context_line":"            msg \u003d (\"Couple of options \u0027%(duplicate_str)s\u0027 are mentioned \""},{"line_number":271,"context_line":"                   \"multiple times\") % {\u0027duplicate_str\u0027: duplicate_str}"},{"line_number":272,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_8f95d3e5","line":270,"range":{"start_line":270,"start_character":58,"end_line":270,"end_character":61},"updated":"2016-08-26 14:05:37.000000000","message":"remove \u0027are\u0027","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if len(duplicate) \u003e 0:"},{"line_number":269,"context_line":"            duplicate_str \u003d \u0027, \u0027.join(duplicate)"},{"line_number":270,"context_line":"            msg \u003d (\"Couple of options \u0027%(duplicate_str)s\u0027 are mentioned \""},{"line_number":271,"context_line":"                   \"multiple times\") % {\u0027duplicate_str\u0027: duplicate_str}"},{"line_number":272,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    return result_dict"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_ef72dfe4","line":271,"range":{"start_line":271,"start_character":34,"end_line":271,"end_character":36},"updated":"2016-08-26 14:05:37.000000000","message":"period","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":2653,"context_line":"    action\u003d\u0027single_alias\u0027,"},{"line_number":2654,"context_line":"    help\u003d\"Extra specs key and value of share type that will be\""},{"line_number":2655,"context_line":"         \" used for share type creation. OPTIONAL: Default\u003dNone.\""},{"line_number":2656,"context_line":"         \" e.g --extra-specs snapshot_support\u003dtrue replication_type\u003dreadable\","},{"line_number":2657,"context_line":"    default\u003dNone)"},{"line_number":2658,"context_line":"@cliutils.arg("},{"line_number":2659,"context_line":"    \u0027--is_public\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_d2578200","line":2656,"range":{"start_line":2656,"start_character":29,"end_line":2656,"end_character":50},"updated":"2016-08-26 14:05:37.000000000","message":"could change this to thin_provisioning\u003d\u0027\u003cis\u003e True\u0027","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":2680,"context_line":""},{"line_number":2681,"context_line":"    if \u0027driver_handles_share_servers\u0027 in kwargs[\u0027extra_specs\u0027]:"},{"line_number":2682,"context_line":"        msg \u003d (\"Argument \u0027driver_handles_share_servers\u0027 is already \""},{"line_number":2683,"context_line":"               \"set via positional argument\")"},{"line_number":2684,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2685,"context_line":""},{"line_number":2686,"context_line":"    if args.snapshot_support and \u0027snapshot_support\u0027 in kwargs[\u0027extra_specs\u0027]:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_72b79639","line":2683,"range":{"start_line":2683,"start_character":43,"end_line":2683,"end_character":45},"updated":"2016-08-26 14:05:37.000000000","message":"period","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a9ae1e93a1077e5c75876e64ce5b81edbba45fb2","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2685,"context_line":""},{"line_number":2686,"context_line":"    if args.snapshot_support and \u0027snapshot_support\u0027 in kwargs[\u0027extra_specs\u0027]:"},{"line_number":2687,"context_line":"        msg \u003d (\"Argument \u0027snapshot_support\u0027 value specified twice\")"},{"line_number":2688,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2689,"context_line":""},{"line_number":2690,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_f281e64b","line":2687,"range":{"start_line":2687,"start_character":65,"end_line":2687,"end_character":67},"updated":"2016-08-26 14:05:37.000000000","message":"period","commit_id":"6699e8c3a0668237daa2582801c07beb4b765cf3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"def _extract_key_value_options(args, option_name):"},{"line_number":250,"context_line":"    result_dict \u003d {}"},{"line_number":251,"context_line":"    duplicate \u003d []"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    options \u003d getattr(args, option_name, None)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_2a0f232f","line":251,"range":{"start_line":251,"start_character":4,"end_line":251,"end_character":13},"updated":"2016-09-01 10:04:24.000000000","message":"duplicated_options \u003d []","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        if len(duplicate) \u003e 0:"},{"line_number":270,"context_line":"            duplicate_str \u003d \u0027, \u0027.join(duplicate)"},{"line_number":271,"context_line":"            msg \u003d (\"Couple of option(s) \u0027%(duplicate_str)s\u0027 mentioned \""},{"line_number":272,"context_line":"                   \"multiple times.\") % {\u0027duplicate_str\u0027: duplicate_str}"},{"line_number":273,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_bf3b77ea","line":271,"range":{"start_line":271,"start_character":20,"end_line":271,"end_character":26},"updated":"2016-09-01 10:04:24.000000000","message":"Why couple? Just so:\n\n\"\"\"\nmsg \u003d \"Following options were duplicated: %s\" % duplicate_str\nraise exceptions.CommandError(msg)\n\"\"\"","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d0ac767cefe3f2ecb49d38b74af78986274c4376","unresolved":false,"context_lines":[{"line_number":2699,"context_line":"                    kwargs[\u0027extra_specs\u0027][\u0027snapshot_support\u0027], strict\u003dTrue))"},{"line_number":2700,"context_line":"    except ValueError as e:"},{"line_number":2701,"context_line":"        msg \u003d (\"Argument \u0027snapshot_support\u0027 is of boolean type and has \""},{"line_number":2702,"context_line":"               \"invalid value: %s\" % six.text_type(e))"},{"line_number":2703,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2704,"context_line":""},{"line_number":2705,"context_line":"    stype \u003d cs.share_types.create(**kwargs)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_b7d92986","line":2702,"range":{"start_line":2702,"start_character":36,"end_line":2702,"end_character":53},"updated":"2016-08-31 10:00:58.000000000","message":"Whenever possible translation should not be forced by use of six.text_type() on a message being used with a format string.\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#avoid-forcing-the-translation-of-translatable-variables","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93cd92068e1e89267c922f0c1c0bb27399e728c7","unresolved":false,"context_lines":[{"line_number":2699,"context_line":"                    kwargs[\u0027extra_specs\u0027][\u0027snapshot_support\u0027], strict\u003dTrue))"},{"line_number":2700,"context_line":"    except ValueError as e:"},{"line_number":2701,"context_line":"        msg \u003d (\"Argument \u0027snapshot_support\u0027 is of boolean type and has \""},{"line_number":2702,"context_line":"               \"invalid value: %s\" % six.text_type(e))"},{"line_number":2703,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":2704,"context_line":""},{"line_number":2705,"context_line":"    stype \u003d cs.share_types.create(**kwargs)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_ea853b07","line":2702,"range":{"start_line":2702,"start_character":36,"end_line":2702,"end_character":53},"in_reply_to":"fa7ab95a_b7d92986","updated":"2016-09-01 10:04:24.000000000","message":"It is not changed in this commit, it is already so in master.","commit_id":"581b299c65b2ff3a70f410a904895ad7fc260083"}]}
