)]}'
{"openstack/resource2.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        for key in consumed_keys:"},{"line_number":322,"context_line":"            attrs.pop(key)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return relevant_attrs"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_8fa4c9a6","line":323,"updated":"2016-03-30 12:59:53.000000000","message":"Suggestion: add a note or todo here about how to handle non-relevant attrs like is in the commit message.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"a77b1a310d9e4a9371754d99f227ab092e0e88bd","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        for key in consumed_keys:"},{"line_number":322,"context_line":"            attrs.pop(key)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return relevant_attrs"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_5889a425","line":323,"in_reply_to":"ba0121b8_835e3274","updated":"2016-03-30 13:54:00.000000000","message":"That\u0027s fine.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        for key in consumed_keys:"},{"line_number":322,"context_line":"            attrs.pop(key)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return relevant_attrs"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_835e3274","line":323,"in_reply_to":"ba0121b8_8fa4c9a6","updated":"2016-03-30 13:40:17.000000000","message":"I don\u0027t think this is the right location to be solving that, as the method gets called three times with different sets of arguments. Does the comment at line 252 work well enough? I think that\u0027s where we\u0027d want to add any sort of code for dealing with unused attrs.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":492,"context_line":"            response \u003d session.post(request.uri, endpoint_filter\u003dself.service,"},{"line_number":493,"context_line":"                                    json\u003drequest.body, headers\u003drequest.headers)"},{"line_number":494,"context_line":"        else:"},{"line_number":495,"context_line":"            # TODO(briancurtin) can you even create with an ID???"},{"line_number":496,"context_line":"            request \u003d self._prepare_request(requires_id\u003dTrue,"},{"line_number":497,"context_line":"                                            prepend_key\u003dTrue)"},{"line_number":498,"context_line":"            response \u003d session.put(request.uri, endpoint_filter\u003dself.service,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_af4a6daa","line":495,"updated":"2016-03-30 12:59:53.000000000","message":"Nova flavor-create allows it (http://developer.openstack.org/api-ref-compute-v2.1.html)","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":492,"context_line":"            response \u003d session.post(request.uri, endpoint_filter\u003dself.service,"},{"line_number":493,"context_line":"                                    json\u003drequest.body, headers\u003drequest.headers)"},{"line_number":494,"context_line":"        else:"},{"line_number":495,"context_line":"            # TODO(briancurtin) can you even create with an ID???"},{"line_number":496,"context_line":"            request \u003d self._prepare_request(requires_id\u003dTrue,"},{"line_number":497,"context_line":"                                            prepend_key\u003dTrue)"},{"line_number":498,"context_line":"            response \u003d session.put(request.uri, endpoint_filter\u003dself.service,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_83bab26c","line":495,"in_reply_to":"ba0121b8_af4a6daa","updated":"2016-03-30 13:40:17.000000000","message":"removing the comment","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        \"\"\"Given a list of results, return the match\"\"\""},{"line_number":664,"context_line":"        the_result \u003d None"},{"line_number":665,"context_line":"        for maybe_result in results:"},{"line_number":666,"context_line":"            id_value \u003d maybe_result.id"},{"line_number":667,"context_line":"            name_value \u003d maybe_result.name"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if (id_value \u003d\u003d name_or_id) or (name_value \u003d\u003d name_or_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_fad3815d","line":666,"updated":"2016-03-30 12:59:53.000000000","message":"Does this need to handle the actual ID attribute?","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        \"\"\"Given a list of results, return the match\"\"\""},{"line_number":664,"context_line":"        the_result \u003d None"},{"line_number":665,"context_line":"        for maybe_result in results:"},{"line_number":666,"context_line":"            id_value \u003d maybe_result.id"},{"line_number":667,"context_line":"            name_value \u003d maybe_result.name"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if (id_value \u003d\u003d name_or_id) or (name_value \u003d\u003d name_or_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_154d356c","line":666,"in_reply_to":"ba0121b8_fad3815d","updated":"2016-03-30 13:40:17.000000000","message":"This should actually be looking up the \"id\" attribute or a resource2.Body specified with alternate_id\u003dTrue. Fixing this.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":664,"context_line":"        the_result \u003d None"},{"line_number":665,"context_line":"        for maybe_result in results:"},{"line_number":666,"context_line":"            id_value \u003d maybe_result.id"},{"line_number":667,"context_line":"            name_value \u003d maybe_result.name"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if (id_value \u003d\u003d name_or_id) or (name_value \u003d\u003d name_or_id):"},{"line_number":670,"context_line":"                # Only allow one resource to be found. If we already"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_da631ddb","line":667,"updated":"2016-03-30 12:59:53.000000000","message":"Some resources may not have a name.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"a77b1a310d9e4a9371754d99f227ab092e0e88bd","unresolved":false,"context_lines":[{"line_number":664,"context_line":"        the_result \u003d None"},{"line_number":665,"context_line":"        for maybe_result in results:"},{"line_number":666,"context_line":"            id_value \u003d maybe_result.id"},{"line_number":667,"context_line":"            name_value \u003d maybe_result.name"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if (id_value \u003d\u003d name_or_id) or (name_value \u003d\u003d name_or_id):"},{"line_number":670,"context_line":"                # Only allow one resource to be found. If we already"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_f8735813","line":667,"in_reply_to":"ba0121b8_6332fe11","updated":"2016-03-30 13:54:00.000000000","message":"I think this is fine as-is...I was just concerned that this would fail if the resource didn\u0027t have a name.  But now I see name is part of Resource.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":664,"context_line":"        the_result \u003d None"},{"line_number":665,"context_line":"        for maybe_result in results:"},{"line_number":666,"context_line":"            id_value \u003d maybe_result.id"},{"line_number":667,"context_line":"            name_value \u003d maybe_result.name"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if (id_value \u003d\u003d name_or_id) or (name_value \u003d\u003d name_or_id):"},{"line_number":670,"context_line":"                # Only allow one resource to be found. If we already"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_6332fe11","line":667,"in_reply_to":"ba0121b8_da631ddb","updated":"2016-03-30 13:40:17.000000000","message":"That\u0027s fine, they just won\u0027t as easily find matches and they can specialize a find method as needed.\n\nDo you think it\u0027s worth having alternate_name like we have alternate_id? That previous concept of name_attribute and then looking up a different attribute as the name is gone.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"}],"openstack/tests/unit/test_resource2.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        self.assertEqual({\"location\": \"location\", \"first_name\": \"first-name\"},"},{"line_number":354,"context_line":"                         sot._mapping)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_transform_unmapped(self):"},{"line_number":357,"context_line":"        location \u003d \"location\""},{"line_number":358,"context_line":"        mapping \u003d {\"first_name\": \"first-name\"}"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_f5f1d26b","line":356,"updated":"2016-03-30 12:59:53.000000000","message":"Should \"transform\" be \"transpose\" to match method being tested?","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        self.assertEqual({\"location\": \"location\", \"first_name\": \"first-name\"},"},{"line_number":354,"context_line":"                         sot._mapping)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_transform_unmapped(self):"},{"line_number":357,"context_line":"        location \u003d \"location\""},{"line_number":358,"context_line":"        mapping \u003d {\"first_name\": \"first-name\"}"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_95aca5a1","line":356,"in_reply_to":"ba0121b8_f5f1d26b","updated":"2016-03-30 13:40:17.000000000","message":"Done","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        self.assertEqual({\"location\": \"Brooklyn\", \"first-name\": \"Brian\"},"},{"line_number":367,"context_line":"                         result)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def test_transform_not_in_query(self):"},{"line_number":370,"context_line":"        location \u003d \"location\""},{"line_number":371,"context_line":"        mapping \u003d {\"first_name\": \"first-name\"}"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_35ecea8e","line":369,"updated":"2016-03-30 12:59:53.000000000","message":"Should \"transform\" be \"transpose\" to match method being tested?","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        self.assertEqual({\"location\": \"Brooklyn\", \"first-name\": \"Brian\"},"},{"line_number":367,"context_line":"                         result)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def test_transform_not_in_query(self):"},{"line_number":370,"context_line":"        location \u003d \"location\""},{"line_number":371,"context_line":"        mapping \u003d {\"first_name\": \"first-name\"}"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_15a1b5a3","line":369,"in_reply_to":"ba0121b8_35ecea8e","updated":"2016-03-30 13:40:17.000000000","message":"Done","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"class TestResource(base.TestCase):"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def test_initialize_basic(self):"},{"line_number":384,"context_line":"        body \u003d {\"body\": 1}"},{"line_number":385,"context_line":"        header \u003d {\"header\": 2}"},{"line_number":386,"context_line":"        uri \u003d {\"uri\": 3}"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_d582ce93","line":383,"updated":"2016-03-30 12:59:53.000000000","message":"Should the class defaults for allow_create, etc. be asserted?","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"class TestResource(base.TestCase):"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def test_initialize_basic(self):"},{"line_number":384,"context_line":"        body \u003d {\"body\": 1}"},{"line_number":385,"context_line":"        header \u003d {\"header\": 2}"},{"line_number":386,"context_line":"        uri \u003d {\"uri\": 3}"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_55896d25","line":383,"in_reply_to":"ba0121b8_d582ce93","updated":"2016-03-30 13:40:17.000000000","message":"Done","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        self.sot._header.dirty \u003d dict()"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        result \u003d self.sot.update(self.session)"},{"line_number":856,"context_line":"        self.assertEqual(result, self.sot)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"    def test_delete(self):"},{"line_number":859,"context_line":"        result \u003d self.sot.delete(self.session)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_081a416e","line":856,"updated":"2016-03-30 12:59:53.000000000","message":"Should this also assert no calls were made?","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        self.sot._header.dirty \u003d dict()"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        result \u003d self.sot.update(self.session)"},{"line_number":856,"context_line":"        self.assertEqual(result, self.sot)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"    def test_delete(self):"},{"line_number":859,"context_line":"        result \u003d self.sot.delete(self.session)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_15f41584","line":856,"in_reply_to":"ba0121b8_081a416e","updated":"2016-03-30 13:40:17.000000000","message":"Done","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"9123cf0fab6632fafd6405976e68411a5a3fae22","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        # other gets past the first check, the first failure doesn\u0027t"},{"line_number":1212,"context_line":"        # match the expected, the third matches the failure,"},{"line_number":1213,"context_line":"        # the fourth is used in creating the exception message"},{"line_number":1214,"context_line":"        statuses \u003d [\"other\", failure, failure, failure]"},{"line_number":1215,"context_line":"        type(resource).status \u003d mock.PropertyMock(side_effect\u003dstatuses)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        self.assertRaises(exceptions.ResourceFailure,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_fa63813f","line":1214,"updated":"2016-03-30 12:59:53.000000000","message":"Should this fail on first failure status?","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"a77b1a310d9e4a9371754d99f227ab092e0e88bd","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        # other gets past the first check, the first failure doesn\u0027t"},{"line_number":1212,"context_line":"        # match the expected, the third matches the failure,"},{"line_number":1213,"context_line":"        # the fourth is used in creating the exception message"},{"line_number":1214,"context_line":"        statuses \u003d [\"other\", failure, failure, failure]"},{"line_number":1215,"context_line":"        type(resource).status \u003d mock.PropertyMock(side_effect\u003dstatuses)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        self.assertRaises(exceptions.ResourceFailure,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_18fe0c37","line":1214,"in_reply_to":"ba0121b8_75ec718f","updated":"2016-03-30 13:54:00.000000000","message":"Thanks for the explanation.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"f84773f1512e042b3b8aedce9984d774ddc0c9fa","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        # other gets past the first check, the first failure doesn\u0027t"},{"line_number":1212,"context_line":"        # match the expected, the third matches the failure,"},{"line_number":1213,"context_line":"        # the fourth is used in creating the exception message"},{"line_number":1214,"context_line":"        statuses \u003d [\"other\", failure, failure, failure]"},{"line_number":1215,"context_line":"        type(resource).status \u003d mock.PropertyMock(side_effect\u003dstatuses)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        self.assertRaises(exceptions.ResourceFailure,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_75ec718f","line":1214,"in_reply_to":"ba0121b8_fa63813f","updated":"2016-03-30 13:40:17.000000000","message":"It technically does fail on the first one, as in it enters branches to fail out of the method, but since the `status` attribute is accessed several times after that, we need to keep feeding the mock that bad status so it can continue out the rest of the method in order to get us to the exception being raised. \n\nIf you just make that list be the first two items, the wait_for_status method will fail with AttributeError as the mock isn\u0027t telling it to return anything for subsequent access of the status attribute.","commit_id":"fe48990368bacf41ea86c7d42c59c69a7030663d"}]}
