)]}'
{"keystone/tests/test_v3.py":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"74eee7c699e35798295dfd16128567e4f6fd422c","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"            self.assertValidRoleAssignment(entity)"},{"line_number":1040,"context_line":"        return entities"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"    def assertValidRoleAssignment(self, entity, ref\u003dNone, url\u003dNone):"},{"line_number":1043,"context_line":"        # A scope AND a role should be present"},{"line_number":1044,"context_line":"        s, r \u003d entity.get(\u0027scope\u0027), entity.get(\u0027role\u0027)"},{"line_number":1045,"context_line":"        self.assertIsNotNone(s and (r and r.get(\u0027id\u0027)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_444fab34","line":1042,"updated":"2014-12-31 03:20:18.000000000","message":"I don\u0027t see deeply, but I think the name of variables should be changed.","commit_id":"9b96cf21b20ae4e7c384d1c492a11dbdb58b1f44"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"a0a35613ba68c428336d9e8ef4bec923d4f71cf6","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"            self.assertValidRoleAssignment(entity)"},{"line_number":1040,"context_line":"        return entities"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"    def assertValidRoleAssignment(self, entity, ref\u003dNone, url\u003dNone):"},{"line_number":1043,"context_line":"        # A scope AND a role should be present"},{"line_number":1044,"context_line":"        s, r \u003d entity.get(\u0027scope\u0027), entity.get(\u0027role\u0027)"},{"line_number":1045,"context_line":"        self.assertIsNotNone(s and (r and r.get(\u0027id\u0027)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_191185af","line":1042,"in_reply_to":"3a961159_444fab34","updated":"2014-12-31 12:59:34.000000000","message":"I don\u0027t see it as an issue: s for scope, r for role, u for user, etc\n\nShort names like those allow us to verify XOR + ids in a single line, see line 1049 below as an example.\n\nHowever, I would like to get other views on this.","commit_id":"9b96cf21b20ae4e7c384d1c492a11dbdb58b1f44"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b88f8c6d8671afd52fea37bf65c1f2a3638463ef","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"        s, r \u003d entity.get(\u0027scope\u0027), entity.get(\u0027role\u0027)"},{"line_number":1044,"context_line":"        self.assertIsNotNone(s and (r and r.get(\u0027id\u0027)))"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"        # A user XOR a group should be present"},{"line_number":1047,"context_line":"        u, g \u003d entity.get(\u0027user\u0027), entity.get(\u0027group\u0027)"},{"line_number":1048,"context_line":"        self.assertTrue(bool(u and u.get(\u0027id\u0027)) ^ bool(g and g.get(\u0027id\u0027)))"},{"line_number":1049,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_c7ad969d","line":1046,"updated":"2015-01-10 07:19:25.000000000","message":"would keep the previous comment but add this one to make clear the operation being used.","commit_id":"ce4aed99f7b20bc05702c1e2a33cedeb0860a67f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b88f8c6d8671afd52fea37bf65c1f2a3638463ef","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"        u, g \u003d entity.get(\u0027user\u0027), entity.get(\u0027group\u0027)"},{"line_number":1048,"context_line":"        self.assertTrue(bool(u and u.get(\u0027id\u0027)) ^ bool(g and g.get(\u0027id\u0027)))"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        # A domain XOR a project should be present"},{"line_number":1051,"context_line":"        p, d \u003d s.get(\u0027project\u0027), s.get(\u0027domain\u0027)"},{"line_number":1052,"context_line":"        self.assertTrue(bool(p and p.get(\u0027id\u0027)) ^ bool(d and d.get(\u0027id\u0027)))"},{"line_number":1053,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_078f9e2f","line":1050,"updated":"2015-01-10 07:19:25.000000000","message":"the same here","commit_id":"ce4aed99f7b20bc05702c1e2a33cedeb0860a67f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"469b0f2082867fca21350172222856fd3b94666e","unresolved":false,"context_lines":[{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        # A user XOR a group should be present"},{"line_number":1049,"context_line":"        u, g \u003d entity.get(\u0027user\u0027), entity.get(\u0027group\u0027)"},{"line_number":1050,"context_line":"        self.assertTrue(bool(u and u.get(\u0027id\u0027)) ^ bool(g and g.get(\u0027id\u0027)))"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        # A domain XOR a project should be present"},{"line_number":1053,"context_line":"        p, d \u003d s.get(\u0027project\u0027), s.get(\u0027domain\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_20dda070","line":1050,"updated":"2015-01-16 13:10:18.000000000","message":"Would this help?\n\n        has_user \u003d bool(u and u.get(\u0027id\u0027))\n        has_group \u003d bool(u and u.get(\u0027id\u0027))\n        self.assertTrue(has_user ^ has_group)","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f18a2280401eee4b496bbe668d58808037e513c4","unresolved":false,"context_lines":[{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        # A user XOR a group should be present"},{"line_number":1049,"context_line":"        u, g \u003d entity.get(\u0027user\u0027), entity.get(\u0027group\u0027)"},{"line_number":1050,"context_line":"        self.assertTrue(bool(u and u.get(\u0027id\u0027)) ^ bool(g and g.get(\u0027id\u0027)))"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        # A domain XOR a project should be present"},{"line_number":1053,"context_line":"        p, d \u003d s.get(\u0027project\u0027), s.get(\u0027domain\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_c0293c8a","line":1050,"updated":"2015-01-16 12:57:46.000000000","message":"not sure what others think, but to my mind this is trying to be too clever and it makes it hard to work out it is right.  In my view, test code should be written more simply...to make sure there aren\u0027t bugs in the tests. For reference, look up why Nasa\u0027s Polar Explorer crashed on Mars......an error in the test rig meant they missed a s/w bug that doomed the mission","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"96cb523efa416fbd38463b9c53b849ce98cb4f45","unresolved":false,"context_lines":[{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        # A user XOR a group should be present"},{"line_number":1049,"context_line":"        u, g \u003d entity.get(\u0027user\u0027), entity.get(\u0027group\u0027)"},{"line_number":1050,"context_line":"        self.assertTrue(bool(u and u.get(\u0027id\u0027)) ^ bool(g and g.get(\u0027id\u0027)))"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        # A domain XOR a project should be present"},{"line_number":1053,"context_line":"        p, d \u003d s.get(\u0027project\u0027), s.get(\u0027domain\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_ed3470fc","line":1050,"in_reply_to":"3a961159_1ba3b59e","updated":"2015-01-16 14:32:53.000000000","message":"Well, I agree with you.\nThe previous assertions were clear to understand.\nI will get them and put new assertions (for ids) if needed, thanks.","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6a5397650ee40b7031472117f9a116fc801b6018","unresolved":false,"context_lines":[{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        # A user XOR a group should be present"},{"line_number":1049,"context_line":"        u, g \u003d entity.get(\u0027user\u0027), entity.get(\u0027group\u0027)"},{"line_number":1050,"context_line":"        self.assertTrue(bool(u and u.get(\u0027id\u0027)) ^ bool(g and g.get(\u0027id\u0027)))"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        # A domain XOR a project should be present"},{"line_number":1053,"context_line":"        p, d \u003d s.get(\u0027project\u0027), s.get(\u0027domain\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_1ba3b59e","line":1050,"in_reply_to":"3a961159_20dda070","updated":"2015-01-16 13:49:12.000000000","message":"maybe...I guess I\u0027ll let others comment...I personally just find the fixation with minimum lines of code in tests to be counter productive. I think the original code is much clearer.","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f18a2280401eee4b496bbe668d58808037e513c4","unresolved":false,"context_lines":[{"line_number":1063,"context_line":"                self.assertDictContainsSubset(ref, entity)"},{"line_number":1064,"context_line":"            finally:"},{"line_number":1065,"context_line":"                if links:"},{"line_number":1066,"context_line":"                    ref[\u0027links\u0027] \u003d links"},{"line_number":1067,"context_line":"            if url:"},{"line_number":1068,"context_line":"                self.assertIn(url, l[\u0027assignment\u0027])"},{"line_number":1069,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_40638cdc","line":1066,"updated":"2015-01-16 12:57:46.000000000","message":"maybe I\u0027m missing something...but what does this do in terms of testing....","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"469b0f2082867fca21350172222856fd3b94666e","unresolved":false,"context_lines":[{"line_number":1063,"context_line":"                self.assertDictContainsSubset(ref, entity)"},{"line_number":1064,"context_line":"            finally:"},{"line_number":1065,"context_line":"                if links:"},{"line_number":1066,"context_line":"                    ref[\u0027links\u0027] \u003d links"},{"line_number":1067,"context_line":"            if url:"},{"line_number":1068,"context_line":"                self.assertIn(url, l[\u0027assignment\u0027])"},{"line_number":1069,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_a05ef0e6","line":1066,"in_reply_to":"3a961159_40638cdc","updated":"2015-01-16 13:10:18.000000000","message":"It adds back to the ref the links extracted at line 1061","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6a5397650ee40b7031472117f9a116fc801b6018","unresolved":false,"context_lines":[{"line_number":1063,"context_line":"                self.assertDictContainsSubset(ref, entity)"},{"line_number":1064,"context_line":"            finally:"},{"line_number":1065,"context_line":"                if links:"},{"line_number":1066,"context_line":"                    ref[\u0027links\u0027] \u003d links"},{"line_number":1067,"context_line":"            if url:"},{"line_number":1068,"context_line":"                self.assertIn(url, l[\u0027assignment\u0027])"},{"line_number":1069,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_9ba165ab","line":1066,"in_reply_to":"3a961159_a05ef0e6","updated":"2015-01-16 13:49:12.000000000","message":"ahh, right","commit_id":"dcf8bec06fd50db4124e7065cb5ba3ee05660225"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"495d7c5ce4fc608dafdd535b06d9d97c86241a16","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        return entity"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def assertDictContainsSubset(self, expected, actual):"},{"line_number":600,"context_line":"        for k, v in expected.iteritems():"},{"line_number":601,"context_line":"            self.assertIn(k, actual)"},{"line_number":602,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_be5d134a","line":599,"updated":"2015-01-18 08:57:56.000000000","message":"I am curious why the method is deprecated without an appropriate substitution, it\u0027s fine I will check it by myself.","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5c6fb77c3e140402d9c9bfad4b3ef8e0f91a9228","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        return entity"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def assertDictContainsSubset(self, expected, actual):"},{"line_number":600,"context_line":"        for k, v in expected.iteritems():"},{"line_number":601,"context_line":"            self.assertIn(k, actual)"},{"line_number":602,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_8d9bd315","line":599,"updated":"2015-01-17 17:30:26.000000000","message":"who is the dict and subset?","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"2bc9dd93b815214f3237175fb1dbe050b3b43d17","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        return entity"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def assertDictContainsSubset(self, expected, actual):"},{"line_number":600,"context_line":"        for k, v in expected.iteritems():"},{"line_number":601,"context_line":"            self.assertIn(k, actual)"},{"line_number":602,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_702e7afb","line":599,"in_reply_to":"3a961159_4d180b84","updated":"2015-01-17 19:49:49.000000000","message":"Because it doesn\u0027t assert subdicts recursively.\n\n{1:{2:{3:4}}} is a subdict of {1:{2:{3,4}, 5:{6:7}}}","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"fb4a134019a3c113e1ebb89bdd5807ab5205458b","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        return entity"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def assertDictContainsSubset(self, expected, actual):"},{"line_number":600,"context_line":"        for k, v in expected.iteritems():"},{"line_number":601,"context_line":"            self.assertIn(k, actual)"},{"line_number":602,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ed71b7de","line":599,"in_reply_to":"3a961159_8d9bd315","updated":"2015-01-17 17:40:01.000000000","message":"This method is implemented by unittest as well, but it has been deprecated since version 3.2 [1] I will add doc\n\n[1] https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertDictContainsSubset","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0898e951b814be3a2e200ae89241f29933098b53","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        return entity"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def assertDictContainsSubset(self, expected, actual):"},{"line_number":600,"context_line":"        for k, v in expected.iteritems():"},{"line_number":601,"context_line":"            self.assertIn(k, actual)"},{"line_number":602,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_4d180b84","line":599,"in_reply_to":"3a961159_ed71b7de","updated":"2015-01-17 17:51:00.000000000","message":"++\n\nsince it is deprecated, why not do something like what is proposed here: http://stackoverflow.com/questions/20050913/python-unittests-assertdictcontainssubset-recommended-alternative ?","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5c6fb77c3e140402d9c9bfad4b3ef8e0f91a9228","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        # Only one of user or group should be present"},{"line_number":1049,"context_line":"        if entity.get(\u0027user\u0027):"},{"line_number":1050,"context_line":"            self.assertIsNone(entity.get(\u0027group\u0027))"},{"line_number":1051,"context_line":"            self.assertIsNotNone(entity[\u0027user\u0027].get(\u0027id\u0027))"},{"line_number":1052,"context_line":"        else:"},{"line_number":1053,"context_line":"            self.assertIsNotNone(entity.get(\u0027group\u0027))"},{"line_number":1054,"context_line":"            self.assertIsNotNone(entity[\u0027group\u0027].get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_4d956be2","line":1051,"updated":"2015-01-17 17:30:26.000000000","message":"why do you need to get the id? Isn\u0027t the \"self.assertIsNone(entity.get(\u0027group\u0027))\" enough if you are already in this branch?","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"fb4a134019a3c113e1ebb89bdd5807ab5205458b","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        # Only one of user or group should be present"},{"line_number":1049,"context_line":"        if entity.get(\u0027user\u0027):"},{"line_number":1050,"context_line":"            self.assertIsNone(entity.get(\u0027group\u0027))"},{"line_number":1051,"context_line":"            self.assertIsNotNone(entity[\u0027user\u0027].get(\u0027id\u0027))"},{"line_number":1052,"context_line":"        else:"},{"line_number":1053,"context_line":"            self.assertIsNotNone(entity.get(\u0027group\u0027))"},{"line_number":1054,"context_line":"            self.assertIsNotNone(entity[\u0027group\u0027].get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_6d66a72a","line":1051,"in_reply_to":"3a961159_4d956be2","updated":"2015-01-17 17:40:01.000000000","message":"A valid user/group/role has to have an id\nSee this change\u0027 commit","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0898e951b814be3a2e200ae89241f29933098b53","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        # Only one of user or group should be present"},{"line_number":1049,"context_line":"        if entity.get(\u0027user\u0027):"},{"line_number":1050,"context_line":"            self.assertIsNone(entity.get(\u0027group\u0027))"},{"line_number":1051,"context_line":"            self.assertIsNotNone(entity[\u0027user\u0027].get(\u0027id\u0027))"},{"line_number":1052,"context_line":"        else:"},{"line_number":1053,"context_line":"            self.assertIsNotNone(entity.get(\u0027group\u0027))"},{"line_number":1054,"context_line":"            self.assertIsNotNone(entity[\u0027group\u0027].get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ed1ff76d","line":1051,"in_reply_to":"3a961159_6d66a72a","updated":"2015-01-17 17:51:00.000000000","message":"++","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"495d7c5ce4fc608dafdd535b06d9d97c86241a16","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"            finally:"},{"line_number":1075,"context_line":"                if links:"},{"line_number":1076,"context_line":"                    ref[\u0027links\u0027] \u003d links"},{"line_number":1077,"context_line":"            if url:"},{"line_number":1078,"context_line":"                self.assertIn(url, entity[\u0027links\u0027][\u0027assignment\u0027])"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"    def assertRoleAssignmentInListResponse("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5e4d0f98","line":1077,"updated":"2015-01-18 08:57:56.000000000","message":"Samuel, why url is depended on ref? the case should support validating url only without ref IMO, maybe this is just an indentation issue?","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"90959dbca83742fd82df9eabe0d20c59fce86ef9","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"            finally:"},{"line_number":1075,"context_line":"                if links:"},{"line_number":1076,"context_line":"                    ref[\u0027links\u0027] \u003d links"},{"line_number":1077,"context_line":"            if url:"},{"line_number":1078,"context_line":"                self.assertIn(url, entity[\u0027links\u0027][\u0027assignment\u0027])"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"    def assertRoleAssignmentInListResponse("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_df3499e0","line":1077,"in_reply_to":"3a961159_5e4d0f98","updated":"2015-01-18 15:57:36.000000000","message":"Nice catch! In this patch, this should be kept indented as it was.","commit_id":"819451de0a733eefe90a7235d2333d2f2cd349fb"}]}
