)]}'
{"ironicclient/tests/v1/test_node.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":135,"context_line":"        self.assertEqual(len(nodes), 2)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCg%3D","line":137,"updated":"2013-10-30 06:34:25.000000000","message":"typo - associated.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":135,"context_line":"        self.assertEqual(len(nodes), 2)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdRc%3D","line":137,"in_reply_to":"AAAATn%2F%2FraI%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":135,"context_line":"        self.assertEqual(len(nodes), 2)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FraI%3D","line":137,"in_reply_to":"AAAATn%2F%2FuCg%3D","updated":"2013-10-30 14:57:12.000000000","message":"thanks for the catch. will change it.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCY%3D","line":140,"updated":"2013-10-30 06:34:25.000000000","message":"This is a scary API - notnull as a literal string is also a valid uuid (as uuids are opaque data) - lets make sure they are namespace somehow.\n\ne.g.\n\n notnull:\n null:\n uuid:\u003cuuidvaluehere\u003e\n\nor have them come in via separate parameters. I think namespace like I show above would be ok.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"0c0678b5de0dcedf6513fed7fc55f968ea656a7e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fpko%3D","line":140,"in_reply_to":"AAAATn%2F%2FprI%3D","updated":"2013-10-30 21:50:01.000000000","message":"Ah, ok, thats fine then.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FrZA%3D","line":140,"in_reply_to":"AAAATn%2F%2FuCY%3D","updated":"2013-10-30 14:57:12.000000000","message":"Lifeless, Can you be more specific? i.e give an example of the url?  Again, this is the result of the discussion on IRC with the core reviewers.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b1a1199b2ba2b8e76c7985ac76faa59a146a7998","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def test_node_list_asscoated(self):"},{"line_number":138,"context_line":"        nodes \u003d self.mgr.list(associated\u003dTrue)"},{"line_number":139,"context_line":"        expect \u003d ["},{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FprI%3D","line":140,"in_reply_to":"AAAATn%2F%2FuCY%3D","updated":"2013-10-30 20:58:41.000000000","message":"a uuid is not a free-form string. it is (or should be!) checked against uuidutils.is_uuid_like().\n\n\"null\" or \"notnull\" are invalid uuids; both fail this check.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCU%3D","line":143,"updated":"2013-10-30 06:34:25.000000000","message":"Please use HasLength.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdRY%3D","line":143,"in_reply_to":"AAAATn%2F%2FrYw%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnotnull\u0027, {}, None),"},{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FrYw%3D","line":143,"in_reply_to":"AAAATn%2F%2FuCU%3D","updated":"2013-10-30 14:57:12.000000000","message":"Will do.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"},{"line_number":147,"context_line":"        nodes \u003d self.mgr.list(unassociated\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCQ%3D","line":144,"updated":"2013-10-30 06:34:25.000000000","message":"Please put the expected value on the left hand side.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"},{"line_number":147,"context_line":"        nodes \u003d self.mgr.list(unassociated\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Ffw8%3D","line":144,"in_reply_to":"AAAATn%2F%2FrYE%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        ]"},{"line_number":142,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"},{"line_number":147,"context_line":"        nodes \u003d self.mgr.list(unassociated\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FrYE%3D","line":144,"in_reply_to":"AAAATn%2F%2FuCQ%3D","updated":"2013-10-30 14:57:12.000000000","message":"Is this standard? I usually put the expected on the right hand side.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"},{"line_number":147,"context_line":"        nodes \u003d self.mgr.list(unassociated\u003dTrue)"},{"line_number":148,"context_line":"        expect \u003d ["},{"line_number":149,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnull\u0027, {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCc%3D","line":146,"updated":"2013-10-30 06:34:25.000000000","message":"typo - unassociated.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"},{"line_number":147,"context_line":"        nodes \u003d self.mgr.list(unassociated\u003dTrue)"},{"line_number":148,"context_line":"        expect \u003d ["},{"line_number":149,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnull\u0027, {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdRQ%3D","line":146,"in_reply_to":"AAAATn%2F%2FrYg%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":144,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE2[\u0027uuid\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_node_list_unasscoated(self):"},{"line_number":147,"context_line":"        nodes \u003d self.mgr.list(unassociated\u003dTrue)"},{"line_number":148,"context_line":"        expect \u003d ["},{"line_number":149,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003dnull\u0027, {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FrYg%3D","line":146,"in_reply_to":"AAAATn%2F%2FuCc%3D","updated":"2013-10-30 14:57:12.000000000","message":"Will change.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        ]"},{"line_number":151,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":152,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":153,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE1[\u0027uuid\u0027])"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_node_show(self):"},{"line_number":156,"context_line":"        node \u003d self.mgr.get(NODE1[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCI%3D","line":153,"updated":"2013-10-30 06:34:25.000000000","message":"Ditto for these three assertions.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        ]"},{"line_number":151,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":152,"context_line":"        self.assertEqual(len(nodes), 1)"},{"line_number":153,"context_line":"        self.assertEqual(getattr(nodes[0], \u0027uuid\u0027), NODE1[\u0027uuid\u0027])"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def test_node_show(self):"},{"line_number":156,"context_line":"        node \u003d self.mgr.get(NODE1[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdRM%3D","line":153,"in_reply_to":"AAAATn%2F%2FuCI%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/%s\u0027 % NODE1[\u0027uuid\u0027], {}, None),"},{"line_number":159,"context_line":"        ]"},{"line_number":160,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuCE%3D","line":161,"updated":"2013-10-30 06:34:25.000000000","message":"And here.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/%s\u0027 % NODE1[\u0027uuid\u0027], {}, None),"},{"line_number":159,"context_line":"        ]"},{"line_number":160,"context_line":"        self.assertEqual(self.api.calls, expect)"},{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdRI%3D","line":161,"in_reply_to":"AAAATn%2F%2FuCE%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FuBk%3D","line":164,"updated":"2013-10-30 06:34:25.000000000","message":"I don\u0027t like this as a programming API: better to have a different method, e.g. get_by_instance_uuid. But that said we\u0027re still returning a collection, so I\u0027d expec tthis to be just another filter - e.g. we should be able to filter by id and instance_uuid, and the way you have this at the moment it\u0027s not possible.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdRE%3D","line":164,"in_reply_to":"AAAATn%2F%2Fi3Y%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done. Thanks all.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"549d15b3c9396d32f74fb904b2b47c32f8b29007","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fi3Y%3D","line":164,"in_reply_to":"AAAATn%2F%2FnkQ%3D","updated":"2013-11-01 17:07:41.000000000","message":"Taking back my last comment :) As per discussion in IRC I changed my opinion regarding the instance_uuid\u003d. This is still filter.\n\nvote for def list(self, associated\u003dNone) as I commented in ironicclient/v1/node.py","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"07c7fa5aa7be144ffa5ff1972173ba17520e7cfe","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FnkQ%3D","line":164,"in_reply_to":"AAAATn%2F%2FpkQ%3D","updated":"2013-10-31 11:10:08.000000000","message":"I vote for the \"get_by_instance_uuid\" way. \n\nPls correct me if I\u0027m wrong, but I think the collection filters concept cannot be applied here because we\u0027re expecting only one item to be returned, or None (since this is Show method right?). Yea formally we\u0027re querying /v1/nodes/ but it\u0027s not like filtering, it\u0027s still one or nothing, similar to /v1/nodes/\u003cuuid\u003e. There are no need for multiple filters in show, because during the particular query we always have only one value to filter by.\n\nI also have an idea of how we can expose this in the API to avoid these debates, I\u0027ll post it in the API patch set https://review.openstack.org/#/c/53262/6","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"0c0678b5de0dcedf6513fed7fc55f968ea656a7e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FpkQ%3D","line":164,"in_reply_to":"AAAATn%2F%2FpuY%3D","updated":"2013-10-30 21:50:01.000000000","message":"several cases:\n -- if you believe you\u0027re working with a specific node, having previously obtained the uuid, you can be precise.\n -- general pattern for allowing multiple filters (e.g. date changed, mac address, uuid etc - the fact that some combinations are more or less interesting is somewhat incidental\n -- set operations in list operations are more interesting - e.g. uuids in (set) and associated, or uuids in (set) and not associated, or uuids in (set) and instance_ids in (set)","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b1a1199b2ba2b8e76c7985ac76faa59a146a7998","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FpuY%3D","line":164,"in_reply_to":"AAAATn%2F%2FuBk%3D","updated":"2013-10-30 20:58:41.000000000","message":"@lifeless, do you mean filter by both simultaneously? Eg,\n\n  SELECT .. FROM nodes .. WHERE uuid \u003d xxxx and instance_uuid \u003d yyyy;\n\nIf so, please explain the use-case for that.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(node.uuid, NODE1[\u0027uuid\u0027])"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_node_show_by_instance(self):"},{"line_number":164,"context_line":"        node \u003d self.mgr.get(NODE2[\u0027instance_uuid\u0027], instance_uuid\u003dTrue)"},{"line_number":165,"context_line":"        expect \u003d ["},{"line_number":166,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?instance_uuid\u003d%s\u0027 % NODE2[\u0027instance_uuid\u0027],"},{"line_number":167,"context_line":"                     {}, None),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FrWs%3D","line":164,"in_reply_to":"AAAATn%2F%2FuBk%3D","updated":"2013-10-30 14:57:12.000000000","message":"I can change it to a separate API get_by_instance_uuid. And keep get function as it was before, i.e. by node id.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"836a74d860a8e81df608541b91408ae216e6d7fb","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?associated\u003dTrue\u0027, {}, None),"},{"line_number":148,"context_line":"        ]"},{"line_number":149,"context_line":"        self.assertEqual(expect, self.api.calls, )"},{"line_number":150,"context_line":"        self.assertThat(nodes, testtools.matchers.HasLength(1))"},{"line_number":151,"context_line":"        self.assertEqual(NODE2[\u0027uuid\u0027], getattr(nodes[0], \u0027uuid\u0027))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_node_list_unassociated(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Fcjw%3D","line":150,"updated":"2013-11-06 02:18:19.000000000","message":"This is usually written as \n\n self.assertThat(nodes, HasLength(1))\n\nDo this you import it directly:\n from testtools.matchers import HasLength #noqa","commit_id":"b9998ae1cd0b9cc4e72618e18072cc79edda295c"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"6c1096e3730c06a0631c8fd715c8d9e69081c865","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            (\u0027GET\u0027, \u0027/v1/nodes/?associated\u003dTrue\u0027, {}, None),"},{"line_number":148,"context_line":"        ]"},{"line_number":149,"context_line":"        self.assertEqual(expect, self.api.calls, )"},{"line_number":150,"context_line":"        self.assertThat(nodes, testtools.matchers.HasLength(1))"},{"line_number":151,"context_line":"        self.assertEqual(NODE2[\u0027uuid\u0027], getattr(nodes[0], \u0027uuid\u0027))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_node_list_unassociated(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FbKA%3D","line":150,"in_reply_to":"AAAATn%2F%2Fcjw%3D","updated":"2013-11-06 14:44:46.000000000","message":"Done","commit_id":"b9998ae1cd0b9cc4e72618e18072cc79edda295c"}],"ironicclient/v1/node.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        elif unassociated:"},{"line_number":41,"context_line":"            path \u003d \"?instance_uuid\u003dnull\""},{"line_number":42,"context_line":"            return self._list(self._path(path), \"nodes\")"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            return self._list(self._path(), \"nodes\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def list_ports(self, node_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FtSY%3D","line":43,"updated":"2013-10-30 06:34:25.000000000","message":"This would be better as just a filter I think - instance_uuid defaulting to None, and able to be None or a uuid or True (must be set) or False (must not be set).","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        elif unassociated:"},{"line_number":41,"context_line":"            path \u003d \"?instance_uuid\u003dnull\""},{"line_number":42,"context_line":"            return self._list(self._path(path), \"nodes\")"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            return self._list(self._path(), \"nodes\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def list_ports(self, node_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdYM%3D","line":43,"in_reply_to":"AAAATn%2F%2Fiy4%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"549d15b3c9396d32f74fb904b2b47c32f8b29007","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        elif unassociated:"},{"line_number":41,"context_line":"            path \u003d \"?instance_uuid\u003dnull\""},{"line_number":42,"context_line":"            return self._list(self._path(path), \"nodes\")"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            return self._list(self._path(), \"nodes\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def list_ports(self, node_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fiy4%3D","line":43,"in_reply_to":"AAAATn%2F%2Fpro%3D","updated":"2013-11-01 17:07:41.000000000","message":"+1 for \n\ndef list(self, associated\u003dNone)\n  if associated\u003dNone:\n     GET \u0027/nodes/\u0027\n  else:\n     GET \u0027/nodes/?associated\u003d%s\u0027 % str(bool(associated))","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"b1a1199b2ba2b8e76c7985ac76faa59a146a7998","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        elif unassociated:"},{"line_number":41,"context_line":"            path \u003d \"?instance_uuid\u003dnull\""},{"line_number":42,"context_line":"            return self._list(self._path(path), \"nodes\")"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            return self._list(self._path(), \"nodes\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def list_ports(self, node_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fpro%3D","line":43,"in_reply_to":"AAAATn%2F%2Frag%3D","updated":"2013-10-30 20:58:41.000000000","message":"These two parameters sematically overlap, and I would like to condense them","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        elif unassociated:"},{"line_number":41,"context_line":"            path \u003d \"?instance_uuid\u003dnull\""},{"line_number":42,"context_line":"            return self._list(self._path(path), \"nodes\")"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            return self._list(self._path(), \"nodes\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def list_ports(self, node_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Frag%3D","line":43,"in_reply_to":"AAAATn%2F%2FtSY%3D","updated":"2013-10-30 14:57:12.000000000","message":"If the parameter is too confusing, then I suggest we use 3 different functions.\nlist, list_associated and list_unassociated. What do you think?","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"1a001fb3c9b82844ebf6b294a67ad34175bc52d2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def list_ports(self, node_id):"},{"line_number":47,"context_line":"        path \u003d \"%s/ports\" % node_id"},{"line_number":48,"context_line":"        return self._list(self._path(path), \"ports\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def get(self, node_id, instance_uuid\u003dFalse):"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            if instance_uuid:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fk4s%3D","line":49,"updated":"2013-11-01 02:35:23.000000000","message":"Ling, one more comment about code format about \"ports\", I think we should use the single quotes for anything that behaves like an identifier, that is not mandatory by Python, but should be default I think.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def list_ports(self, node_id):"},{"line_number":47,"context_line":"        path \u003d \"%s/ports\" % node_id"},{"line_number":48,"context_line":"        return self._list(self._path(path), \"ports\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def get(self, node_id, instance_uuid\u003dFalse):"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            if instance_uuid:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdYE%3D","line":49,"in_reply_to":"AAAATn%2F%2Fk4s%3D","updated":"2013-11-05 17:26:20.000000000","message":"It is not the code I checked in for this patch.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a49902845da5145f2a49e5e0ec4635c8a8087d5d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                response \u003d self._list(self._path(path))[0]"},{"line_number":55,"context_line":"                #since the API returns a collection of one node,"},{"line_number":56,"context_line":"                #we need convert it to a single node as that"},{"line_number":57,"context_line":"                #it is consistent with the uuid case."},{"line_number":58,"context_line":"                data \u003d getattr(response, \u0027nodes\u0027)[0]"},{"line_number":59,"context_line":"                response \u003d Node(self, data, loaded\u003dTrue)"},{"line_number":60,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Ftfo%3D","line":57,"updated":"2013-10-30 05:50:57.000000000","message":"Ling, minor comment about code format - it is better that we have a space after \u0027#\u0027.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                response \u003d self._list(self._path(path))[0]"},{"line_number":55,"context_line":"                #since the API returns a collection of one node,"},{"line_number":56,"context_line":"                #we need convert it to a single node as that"},{"line_number":57,"context_line":"                #it is consistent with the uuid case."},{"line_number":58,"context_line":"                data \u003d getattr(response, \u0027nodes\u0027)[0]"},{"line_number":59,"context_line":"                response \u003d Node(self, data, loaded\u003dTrue)"},{"line_number":60,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdYA%3D","line":57,"in_reply_to":"AAAATn%2F%2Frcs%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                response \u003d self._list(self._path(path))[0]"},{"line_number":55,"context_line":"                #since the API returns a collection of one node,"},{"line_number":56,"context_line":"                #we need convert it to a single node as that"},{"line_number":57,"context_line":"                #it is consistent with the uuid case."},{"line_number":58,"context_line":"                data \u003d getattr(response, \u0027nodes\u0027)[0]"},{"line_number":59,"context_line":"                response \u003d Node(self, data, loaded\u003dTrue)"},{"line_number":60,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Frcs%3D","line":57,"in_reply_to":"AAAATn%2F%2Ftfo%3D","updated":"2013-10-30 14:57:12.000000000","message":"will do. thanks.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                response \u003d Node(self, data, loaded\u003dTrue)"},{"line_number":60,"context_line":"            else:"},{"line_number":61,"context_line":"                response \u003d self._list(self._path(node_id))[0]"},{"line_number":62,"context_line":"            return response"},{"line_number":63,"context_line":"        except IndexError:"},{"line_number":64,"context_line":"            return None"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FtSQ%3D","line":62,"updated":"2013-10-30 06:34:25.000000000","message":"And this code block clearly doesn\u0027t fit here - I suggest not having it at all.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                response \u003d Node(self, data, loaded\u003dTrue)"},{"line_number":60,"context_line":"            else:"},{"line_number":61,"context_line":"                response \u003d self._list(self._path(node_id))[0]"},{"line_number":62,"context_line":"            return response"},{"line_number":63,"context_line":"        except IndexError:"},{"line_number":64,"context_line":"            return None"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdX8%3D","line":62,"in_reply_to":"AAAATn%2F%2FrbM%3D","updated":"2013-11-05 17:26:20.000000000","message":"Please take look at the new code, per IRC discussion.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                response \u003d Node(self, data, loaded\u003dTrue)"},{"line_number":60,"context_line":"            else:"},{"line_number":61,"context_line":"                response \u003d self._list(self._path(node_id))[0]"},{"line_number":62,"context_line":"            return response"},{"line_number":63,"context_line":"        except IndexError:"},{"line_number":64,"context_line":"            return None"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FrbM%3D","line":62,"in_reply_to":"AAAATn%2F%2FtSQ%3D","updated":"2013-10-30 14:57:12.000000000","message":"Are you suggesting that we have a different function like get_by_instance_uuid?","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"d336a3a4080e7cf6163c8466c3dc21eb58c1001f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            # the REST API. It will return a collection"},{"line_number":57,"context_line":"            # of one node."},{"line_number":58,"context_line":"            path \u003d \"?instance_uuid\u003d%s\" % instance_uuid"},{"line_number":59,"context_line":"            response \u003d self._list(self._path(path))[0]"},{"line_number":60,"context_line":"            # get all the details of the node"},{"line_number":61,"context_line":"            data \u003d getattr(response, \u0027nodes\u0027)"},{"line_number":62,"context_line":"            if len(data) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Fa6o%3D","line":59,"updated":"2013-11-06 16:45:39.000000000","message":"Sorry If I misunderstand this, but can we write it like?\n\ndef get_by_instance_uuid(self, instance_uuid):\n    path \u003d \"?instance_uuid\u003d%s\" % instance_uuid\n    nodes \u003d self._list(self._path(path), \u0027nodes\u0027)\n    # get all the details of the node assuming that \n    # filtering by instance_uuid returns a collection\n    # of one node if successful.\n    if len(nodes) \u003e 0:\n        uuid \u003d nodes[0][\u0027uuid\u0027]\n        return self.get(uuid)\n    else:\n        raise exc.HTTPNotFound()","commit_id":"b70aa9bc8177d5e7b2fec30d13caab9828d27a84"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"aac6177455d2e1adc72ded42cc27ed46dcef163c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            # the REST API. It will return a collection"},{"line_number":57,"context_line":"            # of one node."},{"line_number":58,"context_line":"            path \u003d \"?instance_uuid\u003d%s\" % instance_uuid"},{"line_number":59,"context_line":"            response \u003d self._list(self._path(path))[0]"},{"line_number":60,"context_line":"            # get all the details of the node"},{"line_number":61,"context_line":"            data \u003d getattr(response, \u0027nodes\u0027)"},{"line_number":62,"context_line":"            if len(data) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2FarY%3D","line":59,"in_reply_to":"AAAATn%2F%2Fa6o%3D","updated":"2013-11-06 18:53:56.000000000","message":"Done.\nMax, it is a very good suggestion. I copied your code except one line change.\nuuid \u003d nodes[0][\u0027uuid\u0027]\nto\nuuid \u003d nodes[0][\u0027uuid\u0027]\nThanks a lot!","commit_id":"b70aa9bc8177d5e7b2fec30d13caab9828d27a84"}],"ironicclient/v1/node_shell.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"08188447661aaa7e53382cb47edfb0c2da14f9f1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":37,"context_line":"           default\u003dFalse,"},{"line_number":38,"context_line":"           help\u003d\u0027The id is an instance UUID\u0027)"},{"line_number":39,"context_line":"def do_node_show(cc, args):"},{"line_number":40,"context_line":"    \"\"\"Show a node.\"\"\""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        node \u003d cc.node.get(args.node, args.instance_uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FwcI%3D","line":39,"updated":"2013-10-29 14:21:15.000000000","message":"Possible improvement: Is our CLI capable to provide two mutually exclusive options, like --node-id and --instance-uuid, but check that they cannot be used simultaneously? If so then I think It will be more clear way than current.","commit_id":"411a93fce5900fad41aff76a309943a9d1512d78"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"0b2a9a016036c0eb1c3d24c6f8a434425e799586","unresolved":false,"context_lines":[{"line_number":36,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":37,"context_line":"           default\u003dFalse,"},{"line_number":38,"context_line":"           help\u003d\u0027The id is an instance UUID\u0027)"},{"line_number":39,"context_line":"def do_node_show(cc, args):"},{"line_number":40,"context_line":"    \"\"\"Show a node.\"\"\""},{"line_number":41,"context_line":"    try:"},{"line_number":42,"context_line":"        node \u003d cc.node.get(args.node, args.instance_uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2Fuxc%3D","line":39,"in_reply_to":"AAAATn%2F%2FwcI%3D","updated":"2013-10-29 19:16:52.000000000","message":"Will keep as is per our discussion on IRC. \nnode-show [--instance-uuid] \u003cid\u003e\n\nThanks, Max.","commit_id":"411a93fce5900fad41aff76a309943a9d1512d78"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"08188447661aaa7e53382cb47edfb0c2da14f9f1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"           default\u003dFalse,"},{"line_number":62,"context_line":"           help\u003d\u0027Show the nodes that do not have instance UUID associated\u0027)"},{"line_number":63,"context_line":"def do_node_list(cc, args):"},{"line_number":64,"context_line":"    \"\"\"List nodes.\"\"\""},{"line_number":65,"context_line":"    nodes \u003d cc.node.list(args.associated, args.unassociated)"},{"line_number":66,"context_line":"    field_labels \u003d [\u0027UUID\u0027, \u0027Instance UUID\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FwoQ%3D","line":63,"updated":"2013-10-29 14:21:15.000000000","message":"In this case, If I specify both --associated and --unassociated flags it will show only associated nodes, but logically it probably should be all the nodes, associated and unassociated. To get around this place we again can use mutually exclusive options (if CLI supports this) or we could have something like:\n\n1. One flag --instance_association with choises [\u0027null\u0027, \u0027notnull\u0027] (see https://github.com/openstack/python-ironicclient/blob/master/ironicclient/v1/node_shell.py#L108 for example) with default value \u0027\u0027 or Null.\n\n2. If cc.node.list gets Null in this flag it does not applies this filter at all(e.g. self._list(self._path(), \"nodes\"))\n\n3. Otherwise cc.node.list applies the filter e.g \"?instance_uuid\u003dnotnull\" or \"?instance_uuid\u003dnull\"\n\nThis is just a suggestion. Not sure if this --instance_association will be more obvious to the user then two current flags \u003d)","commit_id":"411a93fce5900fad41aff76a309943a9d1512d78"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"0b2a9a016036c0eb1c3d24c6f8a434425e799586","unresolved":false,"context_lines":[{"line_number":60,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"           default\u003dFalse,"},{"line_number":62,"context_line":"           help\u003d\u0027Show the nodes that do not have instance UUID associated\u0027)"},{"line_number":63,"context_line":"def do_node_list(cc, args):"},{"line_number":64,"context_line":"    \"\"\"List nodes.\"\"\""},{"line_number":65,"context_line":"    nodes \u003d cc.node.list(args.associated, args.unassociated)"},{"line_number":66,"context_line":"    field_labels \u003d [\u0027UUID\u0027, \u0027Instance UUID\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FuxQ%3D","line":63,"in_reply_to":"AAAATn%2F%2FwoQ%3D","updated":"2013-10-29 19:16:52.000000000","message":"I\u0027ll make sure the --assoicated flag and --unassociated flag are mutually exclusive per our discussion on IRC.","commit_id":"411a93fce5900fad41aff76a309943a9d1512d78"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"08188447661aaa7e53382cb47edfb0c2da14f9f1","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    try:"},{"line_number":141,"context_line":"        node \u003d cc.node.update(args.node, patch)"},{"line_number":142,"context_line":"    except exc.HTTPNotFound:"},{"line_number":143,"context_line":"        raise exc.CommandError(_(\u0027Node not found: %s\u0027) % args.node)"},{"line_number":144,"context_line":"    _print_node_show(node)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FwxU%3D","line":143,"updated":"2013-10-29 14:21:15.000000000","message":"Are these changes related to the patch? If so I would suggest to mention in the commit message that we\u0027re also fixing a i18n issues.","commit_id":"411a93fce5900fad41aff76a309943a9d1512d78"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"0b2a9a016036c0eb1c3d24c6f8a434425e799586","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    try:"},{"line_number":141,"context_line":"        node \u003d cc.node.update(args.node, patch)"},{"line_number":142,"context_line":"    except exc.HTTPNotFound:"},{"line_number":143,"context_line":"        raise exc.CommandError(_(\u0027Node not found: %s\u0027) % args.node)"},{"line_number":144,"context_line":"    _print_node_show(node)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FuxE%3D","line":143,"in_reply_to":"AAAATn%2F%2FwxU%3D","updated":"2013-10-29 19:16:52.000000000","message":"Yeah, NobodyCam had me do i18n on this file. I\u0027ll add a sentence on the commit message. Thanks.","commit_id":"411a93fce5900fad41aff76a309943a9d1512d78"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a49902845da5145f2a49e5e0ec4635c8a8087d5d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        node \u003d cc.node.get(args.node, args.instance_uuid)"},{"line_number":43,"context_line":"    except exc.HTTPNotFound:"},{"line_number":44,"context_line":"        if args.instance_uuid:"},{"line_number":45,"context_line":"            error_tmpl \u003d _(\u0027Node not found with instance UUID: %s\u0027)"},{"line_number":46,"context_line":"        else:"},{"line_number":47,"context_line":"            error_tmpl \u003d _(\u0027Node not found: %s\u0027)"},{"line_number":48,"context_line":"        raise exc.CommandError(error_tmpl % args.node)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FtcI%3D","line":45,"updated":"2013-10-30 05:50:57.000000000","message":"Ling, one more minor comment here, Single quotes vs. double quotes, it is better that we use consistent one “double quotes” which is default for the text or local language message in python I think.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        node \u003d cc.node.get(args.node, args.instance_uuid)"},{"line_number":43,"context_line":"    except exc.HTTPNotFound:"},{"line_number":44,"context_line":"        if args.instance_uuid:"},{"line_number":45,"context_line":"            error_tmpl \u003d _(\u0027Node not found with instance UUID: %s\u0027)"},{"line_number":46,"context_line":"        else:"},{"line_number":47,"context_line":"            error_tmpl \u003d _(\u0027Node not found: %s\u0027)"},{"line_number":48,"context_line":"        raise exc.CommandError(error_tmpl % args.node)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Frgw%3D","line":45,"in_reply_to":"AAAATn%2F%2FtcI%3D","updated":"2013-10-30 14:57:12.000000000","message":"Haomeng, please check the rest of the code in this file.  Single quote is used in a lot of places.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"           dest\u003d\u0027unassociated\u0027,"},{"line_number":60,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"           default\u003dFalse,"},{"line_number":62,"context_line":"           help\u003d\u0027Show the nodes that do not have instance UUID associated\u0027)"},{"line_number":63,"context_line":"def do_node_list(cc, args):"},{"line_number":64,"context_line":"    \"\"\"List nodes.\"\"\""},{"line_number":65,"context_line":"    # make sure --associated and --unassociated are mutually exclusive"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Ft54%3D","line":62,"updated":"2013-10-30 06:34:25.000000000","message":"This should also permit instance-uuid queries in my opinion. \u0027show\u0027 isn\u0027t generally a special search facility in other openstack projects.\n\nThat suggests a simpler UI: --instance-uuid\u003dnull/notnull/uuid:\u003cvalue\u003e and just pass that through to the API. That way there is no need to check for conflicts :)","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"5a8e9a782f05ef1fa87049bb96cd30146f9da1e7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"           dest\u003d\u0027unassociated\u0027,"},{"line_number":60,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"           default\u003dFalse,"},{"line_number":62,"context_line":"           help\u003d\u0027Show the nodes that do not have instance UUID associated\u0027)"},{"line_number":63,"context_line":"def do_node_list(cc, args):"},{"line_number":64,"context_line":"    \"\"\"List nodes.\"\"\""},{"line_number":65,"context_line":"    # make sure --associated and --unassociated are mutually exclusive"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FdXs%3D","line":62,"in_reply_to":"AAAATn%2F%2Fizw%3D","updated":"2013-11-05 17:26:20.000000000","message":"Done","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"549d15b3c9396d32f74fb904b2b47c32f8b29007","unresolved":false,"context_lines":[{"line_number":59,"context_line":"           dest\u003d\u0027unassociated\u0027,"},{"line_number":60,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"           default\u003dFalse,"},{"line_number":62,"context_line":"           help\u003d\u0027Show the nodes that do not have instance UUID associated\u0027)"},{"line_number":63,"context_line":"def do_node_list(cc, args):"},{"line_number":64,"context_line":"    \"\"\"List nodes.\"\"\""},{"line_number":65,"context_line":"    # make sure --associated and --unassociated are mutually exclusive"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fizw%3D","line":62,"in_reply_to":"AAAATn%2F%2Frf0%3D","updated":"2013-11-01 17:07:41.000000000","message":"Since we plan to update REST API to have a special \"?associated\u003d\" option for this, I\u0027d update the CLI as well to be consistent with API. So if the user want\u0027s to see only associated he will\n\nironic node-list --associated true\n\nfor unassociated\n\nironic node-list --associated false\n\nfor all the nodes\n\nironic node-list (..--associated should be None here so it won\u0027t be applied to the URL)\n\nSo this will behave consistently like a filter. In future if we want something like \"list all nodes that are powered on\" and \"list all nodes that are powered off\"\nwe will add --powered-on filter and won\u0027t worry about mutually exclusive args etc.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":59,"context_line":"           dest\u003d\u0027unassociated\u0027,"},{"line_number":60,"context_line":"           action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"           default\u003dFalse,"},{"line_number":62,"context_line":"           help\u003d\u0027Show the nodes that do not have instance UUID associated\u0027)"},{"line_number":63,"context_line":"def do_node_list(cc, args):"},{"line_number":64,"context_line":"    \"\"\"List nodes.\"\"\""},{"line_number":65,"context_line":"    # make sure --associated and --unassociated are mutually exclusive"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Frf0%3D","line":62,"in_reply_to":"AAAATn%2F%2Ft54%3D","updated":"2013-10-30 14:57:12.000000000","message":"We have had a long discussion on the this CLI on the IRC. This is what concluded and blessed by Davananda.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            cc.node.delete(n)"},{"line_number":123,"context_line":"        except exc.HTTPNotFound:"},{"line_number":124,"context_line":"            raise exc.CommandError(_(\u0027Node not found: %s\u0027) % n)"},{"line_number":125,"context_line":"        print _(\u0027Deleted node %s\u0027) % n"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"@utils.arg(\u0027node\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FtS0%3D","line":125,"updated":"2013-10-30 06:34:25.000000000","message":"This is an unrelated change, please put it in a dedicated changeset.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            cc.node.delete(n)"},{"line_number":123,"context_line":"        except exc.HTTPNotFound:"},{"line_number":124,"context_line":"            raise exc.CommandError(_(\u0027Node not found: %s\u0027) % n)"},{"line_number":125,"context_line":"        print _(\u0027Deleted node %s\u0027) % n"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"@utils.arg(\u0027node\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Fre0%3D","line":125,"in_reply_to":"AAAATn%2F%2FtS0%3D","updated":"2013-10-30 14:57:12.000000000","message":"Lifeless, thanks for the comment. But, \nI got 3 different reviews for this from 3 different people\".\n1. add i18n for this file with this patch.\n2. mention it in commit message. \nI did both of them in this set. now you ask me to put it in a dedicated changeset. I do not know what to do now. :-).","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a49902845da5145f2a49e5e0ec4635c8a8087d5d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        except exc.HTTPNotFound:"},{"line_number":124,"context_line":"            raise exc.CommandError(_(\u0027Node not found: %s\u0027) % n)"},{"line_number":125,"context_line":"        print _(\u0027Deleted node %s\u0027) % n"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"@utils.arg(\u0027node\u0027,"},{"line_number":129,"context_line":"           metavar\u003d\u0027\u003cnode id\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FtcE%3D","line":126,"updated":"2013-10-30 05:50:57.000000000","message":"Good catch for i18n supporting:)","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"236115f69e9365524016a94c35dccc092b223c9f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    try:"},{"line_number":146,"context_line":"        node \u003d cc.node.update(args.node, patch)"},{"line_number":147,"context_line":"    except exc.HTTPNotFound:"},{"line_number":148,"context_line":"        raise exc.CommandError(_(\u0027Node not found: %s\u0027) % args.node)"},{"line_number":149,"context_line":"    _print_node_show(node)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FtSs%3D","line":148,"updated":"2013-10-30 06:34:25.000000000","message":"Ditto.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"307f0d6708cc08245bb7bc76b19d6b54b7c7bd67","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    try:"},{"line_number":146,"context_line":"        node \u003d cc.node.update(args.node, patch)"},{"line_number":147,"context_line":"    except exc.HTTPNotFound:"},{"line_number":148,"context_line":"        raise exc.CommandError(_(\u0027Node not found: %s\u0027) % args.node)"},{"line_number":149,"context_line":"    _print_node_show(node)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2Frek%3D","line":148,"in_reply_to":"AAAATn%2F%2FtSs%3D","updated":"2013-10-30 14:57:12.000000000","message":"See my response on line 125.","commit_id":"727bc54dca46f1b4c8d4c6333e1c3d36eef65de2"}]}
