)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"41f7ebd664dd44e3eb3a4c6a340efad1e5203742","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This change doesn\u0027t add new test cases, also some helper methods have been"},{"line_number":15,"context_line":"added."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"blueprint ironicclient-functional-tests"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Iee426c65ee227e8b7c32ac94f6cfc1001f94e112"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da20952f_42d6a8f2","line":17,"updated":"2015-09-08 10:19:49.000000000","message":"Tho I think it\u0027s fine, the blueprint seems not approved yet and is assigned to another person? Kyrylo Romanenko","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"7fe13b486229b6a4b78ee46746dc80a45cf98714","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This change doesn\u0027t add new test cases, also some helper methods have been"},{"line_number":15,"context_line":"added."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"blueprint ironicclient-functional-tests"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Iee426c65ee227e8b7c32ac94f6cfc1001f94e112"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da20952f_a238e4ef","line":17,"in_reply_to":"da20952f_42d6a8f2","updated":"2015-09-08 10:26:35.000000000","message":"Yes, he will work on test coverage, I\u0027m trying to prepare test environment for this.","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"}],"ironicclient/tests/functional/base.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"41f7ebd664dd44e3eb3a4c6a340efad1e5203742","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_node(self, params\u003d\u0027\u0027):"},{"line_number":95,"context_line":"        if \u0027--driver\u0027 not in params:"},{"line_number":96,"context_line":"            params +\u003d \u0027--driver fake\u0027"},{"line_number":97,"context_line":"        node \u003d self.ironic(\u0027node-create\u0027, params\u003dparams)"},{"line_number":98,"context_line":"        node \u003d self.get_dict_from_output(node)"},{"line_number":99,"context_line":"        self.addCleanup(self._try_delete_node, node[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_82c5a03e","line":96,"updated":"2015-09-08 10:19:49.000000000","message":"Should we check for the short form of this parameter too?\n\n\"-d\" or \"--driver\"","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"7fe13b486229b6a4b78ee46746dc80a45cf98714","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_node(self, params\u003d\u0027\u0027):"},{"line_number":95,"context_line":"        if \u0027--driver\u0027 not in params:"},{"line_number":96,"context_line":"            params +\u003d \u0027--driver fake\u0027"},{"line_number":97,"context_line":"        node \u003d self.ironic(\u0027node-create\u0027, params\u003dparams)"},{"line_number":98,"context_line":"        node \u003d self.get_dict_from_output(node)"},{"line_number":99,"context_line":"        self.addCleanup(self._try_delete_node, node[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_6223acbf","line":96,"in_reply_to":"da20952f_82c5a03e","updated":"2015-09-08 10:26:35.000000000","message":"sure","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"41f7ebd664dd44e3eb3a4c6a340efad1e5203742","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.addCleanup(self._try_delete_node, node[\u0027uuid\u0027])"},{"line_number":100,"context_line":"        return node"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def assertTableHeaders(self, output_lines, field_names):"},{"line_number":103,"context_line":"        \"\"\"Verify that output table has headers item listed in field_names."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        :param output_lines: output table from cmd"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_a296a43c","line":102,"updated":"2015-09-08 10:19:49.000000000","message":"This camel case method doesn\u0027t seem consistent with the rest of the methods names in the class.\n\n def assert_table_headers(...","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"1267f91a719e384ebe5e5bd14e8366eabd8e2eda","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.addCleanup(self._try_delete_node, node[\u0027uuid\u0027])"},{"line_number":100,"context_line":"        return node"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def assertTableHeaders(self, output_lines, field_names):"},{"line_number":103,"context_line":"        \"\"\"Verify that output table has headers item listed in field_names."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        :param output_lines: output table from cmd"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_8d6dd19b","line":102,"in_reply_to":"da20952f_a20f8438","updated":"2015-09-08 10:32:12.000000000","message":"just remember I was trying to keep consistent with other asserts naming: assertFalse, wdyt?","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"7fe13b486229b6a4b78ee46746dc80a45cf98714","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.addCleanup(self._try_delete_node, node[\u0027uuid\u0027])"},{"line_number":100,"context_line":"        return node"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def assertTableHeaders(self, output_lines, field_names):"},{"line_number":103,"context_line":"        \"\"\"Verify that output table has headers item listed in field_names."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        :param output_lines: output table from cmd"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_a20f8438","line":102,"in_reply_to":"da20952f_a296a43c","updated":"2015-09-08 10:26:35.000000000","message":"agree)","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"41f7ebd664dd44e3eb3a4c6a340efad1e5203742","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        for field in field_names:"},{"line_number":111,"context_line":"            self.assertIn(field, headers)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def assertNodeDeleted(self, node_id):"},{"line_number":114,"context_line":"        \"\"\"Verify that there isn\u0027t node with given id."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        :param node_id: node id to verify"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_62a16c95","line":113,"updated":"2015-09-08 10:19:49.000000000","message":"ditto camel case","commit_id":"b8955ed1726c8eff49fee235ca1ae0eb20b38a18"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":"import six.moves.configparser as config_parser"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_7a0ebfe6","line":13,"updated":"2015-10-02 13:49:27.000000000","message":"Add blank line between L13 and L14.\n\nos is a built-in library.  six is a 3rd party library.","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":"import six.moves.configparser as config_parser"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_a4819d4f","line":13,"in_reply_to":"9a1a9d01_7a0ebfe6","updated":"2015-10-02 14:46:57.000000000","message":"I\u0027ll update","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":"import six.moves.configparser as config_parser"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest_lib.cli import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_fa02cfb3","line":16,"updated":"2015-10-02 13:49:27.000000000","message":"Delete this blank link. tempest_lib is also a 3rd party library.","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":"import six.moves.configparser as config_parser"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest_lib.cli import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_c4861165","line":16,"in_reply_to":"9a1a9d01_fa02cfb3","updated":"2015-10-02 14:46:57.000000000","message":"I\u0027ll update","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest_lib.cli import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"DEFAULT_CONFIG \u003d os.path.join(os.path.dirname(__file__), \u0027test.conf\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ClientTestBase(base.ClientTestBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_ba8e9725","line":20,"updated":"2015-10-02 13:49:27.000000000","message":"nit: DEFAULT_CONFIG_FILE ???","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cdcedce857015bed9fef5cece6c81b7ffa5badb1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest_lib.cli import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"DEFAULT_CONFIG \u003d os.path.join(os.path.dirname(__file__), \u0027test.conf\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ClientTestBase(base.ClientTestBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_aea3af9d","line":20,"in_reply_to":"9a1a9d01_446f6192","updated":"2015-10-02 18:17:11.000000000","message":"Okay with me to leave it if you like :)","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest_lib.cli import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"DEFAULT_CONFIG \u003d os.path.join(os.path.dirname(__file__), \u0027test.conf\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ClientTestBase(base.ClientTestBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_446f6192","line":20,"in_reply_to":"9a1a9d01_ba8e9725","updated":"2015-10-02 14:46:57.000000000","message":"ok, it\u0027s existing var name https://github.com/openstack/python-ironicclient/blob/master/ironicclient/tests/functional/test_ironicclient.py#L24","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.client \u003d self._get_clients()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _get_clients(self):"},{"line_number":30,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        out \u003d self._get_config()"},{"line_number":33,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_7ab31f0b","line":30,"updated":"2015-10-02 13:49:27.000000000","message":"I don\u0027t like this. Seems like I can\u0027t run tox unless I am in the root directory of the project.","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cdcedce857015bed9fef5cece6c81b7ffa5badb1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.client \u003d self._get_clients()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _get_clients(self):"},{"line_number":30,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        out \u003d self._get_config()"},{"line_number":33,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_8ea82b79","line":30,"in_reply_to":"9a1a9d01_049c0968","updated":"2015-10-02 18:17:11.000000000","message":"Maybe a little comment that we are put into the correct directory before we run?","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.client \u003d self._get_clients()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _get_clients(self):"},{"line_number":30,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        out \u003d self._get_config()"},{"line_number":33,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_049c0968","line":30,"in_reply_to":"9a1a9d01_7ab31f0b","updated":"2015-10-02 14:46:57.000000000","message":"you can, root dir is working dir {toxinidir} , you can run from subdir or from another dir with CONFIGFILE argument specified","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            try:"},{"line_number":64,"context_line":"                out[c] \u003d config.get(\u0027functional\u0027, c)"},{"line_number":65,"context_line":"            except config_parser.NoOptionError:"},{"line_number":66,"context_line":"                out[c] \u003d None"},{"line_number":67,"context_line":"        missing \u003d [k for k, v in out.items() if not v]"},{"line_number":68,"context_line":"        if missing:"},{"line_number":69,"context_line":"                self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_baed3790","line":66,"updated":"2015-10-02 13:49:27.000000000","message":"Why not just:\n\n missing.append(c)\n\nand delete Line 67","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            try:"},{"line_number":64,"context_line":"                out[c] \u003d config.get(\u0027functional\u0027, c)"},{"line_number":65,"context_line":"            except config_parser.NoOptionError:"},{"line_number":66,"context_line":"                out[c] \u003d None"},{"line_number":67,"context_line":"        missing \u003d [k for k, v in out.items() if not v]"},{"line_number":68,"context_line":"        if missing:"},{"line_number":69,"context_line":"                self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_c4f2916f","line":66,"in_reply_to":"9a1a9d01_baed3790","updated":"2015-10-02 14:46:57.000000000","message":"not sure why: https://github.com/openstack/python-ironicclient/blob/master/ironicclient/tests/functional/test_ironicclient.py#L60\n\ncertainly we can use your suggestion","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":72,"context_line":"        return out"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def ironic(self, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"},{"line_number":75,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":76,"context_line":"        return self.client.cmd_with_auth("},{"line_number":77,"context_line":"            \u0027ironic\u0027, action, flags, params, False, False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_3a77e7d5","line":74,"updated":"2015-10-02 13:49:27.000000000","message":"Can this function name be better?\n\nAlso a docstring would be nice.","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":72,"context_line":"        return out"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def ironic(self, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"},{"line_number":75,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":76,"context_line":"        return self.client.cmd_with_auth("},{"line_number":77,"context_line":"            \u0027ironic\u0027, action, flags, params, False, False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_8416d953","line":74,"in_reply_to":"9a1a9d01_3a77e7d5","updated":"2015-10-02 14:46:57.000000000","message":"I would prefer to use \u0027ironic\u0027 name, it\u0027s common use case in tempest-lib for clients name, sure I\u0027ll add docstring","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cdcedce857015bed9fef5cece6c81b7ffa5badb1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":72,"context_line":"        return out"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def ironic(self, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"},{"line_number":75,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":76,"context_line":"        return self.client.cmd_with_auth("},{"line_number":77,"context_line":"            \u0027ironic\u0027, action, flags, params, False, False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_cec5c33d","line":74,"in_reply_to":"9a1a9d01_8416d953","updated":"2015-10-02 18:17:11.000000000","message":"If it is command name, then okay. But shouldn\u0027t the name be \u0027ironicclient\u0027 or something like that? Sorry I don\u0027t know a lot about tempest.","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"69ef3d1e63260585d5aef5dc955052228376e99c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        out \u003d self._get_config()"},{"line_number":35,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"},{"line_number":36,"context_line":"                              password\u003dout[\u0027os_password\u0027],"},{"line_number":37,"context_line":"                              tenant_name\u003dout[\u0027os_tenant_name\u0027],"},{"line_number":38,"context_line":"                              uri\u003dout[\u0027os_auth_url\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_7579fbfb","line":35,"updated":"2015-10-06 12:06:13.000000000","message":"So this does not allow initializing client in noauth mode.","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"0a39a99ba87f9ce4595420a1ad02e09abb1801cb","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        out \u003d self._get_config()"},{"line_number":35,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"},{"line_number":36,"context_line":"                              password\u003dout[\u0027os_password\u0027],"},{"line_number":37,"context_line":"                              tenant_name\u003dout[\u0027os_tenant_name\u0027],"},{"line_number":38,"context_line":"                              uri\u003dout[\u0027os_auth_url\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_e66d5f33","line":35,"in_reply_to":"7a2fa921_7579fbfb","updated":"2015-10-06 13:22:28.000000000","message":"yes, it doesn\u0027t for now, noauth mode in plans","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"7f1e372ef0fe3ec9d32f245f935b8de8f0909ea1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        out \u003d self._get_config()"},{"line_number":35,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"},{"line_number":36,"context_line":"                              password\u003dout[\u0027os_password\u0027],"},{"line_number":37,"context_line":"                              tenant_name\u003dout[\u0027os_tenant_name\u0027],"},{"line_number":38,"context_line":"                              uri\u003dout[\u0027os_auth_url\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_715ca84b","line":35,"in_reply_to":"7a2fa921_91ddc444","updated":"2015-10-06 14:27:37.000000000","message":"It\u0027s tempest things, not related to ironic","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"747a67048bd1d5d52c09861d79f3e64f95c11375","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        out \u003d self._get_config()"},{"line_number":35,"context_line":"        return base.CLIClient(cli_dir\u003dcli_dir, username\u003dout[\u0027os_username\u0027],"},{"line_number":36,"context_line":"                              password\u003dout[\u0027os_password\u0027],"},{"line_number":37,"context_line":"                              tenant_name\u003dout[\u0027os_tenant_name\u0027],"},{"line_number":38,"context_line":"                              uri\u003dout[\u0027os_auth_url\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_91ddc444","line":35,"in_reply_to":"7a2fa921_e66d5f33","updated":"2015-10-06 14:23:59.000000000","message":"Maybe add a fixme about it if you\u0027re not adding it in this patch.","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"69ef3d1e63260585d5aef5dc955052228376e99c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            except config_parser.NoOptionError:"},{"line_number":69,"context_line":"                missing.append(c)"},{"line_number":70,"context_line":"        if missing:"},{"line_number":71,"context_line":"                self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"},{"line_number":72,"context_line":"                          \u0027auth_strategy\u003d%s: %s\u0027 %"},{"line_number":73,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":74,"context_line":"        return out"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_55115fab","line":71,"updated":"2015-10-06 12:06:13.000000000","message":"indentation is wrong.","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"0a39a99ba87f9ce4595420a1ad02e09abb1801cb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            except config_parser.NoOptionError:"},{"line_number":69,"context_line":"                missing.append(c)"},{"line_number":70,"context_line":"        if missing:"},{"line_number":71,"context_line":"                self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"},{"line_number":72,"context_line":"                          \u0027auth_strategy\u003d%s: %s\u0027 %"},{"line_number":73,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":74,"context_line":"        return out"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_265a7784","line":71,"in_reply_to":"7a2fa921_55115fab","updated":"2015-10-06 13:22:28.000000000","message":"yeah, too many)","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"1035b06974aa226232c42881900a360fa0b2be7a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def ironic(self, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"},{"line_number":77,"context_line":"        \"\"\"Executes ironic command for the given action."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        :param action: the cli command to run using cinder"},{"line_number":80,"context_line":"        :type action: string"},{"line_number":81,"context_line":"        :param flags: any optional cli flags to use"},{"line_number":82,"context_line":"        :type flags: string"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_188bd7c4","line":79,"updated":"2015-10-20 16:38:20.000000000","message":"Is it supposed to say \u0027cinder\u0027?","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"a7559de41a592e55b84f90d84c8f9ce7f55500c8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def ironic(self, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"},{"line_number":77,"context_line":"        \"\"\"Executes ironic command for the given action."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        :param action: the cli command to run using cinder"},{"line_number":80,"context_line":"        :type action: string"},{"line_number":81,"context_line":"        :param flags: any optional cli flags to use"},{"line_number":82,"context_line":"        :type flags: string"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_e12bc692","line":79,"in_reply_to":"3a29b11f_188bd7c4","updated":"2015-10-20 17:34:29.000000000","message":"thanks, will update, working on new patch","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"69ef3d1e63260585d5aef5dc955052228376e99c","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _try_delete_node(self, node_id):"},{"line_number":91,"context_line":"        if node_id in self.ironic(\u0027node-list\u0027):"},{"line_number":92,"context_line":"            self.ironic(\u0027node-delete\u0027, node_id)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_dict_from_output(self, output):"},{"line_number":95,"context_line":"        \"\"\"Create a dictionary from an output"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_b5fc733f","line":92,"updated":"2015-10-06 12:06:13.000000000","message":"What if some node contains instance uuid that equals to node\u0027s uuid you\u0027re trying to delete? Maybe also worth parsing output.","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"747a67048bd1d5d52c09861d79f3e64f95c11375","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _try_delete_node(self, node_id):"},{"line_number":91,"context_line":"        if node_id in self.ironic(\u0027node-list\u0027):"},{"line_number":92,"context_line":"            self.ironic(\u0027node-delete\u0027, node_id)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_dict_from_output(self, output):"},{"line_number":95,"context_line":"        \"\"\"Create a dictionary from an output"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_1121b4fb","line":92,"in_reply_to":"7a2fa921_88a59905","updated":"2015-10-06 14:23:59.000000000","message":"Yes, but still I think it\u0027s better to ensure that it is exactly node uuid, e.g. you can assign instance uuid manually, and the problem becomes a bit less unreal :) Lets wait what others think maybe.","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"0a39a99ba87f9ce4595420a1ad02e09abb1801cb","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _try_delete_node(self, node_id):"},{"line_number":91,"context_line":"        if node_id in self.ironic(\u0027node-list\u0027):"},{"line_number":92,"context_line":"            self.ironic(\u0027node-delete\u0027, node_id)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_dict_from_output(self, output):"},{"line_number":95,"context_line":"        \"\"\"Create a dictionary from an output"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_88a59905","line":92,"in_reply_to":"7a2fa921_b5fc733f","updated":"2015-10-06 13:22:28.000000000","message":"I\u0027d say it\u0027s quite unreal:),  several conditions should happened: \n\n1) error occurred during test and node isn\u0027t deleted, \n\n2) 2 equals uuid4 was generated.","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"69ef3d1e63260585d5aef5dc955052228376e99c","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :param node_id: node id to verify"},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        self.assertFalse(node_id in self.ironic(\u0027node-list\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_b59313fa","line":129,"updated":"2015-10-06 12:06:13.000000000","message":"ditto","commit_id":"514e9596a02563bfc19881a51120bb19b8f956af"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d82abb2fc9e74fdcdb3e609b1af608f4bc183521","unresolved":false,"context_lines":[{"line_number":20,"context_line":"DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__), \u0027test.conf\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ClientTestBase(base.ClientTestBase):"},{"line_number":24,"context_line":"    \"\"\"Ironic base class, calls to ironicclient.\"\"\""},{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(ClientTestBase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_13aa7485","line":23,"updated":"2015-10-22 14:38:57.000000000","message":"Not a fan that the class and base class have the same name. \u0027ClientTestBase\u0027\n\nMaybe it could be called:\n\n FunctionalTestBase\n\nOr something like that.???","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fffd13a4737dbb4d98820bc608be735c970cdd79","unresolved":false,"context_lines":[{"line_number":20,"context_line":"DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__), \u0027test.conf\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ClientTestBase(base.ClientTestBase):"},{"line_number":24,"context_line":"    \"\"\"Ironic base class, calls to ironicclient.\"\"\""},{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(ClientTestBase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_e814a6e9","line":23,"in_reply_to":"3a29b11f_13aa7485","updated":"2015-10-22 15:00:29.000000000","message":"ok","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d82abb2fc9e74fdcdb3e609b1af608f4bc183521","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # the tox env path is {toxinidir}/.tox"},{"line_number":32,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        out \u003d self._get_config()"},{"line_number":35,"context_line":"        if out.get(\u0027os_auth_url\u0027):"},{"line_number":36,"context_line":"            client \u003d base.CLIClient(cli_dir\u003dcli_dir,"},{"line_number":37,"context_line":"                                    username\u003dout[\u0027os_username\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_45082328","line":34,"updated":"2015-10-22 14:38:57.000000000","message":"nit: Wouldn\u0027t \u0027config\u0027 be a better variable name than \u0027out\u0027?","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fffd13a4737dbb4d98820bc608be735c970cdd79","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # the tox env path is {toxinidir}/.tox"},{"line_number":32,"context_line":"        cli_dir \u003d os.path.join(os.path.abspath(\u0027.\u0027), \u0027.tox/functional/bin\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        out \u003d self._get_config()"},{"line_number":35,"context_line":"        if out.get(\u0027os_auth_url\u0027):"},{"line_number":36,"context_line":"            client \u003d base.CLIClient(cli_dir\u003dcli_dir,"},{"line_number":37,"context_line":"                                    username\u003dout[\u0027os_username\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_48dcba45","line":34,"in_reply_to":"3a29b11f_45082328","updated":"2015-10-22 15:00:29.000000000","message":"ok","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d82abb2fc9e74fdcdb3e609b1af608f4bc183521","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            auth_strategy \u003d \u0027keystone\u0027"},{"line_number":59,"context_line":"        if auth_strategy not in [\u0027keystone\u0027, \u0027noauth\u0027]:"},{"line_number":60,"context_line":"            raise self.fail("},{"line_number":61,"context_line":"                \u0027Invalid auth type specified in functional must be one of: \u0027"},{"line_number":62,"context_line":"                \u0027keystone, noauth\u0027)"},{"line_number":63,"context_line":"        out \u003d {}"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_736968f8","line":61,"updated":"2015-10-22 14:38:57.000000000","message":"Could it say what was the auth_strategy specified?","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fffd13a4737dbb4d98820bc608be735c970cdd79","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            auth_strategy \u003d \u0027keystone\u0027"},{"line_number":59,"context_line":"        if auth_strategy not in [\u0027keystone\u0027, \u0027noauth\u0027]:"},{"line_number":60,"context_line":"            raise self.fail("},{"line_number":61,"context_line":"                \u0027Invalid auth type specified in functional must be one of: \u0027"},{"line_number":62,"context_line":"                \u0027keystone, noauth\u0027)"},{"line_number":63,"context_line":"        out \u003d {}"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_c8f0cacb","line":61,"in_reply_to":"3a29b11f_736968f8","updated":"2015-10-22 15:00:29.000000000","message":"ok","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d82abb2fc9e74fdcdb3e609b1af608f4bc183521","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            raise self.fail("},{"line_number":61,"context_line":"                \u0027Invalid auth type specified in functional must be one of: \u0027"},{"line_number":62,"context_line":"                \u0027keystone, noauth\u0027)"},{"line_number":63,"context_line":"        out \u003d {}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        conf_settings \u003d [\u0027api_version\u0027]"},{"line_number":66,"context_line":"        if auth_strategy \u003d\u003d \u0027keystone\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_45f26307","line":63,"updated":"2015-10-22 14:38:57.000000000","message":"nit: move this down right above the for loop where it is used.","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fffd13a4737dbb4d98820bc608be735c970cdd79","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            raise self.fail("},{"line_number":61,"context_line":"                \u0027Invalid auth type specified in functional must be one of: \u0027"},{"line_number":62,"context_line":"                \u0027keystone, noauth\u0027)"},{"line_number":63,"context_line":"        out \u003d {}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        conf_settings \u003d [\u0027api_version\u0027]"},{"line_number":66,"context_line":"        if auth_strategy \u003d\u003d \u0027keystone\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_e8c26652","line":63,"in_reply_to":"3a29b11f_45f26307","updated":"2015-10-22 15:00:29.000000000","message":"ok","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d82abb2fc9e74fdcdb3e609b1af608f4bc183521","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            except config_parser.NoOptionError:"},{"line_number":78,"context_line":"                missing.append(c)"},{"line_number":79,"context_line":"        if missing:"},{"line_number":80,"context_line":"                self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"},{"line_number":81,"context_line":"                          \u0027auth_strategy\u003d%s: %s\u0027 %"},{"line_number":82,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":83,"context_line":"        return out"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_33ea1075","line":80,"updated":"2015-10-22 14:38:57.000000000","message":"nit: indentation seems like  8 spaces instead of four.","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"fffd13a4737dbb4d98820bc608be735c970cdd79","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            except config_parser.NoOptionError:"},{"line_number":78,"context_line":"                missing.append(c)"},{"line_number":79,"context_line":"        if missing:"},{"line_number":80,"context_line":"                self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"},{"line_number":81,"context_line":"                          \u0027auth_strategy\u003d%s: %s\u0027 %"},{"line_number":82,"context_line":"                          (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":83,"context_line":"        return out"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_882e52f9","line":80,"in_reply_to":"3a29b11f_33ea1075","updated":"2015-10-22 15:00:29.000000000","message":"hmm, missed second time, thanks","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d82abb2fc9e74fdcdb3e609b1af608f4bc183521","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        :param node_id: node id to verify"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":"        self.assertFalse(node_id in self.ironic(\u0027node-list\u0027))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_737f28e0","line":160,"updated":"2015-10-22 14:38:57.000000000","message":"self.assertNotIn()\n\nWill give better error message on failure.","commit_id":"0fdfc9d6198ecf442f8d9c5194042cdafe789ada"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"73b22389a29d22b1888427c999aaecf58c722e69","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                \u0027Invalid auth type specified: %s in functional must be \u0027"},{"line_number":62,"context_line":"                \u0027one of: [keystone, noauth]\u0027 % auth_strategy)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        conf_settings \u003d [\u0027api_version\u0027]"},{"line_number":65,"context_line":"        if auth_strategy \u003d\u003d \u0027keystone\u0027:"},{"line_number":66,"context_line":"            conf_settings +\u003d [\u0027os_auth_url\u0027, \u0027os_username\u0027,"},{"line_number":67,"context_line":"                              \u0027os_password\u0027, \u0027os_tenant_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_ceff3933","line":64,"updated":"2015-10-27 18:18:55.000000000","message":"api_version is not used currently, so it should be either added in client initialization, or removed from list of options that cause tests to fail if they\u0027re missing (I think you should not require it, there is a default in CLI already).","commit_id":"5eb00d8d7cd90681896f0f1e6a33748c03cf0770"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"46ae25a535e0dca9d4ba72a1810bf06ca517b99b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                \u0027Invalid auth type specified: %s in functional must be \u0027"},{"line_number":62,"context_line":"                \u0027one of: [keystone, noauth]\u0027 % auth_strategy)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        conf_settings \u003d [\u0027api_version\u0027]"},{"line_number":65,"context_line":"        if auth_strategy \u003d\u003d \u0027keystone\u0027:"},{"line_number":66,"context_line":"            conf_settings +\u003d [\u0027os_auth_url\u0027, \u0027os_username\u0027,"},{"line_number":67,"context_line":"                              \u0027os_password\u0027, \u0027os_tenant_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_d177c800","line":64,"in_reply_to":"1a26ad4f_ceff3933","updated":"2015-10-28 09:27:57.000000000","message":"ok, I\u0027ll remove it","commit_id":"5eb00d8d7cd90681896f0f1e6a33748c03cf0770"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"73b22389a29d22b1888427c999aaecf58c722e69","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        if missing:"},{"line_number":79,"context_line":"            self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"},{"line_number":80,"context_line":"                      \u0027auth_strategy\u003d%s: %s\u0027 %"},{"line_number":81,"context_line":"                      (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":82,"context_line":"        return cli_flags"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _cmd_no_auth(self, cmd, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_ce3c1932","line":81,"updated":"2015-10-27 18:18:55.000000000","message":"Better to use dictionary substitution.","commit_id":"5eb00d8d7cd90681896f0f1e6a33748c03cf0770"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"46ae25a535e0dca9d4ba72a1810bf06ca517b99b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        if missing:"},{"line_number":79,"context_line":"            self.fail(\u0027Missing required setting in test.conf (%s) for \u0027"},{"line_number":80,"context_line":"                      \u0027auth_strategy\u003d%s: %s\u0027 %"},{"line_number":81,"context_line":"                      (config_file, auth_strategy, \u0027,\u0027.join(missing)))"},{"line_number":82,"context_line":"        return cli_flags"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _cmd_no_auth(self, cmd, action, flags\u003d\u0027\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_d14ee8c0","line":81,"in_reply_to":"1a26ad4f_ce3c1932","updated":"2015-10-28 09:27:57.000000000","message":"ok, not sure why it\u0027s better","commit_id":"5eb00d8d7cd90681896f0f1e6a33748c03cf0770"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"73b22389a29d22b1888427c999aaecf58c722e69","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                 %"},{"line_number":98,"context_line":"                 (self.os_auth_token,"},{"line_number":99,"context_line":"                  self.ironic_url))"},{"line_number":100,"context_line":"        flags \u003d creds + \u0027 \u0027 + flags"},{"line_number":101,"context_line":"        return base.execute(cmd, action, flags, params,"},{"line_number":102,"context_line":"                            cli_dir\u003dself.client.cli_dir)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_cec73944","line":100,"updated":"2015-10-27 18:18:55.000000000","message":"Why not do it in one substitution?","commit_id":"5eb00d8d7cd90681896f0f1e6a33748c03cf0770"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"46ae25a535e0dca9d4ba72a1810bf06ca517b99b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                 %"},{"line_number":98,"context_line":"                 (self.os_auth_token,"},{"line_number":99,"context_line":"                  self.ironic_url))"},{"line_number":100,"context_line":"        flags \u003d creds + \u0027 \u0027 + flags"},{"line_number":101,"context_line":"        return base.execute(cmd, action, flags, params,"},{"line_number":102,"context_line":"                            cli_dir\u003dself.client.cli_dir)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a26ad4f_31007c34","line":100,"in_reply_to":"1a26ad4f_cec73944","updated":"2015-10-28 09:27:57.000000000","message":"it was just faster to add, I\u0027ll fix it","commit_id":"5eb00d8d7cd90681896f0f1e6a33748c03cf0770"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e2f362eb0aae5d8b11504914b67a1ed618c8ad26","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                     DEFAULT_CONFIG_FILE)"},{"line_number":52,"context_line":"        config \u003d config_parser.SafeConfigParser()"},{"line_number":53,"context_line":"        if not config.read(config_file):"},{"line_number":54,"context_line":"            self.skipTest(\u0027Skipping, no test config found @ %s\u0027 % config_file)"},{"line_number":55,"context_line":"        try:"},{"line_number":56,"context_line":"            auth_strategy \u003d config.get(\u0027functional\u0027, \u0027auth_strategy\u0027)"},{"line_number":57,"context_line":"        except config_parser.NoOptionError:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_3a59f7fe","line":54,"updated":"2015-11-05 16:28:27.000000000","message":"I think this is a Python 2.7 thing. But Python 2.6 is supposed to be deprecated soon. So I\u0027m okay with it.\n\n https://docs.python.org/2/library/unittest.html#unittest.TestCase.skipTest","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"ce815264ca39ad6c233ff243b921676c6f36ddc3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                     DEFAULT_CONFIG_FILE)"},{"line_number":52,"context_line":"        config \u003d config_parser.SafeConfigParser()"},{"line_number":53,"context_line":"        if not config.read(config_file):"},{"line_number":54,"context_line":"            self.skipTest(\u0027Skipping, no test config found @ %s\u0027 % config_file)"},{"line_number":55,"context_line":"        try:"},{"line_number":56,"context_line":"            auth_strategy \u003d config.get(\u0027functional\u0027, \u0027auth_strategy\u0027)"},{"line_number":57,"context_line":"        except config_parser.NoOptionError:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_9a4ee394","line":54,"in_reply_to":"fa80f949_3a59f7fe","updated":"2015-11-05 16:36:21.000000000","message":"Looks like we already don\u0027t test with Python 2.6","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"f59fc2d7bfe66e661d13e6ecb7583486add17824","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            auth_strategy \u003d config.get(\u0027functional\u0027, \u0027auth_strategy\u0027)"},{"line_number":57,"context_line":"        except config_parser.NoOptionError:"},{"line_number":58,"context_line":"            auth_strategy \u003d \u0027keystone\u0027"},{"line_number":59,"context_line":"        if auth_strategy not in [\u0027keystone\u0027, \u0027noauth\u0027]:"},{"line_number":60,"context_line":"            raise self.fail("},{"line_number":61,"context_line":"                \u0027Invalid auth type specified: %s in functional must be \u0027"},{"line_number":62,"context_line":"                \u0027one of: [keystone, noauth]\u0027 % auth_strategy)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_e761b2a9","line":59,"updated":"2015-11-05 02:29:39.000000000","message":"nit: it is better that we have a constant defined reference to get the auth strategy we supported, or have common method to check if the input auth strategy is supported or not, but think it is out-of-scope for this patch, so just have such suggestion here, thanks.","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"476087e43441f1d269adfdc2420dd59ab0bbd0fd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            auth_strategy \u003d config.get(\u0027functional\u0027, \u0027auth_strategy\u0027)"},{"line_number":57,"context_line":"        except config_parser.NoOptionError:"},{"line_number":58,"context_line":"            auth_strategy \u003d \u0027keystone\u0027"},{"line_number":59,"context_line":"        if auth_strategy not in [\u0027keystone\u0027, \u0027noauth\u0027]:"},{"line_number":60,"context_line":"            raise self.fail("},{"line_number":61,"context_line":"                \u0027Invalid auth type specified: %s in functional must be \u0027"},{"line_number":62,"context_line":"                \u0027one of: [keystone, noauth]\u0027 % auth_strategy)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_18c0d4df","line":59,"in_reply_to":"fa80f949_e761b2a9","updated":"2015-11-05 08:08:46.000000000","message":"thanks, we\u0027ll add this in next patches","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"f59fc2d7bfe66e661d13e6ecb7583486add17824","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \"\"\"Executes given command with noauth attributes."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        :param cmd: command to be executed"},{"line_number":90,"context_line":"        :type cmd: string"},{"line_number":91,"context_line":"        :param action: command on cli to run"},{"line_number":92,"context_line":"        :type action: string"},{"line_number":93,"context_line":"        :param flags: optional cli flags to use"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_071e3663","line":90,"updated":"2015-11-05 02:29:39.000000000","message":"+1, this is good habits to have type for each params.","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e2f362eb0aae5d8b11504914b67a1ed618c8ad26","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":117,"context_line":"        if hasattr(self, \u0027os_auth_token\u0027):"},{"line_number":118,"context_line":"            return self._cmd_no_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":119,"context_line":"        else:"},{"line_number":120,"context_line":"            return self.client.cmd_with_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _try_delete_node(self, node_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_3ab577ed","line":119,"updated":"2015-11-05 16:28:27.000000000","message":"nit: else not needed, since return is done in line above.","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"ce815264ca39ad6c233ff243b921676c6f36ddc3","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":117,"context_line":"        if hasattr(self, \u0027os_auth_token\u0027):"},{"line_number":118,"context_line":"            return self._cmd_no_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":119,"context_line":"        else:"},{"line_number":120,"context_line":"            return self.client.cmd_with_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _try_delete_node(self, node_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_da2b0b93","line":119,"in_reply_to":"fa80f949_3ab577ed","updated":"2015-11-05 16:36:21.000000000","message":"right, missed that, thanks","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"f59fc2d7bfe66e661d13e6ecb7583486add17824","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def assertTableHeaders(self, field_names, output_lines):"},{"line_number":146,"context_line":"        \"\"\"Verify that output table has headers item listed in field_names."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param field_names: field names from the output table of the cmd"},{"line_number":149,"context_line":"        :param output_lines: output table from cmd"},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        table \u003d self.parser.table(output_lines)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_a723aaa6","line":148,"updated":"2015-11-05 02:29:39.000000000","message":"nit: can we stay consistent to add type defination here? thanks!","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"476087e43441f1d269adfdc2420dd59ab0bbd0fd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def assertTableHeaders(self, field_names, output_lines):"},{"line_number":146,"context_line":"        \"\"\"Verify that output table has headers item listed in field_names."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param field_names: field names from the output table of the cmd"},{"line_number":149,"context_line":"        :param output_lines: output table from cmd"},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        table \u003d self.parser.table(output_lines)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_987364e7","line":148,"in_reply_to":"fa80f949_a723aaa6","updated":"2015-11-05 08:08:46.000000000","message":"we have removed this asserts in test patch depended on this","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"f59fc2d7bfe66e661d13e6ecb7583486add17824","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def assertNodeDeleted(self, node_id):"},{"line_number":157,"context_line":"        \"\"\"Verify that there isn\u0027t node with given id."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        :param node_id: node id to verify"},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        self.assertNotIn(node_id, self.ironic(\u0027node-list\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_673622e9","line":159,"updated":"2015-11-05 02:29:39.000000000","message":"ditto","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"57e74a6cae5de7f80e149574d855514343918782","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def assertNodeDeleted(self, node_id):"},{"line_number":157,"context_line":"        \"\"\"Verify that there isn\u0027t node with given id."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        :param node_id: node id to verify"},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        self.assertNotIn(node_id, self.ironic(\u0027node-list\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa80f949_ae9ffe01","line":159,"in_reply_to":"fa80f949_673622e9","updated":"2015-11-05 09:10:35.000000000","message":"Also we have removed this assert to in test patch depended on this","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"}],"ironicclient/tests/functional/test_ironicclient.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d4ed03f71ace80510d1cd89251073e9a640611b7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class TestIronicClient(base.ClientTestBase):"},{"line_number":20,"context_line":"    def test_node_list(self):"},{"line_number":21,"context_line":"        list \u003d self.ironic(\u0027node-list\u0027)"},{"line_number":22,"context_line":"        self.assertTableHeaders(list, [\u0027UUID\u0027, \u0027Name\u0027, \u0027Instance UUID\u0027,"},{"line_number":23,"context_line":"                                       \u0027Power State\u0027, \u0027Provisioning State\u0027,"},{"line_number":24,"context_line":"                                       \u0027Maintenance\u0027])"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_ba5d37ee","line":22,"updated":"2015-10-02 13:49:27.000000000","message":"Asserts should be in the form of (expected, result)\n\nSo in this case the arguments should be swapped.\n\nThis is just a convention that is used in Ironic and like to keep things consistent where it makes sense.","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"90910a00c34e45c56e032326d5a2815013e716d9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class TestIronicClient(base.ClientTestBase):"},{"line_number":20,"context_line":"    def test_node_list(self):"},{"line_number":21,"context_line":"        list \u003d self.ironic(\u0027node-list\u0027)"},{"line_number":22,"context_line":"        self.assertTableHeaders(list, [\u0027UUID\u0027, \u0027Name\u0027, \u0027Instance UUID\u0027,"},{"line_number":23,"context_line":"                                       \u0027Power State\u0027, \u0027Provisioning State\u0027,"},{"line_number":24,"context_line":"                                       \u0027Maintenance\u0027])"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_67c947ac","line":22,"in_reply_to":"9a1a9d01_ba5d37ee","updated":"2015-10-02 14:46:57.000000000","message":"I\u0027ll update","commit_id":"714a6b550b06bbade9834818f9a05d084a1f9a2b"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"8b5169ace581e6ad6ac709b5b05a715207af9aee","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestIronicClient(base.FunctionalTestBase):"},{"line_number":20,"context_line":"    def test_node_list(self):"},{"line_number":21,"context_line":"        list \u003d self.ironic(\u0027node-list\u0027)"},{"line_number":22,"context_line":"        self.assertTableHeaders([\u0027UUID\u0027, \u0027Name\u0027, \u0027Instance UUID\u0027,"},{"line_number":23,"context_line":"                                 \u0027Power State\u0027, \u0027Provisioning State\u0027,"},{"line_number":24,"context_line":"                                 \u0027Maintenance\u0027], list)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a26ad4f_25f54c82","line":21,"updated":"2015-10-30 12:30:49.000000000","message":"nit - this shadows builtin list, might be worth changing if you push another revision.","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"4a80463fb6a5f29e1e6d625ac67a9557924daf3b","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestIronicClient(base.FunctionalTestBase):"},{"line_number":20,"context_line":"    def test_node_list(self):"},{"line_number":21,"context_line":"        list \u003d self.ironic(\u0027node-list\u0027)"},{"line_number":22,"context_line":"        self.assertTableHeaders([\u0027UUID\u0027, \u0027Name\u0027, \u0027Instance UUID\u0027,"},{"line_number":23,"context_line":"                                 \u0027Power State\u0027, \u0027Provisioning State\u0027,"},{"line_number":24,"context_line":"                                 \u0027Maintenance\u0027], list)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a26ad4f_85bd406a","line":21,"in_reply_to":"1a26ad4f_25f54c82","updated":"2015-11-02 14:29:03.000000000","message":"Var names is changed in next test case patch","commit_id":"1ced89b9e99ddefbc1e77495f1a430f4e7de6e84"}]}
