)]}'
{"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"413ac677794a84c3bca6710c9b3dda759ba52be5","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"                       of the resource to be returned."},{"line_number":1023,"context_line":"        \"\"\""},{"line_number":1024,"context_line":"        api_utils.check_allow_specify_fields(fields)"},{"line_number":1025,"context_line":"        api_utils.check_for_invalid_state_and_allow_filter(provision_state)"},{"line_number":1026,"context_line":"        if fields is None:"},{"line_number":1027,"context_line":"            fields \u003d _DEFAULT_RETURN_FIELDS"},{"line_number":1028,"context_line":"        return self._get_nodes_collection(chassis_uuid, instance_uuid,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_29acd48a","line":1025,"range":{"start_line":1025,"start_character":8,"end_line":1025,"end_character":75},"updated":"2016-01-07 07:34:08.000000000","message":"need to add a method like this to check whether the required version is being requested, and raise NotAcceptable() if pecan.request.version.minor \u003c versions.MINOR_15_DRIVER_FILTER","commit_id":"39b8061d4b3675c805afef93dcb3fc7e216b9f31"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"34068660389b533d2c575740e50ea4cccaac8c4c","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"                       of the resource to be returned."},{"line_number":1023,"context_line":"        \"\"\""},{"line_number":1024,"context_line":"        api_utils.check_allow_specify_fields(fields)"},{"line_number":1025,"context_line":"        api_utils.check_for_invalid_state_and_allow_filter(provision_state)"},{"line_number":1026,"context_line":"        if fields is None:"},{"line_number":1027,"context_line":"            fields \u003d _DEFAULT_RETURN_FIELDS"},{"line_number":1028,"context_line":"        return self._get_nodes_collection(chassis_uuid, instance_uuid,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_acb21204","line":1025,"range":{"start_line":1025,"start_character":8,"end_line":1025,"end_character":75},"in_reply_to":"fa69d971_29acd48a","updated":"2016-01-07 07:57:30.000000000","message":"Seems like this is another patch. I will make a new patch to generate the check function to make it happen, if you agree with me. :)","commit_id":"39b8061d4b3675c805afef93dcb3fc7e216b9f31"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e3960847d15a14633fa05dfbf1fa9305bc03731a","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_15_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_8369c3c0","line":224,"updated":"2016-01-28 17:24:17.000000000","message":"This raises a different exception than is being generated by older versions of Ironic:\n\n   \"error_message\" : \"{\\\"debuginfo\\\": null, \\\"faultcode\\\": \\\"Client\\\", \\\"faultstring\\\": \\\"Unknown argument: \\\\\\\"driver\\\\\\\"\\\"}\"","commit_id":"e12bcd4424ff5b69546145b1f1a3af3a956535ab"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"275e7c6efb90c8b3bee0122ace22436ddabc4be4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_15_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_c645e56e","line":224,"in_reply_to":"7a5de9d1_041572e3","updated":"2016-02-02 08:17:33.000000000","message":"I think devananda is suggesting keep the return resp body unchanged?\njust as you post, before your patch with 1.14:\n{\"error_message\" : \"{\\\"debuginfo\\\": null, \\\"faultcode\\\": \\\"Client\\\", \\\"faultstring\\\": \\\"Unknown argument: \\\\\\\"driver\\\\\\\"\\\"}\"}\n\nafter your patch with 1.14:\n{\"error_message\": \"{\\\"debuginfo\\\": null, \\\"faultcode\\\": \\\"Client\\\", \\\"faultstring\\\": \\\"Request not acceptable.\\\"}\"}\n\nSo keep the raise exception consistency","commit_id":"e12bcd4424ff5b69546145b1f1a3af3a956535ab"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"2a68516b488f7e8cc25d8675a3d3e780d11b2c4b","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_15_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_041572e3","line":224,"in_reply_to":"7a5de9d1_6181b8fa","updated":"2016-02-01 08:32:55.000000000","message":"The \u0027detail\u0027 flow with an older version:\nhttp://paste.openstack.org/show/485558/","commit_id":"e12bcd4424ff5b69546145b1f1a3af3a956535ab"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"0d2ec2e4e7289d41c4d1b1178377339d4f7f9de0","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_15_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_6181b8fa","line":224,"in_reply_to":"7a5de9d1_8369c3c0","updated":"2016-02-01 08:16:32.000000000","message":"Thanks Devananda. I made a clean env with the api patch to try, got a result as follows with an older version:\n{\"error_message\": \"{\\\"debuginfo\\\": null, \\\"faultcode\\\": \\\"Client\\\", \\\"faultstring\\\": \\\"Request not acceptable.\\\"}\"}\n\nThe \"\\\"faultstring\\\": \\\"Unknown argument: \\\\\\\"driver\\\\\\\"\\\"\" exception seems like missing the \u0027driver\u0027 input parameter in \u0027get_all\u0027 or \u0027detail\u0027 function.\nPlease check the detailed flow of my tests and correct me if I am wrong:\nhttp://paste.openstack.org/show/485554/","commit_id":"e12bcd4424ff5b69546145b1f1a3af3a956535ab"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"03c7a1e83f3e7c1002f3ccc937242aa09dccd678","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_15_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a5ae5dd_0e31caa2","line":224,"in_reply_to":"7a5de9d1_c645e56e","updated":"2016-02-03 04:01:29.000000000","message":"Oh, I misunderstood that, thanks Tan for pointing that.\n\nHi, Devananda. I am confused that the exception raised of other version check is NotAcceptable, like \u0027management_verbs\u0027 and \u0027specify_fields\u0027, which generates the resp body as:\n{\"error_message\": \"{\\\"debuginfo\\\": null, \\\"faultcode\\\": \\\"Client\\\", \\\"faultstring\\\": \\\"Request not acceptable.\\\"}\"}.\n\nSo I thought the version check of driver filter was the same and followed that rule then. Can you give me some clues why need the same exception here? Thanks. :)","commit_id":"e12bcd4424ff5b69546145b1f1a3af3a956535ab"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"38d39969d6b51ccc4bb1524bdb9cfef8a68f14b7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_16_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_d5da8ae7","line":224,"updated":"2016-02-29 12:01:06.000000000","message":"IMO would be nice to provide a custom message in this case, describing the failure reason and indicating the minimal required API version.","commit_id":"c64cdb7a0981eae594ae8c3b9332de3c3d12d8de"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"df8229c2e043822badc920ef22d587cf88852385","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_16_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def initial_node_provision_state():"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_21a8aa76","line":224,"in_reply_to":"9aed3d3a_d5da8ae7","updated":"2016-03-01 03:21:59.000000000","message":"Thanks for your comment, Pavlo. At the beginning this NotAcceptable exception raised without detailed message is just like the other version checks to keep consistency. Will add a detailed message here for \u0027driver\u0027 version check.\n\nAs there are many other version related check, will make a following patch to cover all the others.\n\nWDYT?","commit_id":"c64cdb7a0981eae594ae8c3b9332de3c3d12d8de"},{"author":{"_account_id":7404,"name":"Ethan Lynn","email":"xuanlangjian@gmail.com","username":"GaryLynn"},"change_message_id":"8441c3afc46dcf920cbb8e1429fadc5523a879a4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_16_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable(\"Request not acceptable. The minimal \""},{"line_number":225,"context_line":"                                      \"required API version should be \""},{"line_number":226,"context_line":"                                      \"%(base)s.%(opr)s\" %"},{"line_number":227,"context_line":"                                      {\u0027base\u0027: versions.BASE_VERSION,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_fc9945c5","line":224,"range":{"start_line":224,"start_character":37,"end_line":224,"end_character":39},"updated":"2016-03-01 03:37:58.000000000","message":"Is it better to use _() to translate this message?","commit_id":"ee486df2c699356701b85e3e55ffd359e10750ec"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"27d8abd5d8c2219b6a2f7d7117e74ef070b78b68","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_16_DRIVER_FILTER):"},{"line_number":224,"context_line":"        raise exception.NotAcceptable(\"Request not acceptable. The minimal \""},{"line_number":225,"context_line":"                                      \"required API version should be \""},{"line_number":226,"context_line":"                                      \"%(base)s.%(opr)s\" %"},{"line_number":227,"context_line":"                                      {\u0027base\u0027: versions.BASE_VERSION,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_7cf1b56a","line":224,"range":{"start_line":224,"start_character":37,"end_line":224,"end_character":39},"in_reply_to":"9aed3d3a_fc9945c5","updated":"2016-03-01 04:08:02.000000000","message":"Thanks Ethan, will address in the next patch.","commit_id":"ee486df2c699356701b85e3e55ffd359e10750ec"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f9985aef40f7ac2ef51aff629c6522f89ad2dd22","unresolved":false,"context_lines":[{"line_number":217,"context_line":"def check_allow_specify_driver(driver):"},{"line_number":218,"context_line":"    \"\"\"Check if filtering nodes by driver is allowed."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    Version 1.16 of the API allows filter nodes by  driver."},{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_16_DRIVER_FILTER):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9aed3d3a_7f3a3de8","line":220,"range":{"start_line":220,"start_character":50,"end_line":220,"end_character":52},"updated":"2016-03-01 09:39:39.000000000","message":"Nit: remove the extra space.","commit_id":"618059b19d6ed2a3fc78e2337b7c0b7ad3fb1e65"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"0c6835ddaa58d86107f1552e0bea45c5eb5aae8e","unresolved":false,"context_lines":[{"line_number":217,"context_line":"def check_allow_specify_driver(driver):"},{"line_number":218,"context_line":"    \"\"\"Check if filtering nodes by driver is allowed."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    Version 1.16 of the API allows filter nodes by  driver."},{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":"    if (driver is not None and pecan.request.version.minor \u003c"},{"line_number":223,"context_line":"            versions.MINOR_16_DRIVER_FILTER):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9aed3d3a_2d66cf29","line":220,"range":{"start_line":220,"start_character":50,"end_line":220,"end_character":52},"in_reply_to":"9aed3d3a_7f3a3de8","updated":"2016-03-01 09:59:40.000000000","message":"Thanks Zhenguo, good catch, will remove in the next patch.","commit_id":"618059b19d6ed2a3fc78e2337b7c0b7ad3fb1e65"}],"ironic/api/controllers/v1/versions.py":[{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"907f80bccd8040d850571f2fa54eea9b3760a324","unresolved":false,"context_lines":[{"line_number":62,"context_line":"MINOR_12_RAID_CONFIG \u003d 12"},{"line_number":63,"context_line":"MINOR_13_ABORT_VERB \u003d 13"},{"line_number":64,"context_line":"MINOR_14_LINKS_NODESTATES_DRIVERPROPERTIES \u003d 14"},{"line_number":65,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":66,"context_line":"MINOR_15_MANUAL_CLEAN \u003d 15"},{"line_number":67,"context_line":"MINOR_16_DRIVER_FILTER \u003d 16"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dae33548_7878202c","line":65,"updated":"2016-02-16 08:19:35.000000000","message":"please remove this :)","commit_id":"2a2e7ca3618a136d578b7cd5bb3926fa423ad9b1"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"b304edb30fe921c5ccb2ab1334bdc0ef6c802a06","unresolved":false,"context_lines":[{"line_number":62,"context_line":"MINOR_12_RAID_CONFIG \u003d 12"},{"line_number":63,"context_line":"MINOR_13_ABORT_VERB \u003d 13"},{"line_number":64,"context_line":"MINOR_14_LINKS_NODESTATES_DRIVERPROPERTIES \u003d 14"},{"line_number":65,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":66,"context_line":"MINOR_15_MANUAL_CLEAN \u003d 15"},{"line_number":67,"context_line":"MINOR_16_DRIVER_FILTER \u003d 16"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dae33548_b81c68c2","line":65,"in_reply_to":"dae33548_7878202c","updated":"2016-02-16 08:26:27.000000000","message":"My bad. Thanks Tan.","commit_id":"2a2e7ca3618a136d578b7cd5bb3926fa423ad9b1"}],"ironic/tests/unit/api/v1/test_nodes.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"fd81eb0112dbdfbf3610ae848bea9c857761d094","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    def test_get_nodes_by_invalid_driver(self):"},{"line_number":716,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027)"},{"line_number":717,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":718,"context_line":"        self.assertEqual([], uuids)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_get_console_information(self):"},{"line_number":721,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_73295de5","line":718,"range":{"start_line":718,"start_character":8,"end_line":718,"end_character":35},"updated":"2016-01-07 06:31:26.000000000","message":"nits: \n\nself.assertThat(uuids, HasLength(0))","commit_id":"d67d5c3c0336aedfa7671b5b5a781992d6cb1f87"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"ea7d654a6b0e22ee48d4fe4c4bff3d2c094d28bb","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    def test_get_nodes_by_invalid_driver(self):"},{"line_number":716,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027)"},{"line_number":717,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":718,"context_line":"        self.assertEqual([], uuids)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_get_console_information(self):"},{"line_number":721,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_5670c73f","line":718,"range":{"start_line":718,"start_character":8,"end_line":718,"end_character":35},"in_reply_to":"fa69d971_73295de5","updated":"2016-01-07 07:03:47.000000000","message":"Thanks, will address it in the next patch.","commit_id":"d67d5c3c0336aedfa7671b5b5a781992d6cb1f87"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"fd81eb0112dbdfbf3610ae848bea9c857761d094","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027)"},{"line_number":717,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":718,"context_line":"        self.assertEqual([], uuids)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_get_console_information(self):"},{"line_number":721,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"},{"line_number":722,"context_line":"        expected_console_info \u003d {\u0027test\u0027: \u0027test-data\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_33e445aa","line":719,"range":{"start_line":719,"start_character":0,"end_line":719,"end_character":0},"updated":"2016-01-07 06:31:26.000000000","message":"and can we add a case to check behavior if the input driver value is None/Null?","commit_id":"d67d5c3c0336aedfa7671b5b5a781992d6cb1f87"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"ea7d654a6b0e22ee48d4fe4c4bff3d2c094d28bb","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027)"},{"line_number":717,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":718,"context_line":"        self.assertEqual([], uuids)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_get_console_information(self):"},{"line_number":721,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"},{"line_number":722,"context_line":"        expected_console_info \u003d {\u0027test\u0027: \u0027test-data\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_36e433aa","line":719,"range":{"start_line":719,"start_character":0,"end_line":719,"end_character":0},"in_reply_to":"fa69d971_33e445aa","updated":"2016-01-07 07:03:47.000000000","message":"I\u0027m not quite sure the \u0027None\u0027 value is a new test case, for if the driver is set to \u0027None\u0027, the driver filter is ignored and not used. But for a request like \u0027/nodes?driver\u003dNone\u0027, I think this is the same as invalid driver case.","commit_id":"d67d5c3c0336aedfa7671b5b5a781992d6cb1f87"},{"author":{"_account_id":7404,"name":"Ethan Lynn","email":"xuanlangjian@gmail.com","username":"GaryLynn"},"change_message_id":"f12633501874dc4f9717fbb59e7912fbcd3890f8","unresolved":false,"context_lines":[{"line_number":725,"context_line":"            \u0027/nodes?driver\u003dfake\u0027,"},{"line_number":726,"context_line":"            headers\u003d{api_base.Version.string: str(api_v1.MIN_VER)},"},{"line_number":727,"context_line":"            expect_errors\u003dTrue)"},{"line_number":728,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_int)"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def test_get_console_information(self):"},{"line_number":731,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_9c28f934","line":728,"range":{"start_line":728,"start_character":62,"end_line":728,"end_character":72},"updated":"2016-03-01 03:42:48.000000000","message":"I saw other tests seems use status_code here, are they the same? Since we add error message in this patch, is it better to add?\n\n  self.assertTrue(response.json[\u0027error_message\u0027])","commit_id":"ee486df2c699356701b85e3e55ffd359e10750ec"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"27d8abd5d8c2219b6a2f7d7117e74ef070b78b68","unresolved":false,"context_lines":[{"line_number":725,"context_line":"            \u0027/nodes?driver\u003dfake\u0027,"},{"line_number":726,"context_line":"            headers\u003d{api_base.Version.string: str(api_v1.MIN_VER)},"},{"line_number":727,"context_line":"            expect_errors\u003dTrue)"},{"line_number":728,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_int)"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def test_get_console_information(self):"},{"line_number":731,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aed3d3a_9ceab972","line":728,"range":{"start_line":728,"start_character":62,"end_line":728,"end_character":72},"in_reply_to":"9aed3d3a_9c28f934","updated":"2016-03-01 04:08:02.000000000","message":"Thanks Ethan, will address in the next patch.","commit_id":"ee486df2c699356701b85e3e55ffd359e10750ec"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"f9985aef40f7ac2ef51aff629c6522f89ad2dd22","unresolved":false,"context_lines":[{"line_number":717,"context_line":"    def test_get_nodes_by_invalid_driver(self):"},{"line_number":718,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027,"},{"line_number":719,"context_line":"                             headers\u003d{api_base.Version.string: \"1.16\"})"},{"line_number":720,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":721,"context_line":"        self.assertThat(uuids, HasLength(0))"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def test_get_nodes_by_driver_invalid_api_version(self):"},{"line_number":724,"context_line":"        response \u003d self.get_json("}],"source_content_type":"text/x-python","patch_set":18,"id":"9aed3d3a_422e82fb","line":721,"range":{"start_line":720,"start_character":8,"end_line":721,"end_character":44},"updated":"2016-03-01 09:39:39.000000000","message":"I think we can directly use self.assertThat(data[\u0027nodes\u0027], HasLength(0)), no need to extract uuids from blank node list.","commit_id":"618059b19d6ed2a3fc78e2337b7c0b7ad3fb1e65"},{"author":{"_account_id":7404,"name":"Ethan Lynn","email":"xuanlangjian@gmail.com","username":"GaryLynn"},"change_message_id":"a69bf0beda0761e4912f8043472ee97450e1b43c","unresolved":false,"context_lines":[{"line_number":717,"context_line":"    def test_get_nodes_by_invalid_driver(self):"},{"line_number":718,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027,"},{"line_number":719,"context_line":"                             headers\u003d{api_base.Version.string: \"1.16\"})"},{"line_number":720,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":721,"context_line":"        self.assertThat(uuids, HasLength(0))"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def test_get_nodes_by_driver_invalid_api_version(self):"},{"line_number":724,"context_line":"        response \u003d self.get_json("}],"source_content_type":"text/x-python","patch_set":18,"id":"9aed3d3a_8d239bbc","line":721,"range":{"start_line":720,"start_character":8,"end_line":721,"end_character":44},"in_reply_to":"9aed3d3a_422e82fb","updated":"2016-03-01 09:50:32.000000000","message":"How about just self.assertEqual(0, len(data[\u0027nodes\u0027])) ?","commit_id":"618059b19d6ed2a3fc78e2337b7c0b7ad3fb1e65"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"0c6835ddaa58d86107f1552e0bea45c5eb5aae8e","unresolved":false,"context_lines":[{"line_number":717,"context_line":"    def test_get_nodes_by_invalid_driver(self):"},{"line_number":718,"context_line":"        data \u003d self.get_json(\u0027/nodes?driver\u003dtest\u0027,"},{"line_number":719,"context_line":"                             headers\u003d{api_base.Version.string: \"1.16\"})"},{"line_number":720,"context_line":"        uuids \u003d [n[\u0027uuid\u0027] for n in data[\u0027nodes\u0027]]"},{"line_number":721,"context_line":"        self.assertThat(uuids, HasLength(0))"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def test_get_nodes_by_driver_invalid_api_version(self):"},{"line_number":724,"context_line":"        response \u003d self.get_json("}],"source_content_type":"text/x-python","patch_set":18,"id":"9aed3d3a_680e05e6","line":721,"range":{"start_line":720,"start_character":8,"end_line":721,"end_character":44},"in_reply_to":"9aed3d3a_8d239bbc","updated":"2016-03-01 09:59:40.000000000","message":"Thanks Zhenguo and Ethan, will address in the next patch using the assertEqual way.","commit_id":"618059b19d6ed2a3fc78e2337b7c0b7ad3fb1e65"}],"releasenotes/notes/list-nodes-by-driver-a1ab9f2b73f652f8.yaml":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ea7f573e148386a06667ef47d599c4252e9f747c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - List nodes using the same driver."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"fa69d971_1663cb42","line":3,"updated":"2016-01-08 12:47:41.000000000","message":"I find this release note a bit too light, it should at least say that it is something in the ReST API.\n\n\"Add support for filtering nodes using the same driver via the API\".\n\nOr something along those lines","commit_id":"084261856f12bdaf97defdd1270768535627329a"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"daf217b9a5b25ac0016265f93f307ce0e8907732","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - List nodes using the same driver."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"fa69d971_51c35889","line":3,"in_reply_to":"fa69d971_1663cb42","updated":"2016-01-11 02:29:24.000000000","message":"Thanks Lucas, will address a new patch.","commit_id":"084261856f12bdaf97defdd1270768535627329a"}]}
