)]}'
{"keystone/auth/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46657dd991b01065dec88fcd39f18fadb46b0192","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                        sys.exc_info()[2])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _lookup_domain(self, domain_info):"},{"line_number":173,"context_line":"        if isinstance(domain_info, dict) is False:"},{"line_number":174,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027dict\u0027,"},{"line_number":175,"context_line":"                                            target\u003d\u0027domain\u0027)"},{"line_number":176,"context_line":"        domain_id \u003d domain_info.get(\u0027id\u0027)"},{"line_number":177,"context_line":"        domain_name \u003d domain_info.get(\u0027name\u0027)"},{"line_number":178,"context_line":"        if not domain_id and not domain_name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_70177f54","line":175,"range":{"start_line":173,"start_character":0,"end_line":175,"end_character":60},"updated":"2016-11-30 15:50:28.000000000","message":"same as below, this was an attempt at validating input before, which can probably be removed (it landed in https://review.openstack.org/#/c/315894/3)","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                        sys.exc_info()[2])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _lookup_domain(self, domain_info):"},{"line_number":173,"context_line":"        if isinstance(domain_info, dict) is False:"},{"line_number":174,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027dict\u0027,"},{"line_number":175,"context_line":"                                            target\u003d\u0027domain\u0027)"},{"line_number":176,"context_line":"        domain_id \u003d domain_info.get(\u0027id\u0027)"},{"line_number":177,"context_line":"        domain_name \u003d domain_info.get(\u0027name\u0027)"},{"line_number":178,"context_line":"        if not domain_id and not domain_name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_bf3f20d5","line":175,"range":{"start_line":173,"start_character":0,"end_line":175,"end_character":60},"in_reply_to":"5a74a57a_70177f54","updated":"2016-11-30 19:40:44.000000000","message":"Done","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46657dd991b01065dec88fcd39f18fadb46b0192","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        return domain_ref"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _lookup_project(self, project_info):"},{"line_number":199,"context_line":"        if isinstance(project_info, dict) is False:"},{"line_number":200,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027dict\u0027,"},{"line_number":201,"context_line":"                                            target\u003d\u0027project\u0027)"},{"line_number":202,"context_line":"        project_id \u003d project_info.get(\u0027id\u0027)"},{"line_number":203,"context_line":"        project_name \u003d project_info.get(\u0027name\u0027)"},{"line_number":204,"context_line":"        if not project_id and not project_name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_f05d4f49","line":201,"range":{"start_line":199,"start_character":0,"end_line":201,"end_character":61},"updated":"2016-11-30 15:50:28.000000000","message":"you can remove this now, i think","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        return domain_ref"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _lookup_project(self, project_info):"},{"line_number":199,"context_line":"        if isinstance(project_info, dict) is False:"},{"line_number":200,"context_line":"            raise exception.ValidationError(attribute\u003d\u0027dict\u0027,"},{"line_number":201,"context_line":"                                            target\u003d\u0027project\u0027)"},{"line_number":202,"context_line":"        project_id \u003d project_info.get(\u0027id\u0027)"},{"line_number":203,"context_line":"        project_name \u003d project_info.get(\u0027name\u0027)"},{"line_number":204,"context_line":"        if not project_id and not project_name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_ff2198b5","line":201,"range":{"start_line":199,"start_character":0,"end_line":201,"end_character":61},"in_reply_to":"5a74a57a_f05d4f49","updated":"2016-11-30 19:40:44.000000000","message":"Done","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9b8f510659baa0d162303b1c2aa7de2cdbfcc1e4","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        if domain is not None:"},{"line_number":367,"context_line":"            if \u0027id\u0027 not in domain and \u0027name\u0027 not in domain:"},{"line_number":368,"context_line":"                msg \u003d _("},{"line_number":369,"context_line":"                    \u0027Invalid input for field identity/password/user/domain: \u0027"},{"line_number":370,"context_line":"                    \u0027id or name must be present.\u0027)"},{"line_number":371,"context_line":"                raise exception.SchemaValidationError(detail\u003dmsg)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_d22a0a90","line":369,"range":{"start_line":369,"start_character":45,"end_line":369,"end_character":74},"updated":"2016-11-30 20:01:28.000000000","message":"interesting way to show this, is that the way jsonschema does it?","commit_id":"d16ec35378494f06a983a4c7f8566719bcf6ac3e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"82897d90aafa3efef035473bf92af875bbc32ff9","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        if domain is not None:"},{"line_number":367,"context_line":"            if \u0027id\u0027 not in domain and \u0027name\u0027 not in domain:"},{"line_number":368,"context_line":"                msg \u003d _("},{"line_number":369,"context_line":"                    \u0027Invalid input for field identity/password/user/domain: \u0027"},{"line_number":370,"context_line":"                    \u0027id or name must be present.\u0027)"},{"line_number":371,"context_line":"                raise exception.SchemaValidationError(detail\u003dmsg)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_f0b9b916","line":369,"range":{"start_line":369,"start_character":45,"end_line":369,"end_character":74},"in_reply_to":"5a74a57a_d22a0a90","updated":"2016-11-30 22:26:38.000000000","message":"No... the jsonschema output is pretty useless. Here\u0027s the output when I set the user domain name to a number:\n\n \"message\": \"Invalid input for field \u0027name\u0027: 123 is not of type \u0027string\u0027\",\n\nThe exception message is built using the path from the exception: https://github.com/openstack/keystone/blob/master/keystone/common/validation/validators.py#L86\n\nBut as you can see it does a pop so I guess this is expected.","commit_id":"d16ec35378494f06a983a4c7f8566719bcf6ac3e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"47b36aead8973f59d290cb55a1f818c0b2a2f34e","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        if domain is not None:"},{"line_number":367,"context_line":"            if \u0027id\u0027 not in domain and \u0027name\u0027 not in domain:"},{"line_number":368,"context_line":"                msg \u003d _("},{"line_number":369,"context_line":"                    \u0027Invalid input for field identity/password/user/domain: \u0027"},{"line_number":370,"context_line":"                    \u0027id or name must be present.\u0027)"},{"line_number":371,"context_line":"                raise exception.SchemaValidationError(detail\u003dmsg)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_eb1548e5","line":369,"range":{"start_line":369,"start_character":45,"end_line":369,"end_character":74},"in_reply_to":"5a74a57a_f0b9b916","updated":"2016-11-30 22:58:12.000000000","message":"thanks for the explanation, this still looks fine to me.","commit_id":"d16ec35378494f06a983a4c7f8566719bcf6ac3e"}],"keystone/auth/schema.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f2dd731f03a827aaebd789bcdf4590e00c73f5fb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"                    \u0027type\u0027: \u0027array\u0027,"},{"line_number":21,"context_line":"                    \u0027items\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":22,"context_line":"                },"},{"line_number":23,"context_line":"                \u0027password\u0027: {"},{"line_number":24,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":25,"context_line":"                    \u0027properties\u0027: {"},{"line_number":26,"context_line":"                        \u0027user\u0027: {"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_3377d103","line":23,"updated":"2016-11-30 15:48:43.000000000","message":"Should we add support for other methods here in the future?","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"                    \u0027type\u0027: \u0027array\u0027,"},{"line_number":21,"context_line":"                    \u0027items\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":22,"context_line":"                },"},{"line_number":23,"context_line":"                \u0027password\u0027: {"},{"line_number":24,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":25,"context_line":"                    \u0027properties\u0027: {"},{"line_number":26,"context_line":"                        \u0027user\u0027: {"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_5a253aac","line":23,"in_reply_to":"5a74a57a_3377d103","updated":"2016-11-30 19:40:44.000000000","message":"we\u0027ll probably have to come up with some way for this to be done dynamically. I\u0027d rather leave that for the future since this change is pretty complicated already.","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f2dd731f03a827aaebd789bcdf4590e00c73f5fb","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                                \u0027domain\u0027: {"},{"line_number":33,"context_line":"                                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":34,"context_line":"                                    \u0027properties\u0027: {"},{"line_number":35,"context_line":"                                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":36,"context_line":"                                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":37,"context_line":"                                    },"},{"line_number":38,"context_line":"                                },"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_c62a592c","line":35,"updated":"2016-11-30 15:48:43.000000000","message":"Should we require that a domain must have either an id or name?","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                                \u0027domain\u0027: {"},{"line_number":33,"context_line":"                                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":34,"context_line":"                                    \u0027properties\u0027: {"},{"line_number":35,"context_line":"                                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":36,"context_line":"                                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":37,"context_line":"                                    },"},{"line_number":38,"context_line":"                                },"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_9a9ef205","line":35,"in_reply_to":"5a74a57a_c62a592c","updated":"2016-11-30 19:40:44.000000000","message":"I don\u0027t think it\u0027s worth trying to do this in jsonschema since the way you do it isn\u0027t obvious especially when you want to also support additionalProperties. I\u0027ll add it to a validation function that does jsonschema + in-code checks.","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46657dd991b01065dec88fcd39f18fadb46b0192","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                            },"},{"line_number":40,"context_line":"                        },"},{"line_number":41,"context_line":"                    },"},{"line_number":42,"context_line":"                },"},{"line_number":43,"context_line":"            },"},{"line_number":44,"context_line":"            \u0027required\u0027: [\u0027methods\u0027, ],"},{"line_number":45,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_093e22b8","line":42,"updated":"2016-11-30 15:50:28.000000000","message":"you can add token auth pretty easily:\n\n\u0027token\u0027: {\n    \u0027type\u0027: \u0027object\u0027,\n    \u0027properties\u0027: {\n        \u0027id\u0027: {\n            \u0027type\u0027: \u0027string\u0027\n        }\n    },\n    \u0027required\u0027: [\u0027id\u0027]\n  }\n}","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f2dd731f03a827aaebd789bcdf4590e00c73f5fb","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \u0027project\u0027: {"},{"line_number":50,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":51,"context_line":"                    \u0027properties\u0027: {"},{"line_number":52,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":53,"context_line":"                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":54,"context_line":"                        \u0027domain\u0027: {"},{"line_number":55,"context_line":"                            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_c6e17900","line":52,"updated":"2016-11-30 15:48:43.000000000","message":"Same requires question","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \u0027project\u0027: {"},{"line_number":50,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":51,"context_line":"                    \u0027properties\u0027: {"},{"line_number":52,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":53,"context_line":"                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":54,"context_line":"                        \u0027domain\u0027: {"},{"line_number":55,"context_line":"                            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_f53619e6","line":52,"in_reply_to":"5a74a57a_c6e17900","updated":"2016-11-30 19:40:44.000000000","message":"Done","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f2dd731f03a827aaebd789bcdf4590e00c73f5fb","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                \u0027domain\u0027: {"},{"line_number":64,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":65,"context_line":"                    \u0027properties\u0027: {"},{"line_number":66,"context_line":"                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":67,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":68,"context_line":"                    },"},{"line_number":69,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_26f14dce","line":66,"updated":"2016-11-30 15:48:43.000000000","message":"Same","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                \u0027domain\u0027: {"},{"line_number":64,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":65,"context_line":"                    \u0027properties\u0027: {"},{"line_number":66,"context_line":"                        \u0027id\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":67,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027, },"},{"line_number":68,"context_line":"                    },"},{"line_number":69,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_153475dc","line":66,"in_reply_to":"5a74a57a_26f14dce","updated":"2016-11-30 19:40:44.000000000","message":"Done","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"}],"keystone/tests/unit/auth/test_schema.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f2dd731f03a827aaebd789bcdf4590e00c73f5fb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone import exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestValidatePost(unittest.TestCase):"},{"line_number":22,"context_line":"    def _expect_failure(self, post_data):"},{"line_number":23,"context_line":"        with self.assertRaises(exception.SchemaValidationError):"},{"line_number":24,"context_line":"            validation.lazy_validate(schema.token_issue, post_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_13ce555a","line":21,"updated":"2016-11-30 15:48:43.000000000","message":"Why is this not using our base test case so that logging and other things happen automatically for it?","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b562fb4481558a899f9112127e100c0a3f9507a9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone import exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestValidatePost(unittest.TestCase):"},{"line_number":22,"context_line":"    def _expect_failure(self, post_data):"},{"line_number":23,"context_line":"        with self.assertRaises(exception.SchemaValidationError):"},{"line_number":24,"context_line":"            validation.lazy_validate(schema.token_issue, post_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_75784990","line":21,"in_reply_to":"5a74a57a_13ce555a","updated":"2016-11-30 19:40:44.000000000","message":"Done","commit_id":"38ffdd52bffb98289b401f29cc88b96f9dbc8202"}]}
