)]}'
{"keystone/tests/test_v3.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8bfcf0158dd485c8442ac3f87aa47f641787c326","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        ref[\u0027trustee_user_id\u0027] \u003d trustee_user_id"},{"line_number":353,"context_line":"        ref[\u0027impersonation\u0027] \u003d impersonation or False"},{"line_number":354,"context_line":"        ref[\u0027project_id\u0027] \u003d project_id"},{"line_number":355,"context_line":"        ref[\u0027remaining_uses\u0027] \u003d remaining_uses"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if isinstance(expires, six.string_types):"},{"line_number":358,"context_line":"            ref[\u0027expires_at\u0027] \u003d expires"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_ba2da748","line":355,"updated":"2014-09-02 16:47:09.000000000","message":"(NIT): This could be done with:\n\n    ref \u003d {\n        \u0027id\u0027: uuid.uuid4().hex,\n        \u0027trustor_uder_id\u0027: trustor_user_id,\n        ...\n    }\n\nThe dict() constructor is always slower/ickier to use.","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"}],"keystone/tests/test_validation.py":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"6b43f4736c5f82d1490bc0423b7c202351c2888d","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        self.create_trust_validator \u003d validators.SchemaValidator(create)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def test_validate_trust_succeeds(self):"},{"line_number":862,"context_line":"        \"\"\"That that we can validate a trust request.\"\"\""},{"line_number":863,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"},{"line_number":864,"context_line":"                               \u0027trustee_user_id\u0027: uuid.uuid4().hex,"},{"line_number":865,"context_line":"                               \u0027impersonation\u0027: False}"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_cce201a0","line":862,"updated":"2014-07-23 00:12:40.000000000","message":"That -\u003e Test","commit_id":"98db5673e671d3cd57ca58bf6c96147853c9d82f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c704164282a57ac9eec8900ee16891c589ee91a7","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        self.create_trust_validator \u003d validators.SchemaValidator(create)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def test_validate_trust_succeeds(self):"},{"line_number":862,"context_line":"        \"\"\"That that we can validate a trust request.\"\"\""},{"line_number":863,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"},{"line_number":864,"context_line":"                               \u0027trustee_user_id\u0027: uuid.uuid4().hex,"},{"line_number":865,"context_line":"                               \u0027impersonation\u0027: False}"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_ff61f711","line":862,"in_reply_to":"baada198_cce201a0","updated":"2014-07-23 19:59:09.000000000","message":"Done","commit_id":"98db5673e671d3cd57ca58bf6c96147853c9d82f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                          request_to_validate)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class TrustValidationTestCase(BaseValidationTestCase):"},{"line_number":165,"context_line":"    \"\"\"Test for V3 Trust API validation.\"\"\""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_3c61c3a8","line":164,"updated":"2014-08-26 20:41:36.000000000","message":"This should be inheriting from testtools.TestCase like https://review.openstack.org/#/c/116954/.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                          request_to_validate)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class TrustValidationTestCase(BaseValidationTestCase):"},{"line_number":165,"context_line":"    \"\"\"Test for V3 Trust API validation.\"\"\""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dda25bfb","line":164,"in_reply_to":"1abeadc6_3c61c3a8","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_validate_trust_without_trustor_id_fails(self):"},{"line_number":192,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":193,"context_line":"           that doesn\u0027t have `trustor_user_id` in the request."},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        request_to_validate \u003d {\u0027trustee_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_3cd62328","line":192,"updated":"2014-08-26 20:41:36.000000000","message":"Many of the docstrings here don\u0027t match the style guide. http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_validate_trust_without_trustor_id_fails(self):"},{"line_number":192,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":193,"context_line":"           that doesn\u0027t have `trustor_user_id` in the request."},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        request_to_validate \u003d {\u0027trustee_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dd797b83","line":192,"in_reply_to":"1abeadc6_3cd62328","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                          request_to_validate)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_validate_trust_without_trustee_id_fails(self):"},{"line_number":202,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":203,"context_line":"           that doesn\u0027t have `trustee_user_id` in the request."},{"line_number":204,"context_line":"        \"\"\""},{"line_number":205,"context_line":"        request_to_validate \u003d {\u0027trusor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_9ce65715","line":202,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                          request_to_validate)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_validate_trust_without_trustee_id_fails(self):"},{"line_number":202,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":203,"context_line":"           that doesn\u0027t have `trustee_user_id` in the request."},{"line_number":204,"context_line":"        \"\"\""},{"line_number":205,"context_line":"        request_to_validate \u003d {\u0027trusor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_1d73f380","line":202,"in_reply_to":"1abeadc6_9ce65715","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                          request_to_validate)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_validate_trust_without_impersonation_fails(self):"},{"line_number":212,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":213,"context_line":"           that doesn\u0027t have `impersonation` in the request."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        request_to_validate \u003d {\u0027trustee_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_bce153fe","line":212,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                          request_to_validate)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_validate_trust_without_impersonation_fails(self):"},{"line_number":212,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":213,"context_line":"           that doesn\u0027t have `impersonation` in the request."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        request_to_validate \u003d {\u0027trustee_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_fd5ab7f0","line":212,"in_reply_to":"1abeadc6_bce153fe","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def test_validate_trust_with_invalid_impersonation_fails(self):"},{"line_number":234,"context_line":"        \"\"\"Test that an exception is raised when validating a trust with an"},{"line_number":235,"context_line":"           invalid `impersonation` value."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dcf0cfcb","line":234,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def test_validate_trust_with_invalid_impersonation_fails(self):"},{"line_number":234,"context_line":"        \"\"\"Test that an exception is raised when validating a trust with an"},{"line_number":235,"context_line":"           invalid `impersonation` value."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dd55fbc2","line":234,"in_reply_to":"1abeadc6_dcf0cfcb","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                          request_to_validate)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_validate_trust_with_null_remaining_uses_succeeds(self):"},{"line_number":245,"context_line":"        \"\"\"Test that we can validate a trust request that has None as a value"},{"line_number":246,"context_line":"           for `remaining_uses`."},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_1cba47e1","line":245,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                          request_to_validate)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_validate_trust_with_null_remaining_uses_succeeds(self):"},{"line_number":245,"context_line":"        \"\"\"Test that we can validate a trust request that has None as a value"},{"line_number":246,"context_line":"           for `remaining_uses`."},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_9d5f03e5","line":245,"in_reply_to":"1abeadc6_1cba47e1","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_validate_trust_with_remaining_uses_succeeds(self):"},{"line_number":255,"context_line":"        \"\"\"Test that we can validate a trust request that has integer as a"},{"line_number":256,"context_line":"           value for `remaining_uses`."},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_5cb4bff1","line":255,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_validate_trust_with_remaining_uses_succeeds(self):"},{"line_number":255,"context_line":"        \"\"\"Test that we can validate a trust request that has integer as a"},{"line_number":256,"context_line":"           value for `remaining_uses`."},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_bd64bfb9","line":255,"in_reply_to":"1abeadc6_5cb4bff1","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def test_validate_trust_with_invalid_expires_at_fails(self):"},{"line_number":265,"context_line":"        \"\"\"Test that an exception is raised when an invalid type is passed as"},{"line_number":266,"context_line":"           `expires_at`."},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dcc7ef62","line":265,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def test_validate_trust_with_invalid_expires_at_fails(self):"},{"line_number":265,"context_line":"        \"\"\"Test that an exception is raised when an invalid type is passed as"},{"line_number":266,"context_line":"           `expires_at`."},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_7d4f8734","line":265,"in_reply_to":"1abeadc6_dcc7ef62","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        \"\"\"Test that we can validate a trust request with different role types"},{"line_number":278,"context_line":"           in the request."},{"line_number":279,"context_line":"        \"\"\""},{"line_number":280,"context_line":"        for role in [\u0027member\u0027, uuid.uuid4().hex]:"},{"line_number":281,"context_line":"            request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"},{"line_number":282,"context_line":"                                   \u0027trustee_user_id\u0027: uuid.uuid4().hex,"},{"line_number":283,"context_line":"                                   \u0027impersonation\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_9c7bb728","line":280,"updated":"2014-08-26 20:41:36.000000000","message":"Make this list a constant like in the other reviews. Probably better at the class level for this one.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        \"\"\"Test that we can validate a trust request with different role types"},{"line_number":278,"context_line":"           in the request."},{"line_number":279,"context_line":"        \"\"\""},{"line_number":280,"context_line":"        for role in [\u0027member\u0027, uuid.uuid4().hex]:"},{"line_number":281,"context_line":"            request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"},{"line_number":282,"context_line":"                                   \u0027trustee_user_id\u0027: uuid.uuid4().hex,"},{"line_number":283,"context_line":"                                   \u0027impersonation\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_fd28f734","line":280,"in_reply_to":"1abeadc6_9c7bb728","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            self.create_trust_validator.validate(request_to_validate)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test_validate_trust_with_invalid_role_type_fails(self):"},{"line_number":288,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":289,"context_line":"           with an invalid role type."},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        for role in [False, True, 123, None]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_1ca167a9","line":288,"updated":"2014-08-26 20:41:36.000000000","message":"This one too.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            self.create_trust_validator.validate(request_to_validate)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test_validate_trust_with_invalid_role_type_fails(self):"},{"line_number":288,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":289,"context_line":"           with an invalid role type."},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        for role in [False, True, 123, None]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_5d52cbde","line":288,"in_reply_to":"1abeadc6_1ca167a9","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":289,"context_line":"           with an invalid role type."},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        for role in [False, True, 123, None]:"},{"line_number":292,"context_line":"            request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"},{"line_number":293,"context_line":"                                   \u0027trustee_user_id\u0027: uuid.uuid4().hex,"},{"line_number":294,"context_line":"                                   \u0027impersonation\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_9c949745","line":291,"updated":"2014-08-26 20:41:36.000000000","message":"Make that list a constant like in the other reviews. Probably better at the class level for this one.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\"Test that an exception is raised when validating a trust request"},{"line_number":289,"context_line":"           with an invalid role type."},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        for role in [False, True, 123, None]:"},{"line_number":292,"context_line":"            request_to_validate \u003d {\u0027trustor_user_id\u0027: uuid.uuid4().hex,"},{"line_number":293,"context_line":"                                   \u0027trustee_user_id\u0027: uuid.uuid4().hex,"},{"line_number":294,"context_line":"                                   \u0027impersonation\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_1d21334d","line":291,"in_reply_to":"1abeadc6_9c949745","updated":"2014-08-27 20:15:53.000000000","message":"Done","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8bfcf0158dd485c8442ac3f87aa47f641787c326","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                               \u0027impersonation\u0027: False,"},{"line_number":1121,"context_line":"                               \u0027project_id\u0027: uuid.uuid4().hex,"},{"line_number":1122,"context_line":"                               \u0027roles\u0027: [uuid.uuid4().hex, uuid.uuid4().hex],"},{"line_number":1123,"context_line":"                               \u0027expires_at\u0027: \u0027some timestamp\u0027,"},{"line_number":1124,"context_line":"                               \u0027remaining_uses\u0027: 2}"},{"line_number":1125,"context_line":"        self.create_trust_validator.validate(request_to_validate)"},{"line_number":1126,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_7adc1f13","line":1123,"updated":"2014-09-02 16:47:09.000000000","message":"make this timeutils.strtime in a followup patch.","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8bfcf0158dd485c8442ac3f87aa47f641787c326","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"                               \u0027impersonation\u0027: False,"},{"line_number":1156,"context_line":"                               \u0027project_id\u0027: uuid.uuid4().hex,"},{"line_number":1157,"context_line":"                               \u0027roles\u0027: [uuid.uuid4().hex, uuid.uuid4().hex],"},{"line_number":1158,"context_line":"                               \u0027expires_at\u0027: \u0027some timestamp\u0027,"},{"line_number":1159,"context_line":"                               \u0027remaining_uses\u0027: 2,"},{"line_number":1160,"context_line":"                               \u0027extra\u0027: \u0027something extra!\u0027}"},{"line_number":1161,"context_line":"        self.create_trust_validator.validate(request_to_validate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_9ad703ed","line":1158,"updated":"2014-09-02 16:47:09.000000000","message":"Same as above.","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"}],"keystone/trust/schema.py":[{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"25438333eaee2736fab1ebbbf62f0e94ba374b2f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"trust_create \u003d {"},{"line_number":17,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":18,"context_line":"    \u0027properties\u0027: {"},{"line_number":19,"context_line":"        \u0027trustor_user_id\u0027: parameter_types.hex_uuid,"},{"line_number":20,"context_line":"        \u0027trustee_user_id\u0027: parameter_types.hex_uuid,"},{"line_number":21,"context_line":"        \u0027impersonation\u0027: parameter_types.boolean,"},{"line_number":22,"context_line":"        \u0027project_id\u0027: parameter_types.hex_uuid,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_de3b1136","line":19,"updated":"2014-07-19 09:18:59.000000000","message":"nit: these properties should be alphabetically arranged","commit_id":"98dfde9f79dfc432143aadcd753aacb7bd4b467a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"trust_create \u003d {"},{"line_number":17,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":18,"context_line":"    \u0027properties\u0027: {"},{"line_number":19,"context_line":"        \u0027trustor_user_id\u0027: parameter_types.hex_uuid,"},{"line_number":20,"context_line":"        \u0027trustee_user_id\u0027: parameter_types.hex_uuid,"},{"line_number":21,"context_line":"        \u0027impersonation\u0027: parameter_types.boolean,"},{"line_number":22,"context_line":"        \u0027project_id\u0027: parameter_types.hex_uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_fcbe6bad","line":19,"updated":"2014-08-26 20:41:36.000000000","message":"We\u0027re not using hex_uuid anymore right?","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":16,"context_line":"trust_create \u003d {"},{"line_number":17,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":18,"context_line":"    \u0027properties\u0027: {"},{"line_number":19,"context_line":"        \u0027trustor_user_id\u0027: parameter_types.hex_uuid,"},{"line_number":20,"context_line":"        \u0027trustee_user_id\u0027: parameter_types.hex_uuid,"},{"line_number":21,"context_line":"        \u0027impersonation\u0027: parameter_types.boolean,"},{"line_number":22,"context_line":"        \u0027project_id\u0027: parameter_types.hex_uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_5daacb71","line":19,"in_reply_to":"1abeadc6_fcbe6bad","updated":"2014-08-27 20:15:53.000000000","message":"Done, refactored to use parameter_types.id_string instead.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5cbf472f6871659f72da5a5775db22970b5c7ad8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":30,"context_line":"        # checking that a role is a list of IDs and/or names."},{"line_number":31,"context_line":"        \u0027roles\u0027: {"},{"line_number":32,"context_line":"            \u0027enum\u0027: [\u0027id\u0027, \u0027name\u0027]"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"    },"},{"line_number":35,"context_line":"    \u0027required\u0027: [\u0027trustor_user_id\u0027, \u0027trustee_user_id\u0027, \u0027impersonation\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_3c070383","line":32,"updated":"2014-08-26 20:41:36.000000000","message":"Is this right?","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8b1c6a58129464b5491f1cbcba94935df4ac9543","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":30,"context_line":"        # checking that a role is a list of IDs and/or names."},{"line_number":31,"context_line":"        \u0027roles\u0027: {"},{"line_number":32,"context_line":"            \u0027enum\u0027: [\u0027id\u0027, \u0027name\u0027]"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"    },"},{"line_number":35,"context_line":"    \u0027required\u0027: [\u0027trustor_user_id\u0027, \u0027trustee_user_id\u0027, \u0027impersonation\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dd0fbb37","line":32,"in_reply_to":"1abeadc6_3c070383","updated":"2014-08-27 20:15:53.000000000","message":"Nope, fixing.","commit_id":"a8272b68b7411819ff55e3b8306c6adb251aaf37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7be1e122b1234fb0354e3409d5f6aa07246a02de","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: \u0027string\u0027"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_7210e2a8","line":26,"updated":"2014-09-02 05:51:00.000000000","message":"This seems to be a problem. How do we want to go about validating datetime objects or strings? Jsonschema offers format checking with `time` and `datetime` but that relies on rfc39999, which isn\u0027t Apache license. \n\nAny ideas on how we should go about this type of validation? Or we just keep it as a string for now?","commit_id":"63c6087b427d03957ec3b563d70c0dcda793e681"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1440b841ae686f6b782329a921f8ddf4b43dfef0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: \u0027string\u0027"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_77d7dbbf","line":26,"in_reply_to":"fa98f980_3c40da55","updated":"2014-09-02 15:19:59.000000000","message":"I\u0027ve added \u0027null\u0027 to the type for expires_at: \n\n        \u0027expires_at\u0027: {\n        \u0027type\u0027: [\u0027null\u0027, \u0027string\u0027],\n\nBut still hitting some issues, I\u0027ll clean up what I have and push another revision.","commit_id":"63c6087b427d03957ec3b563d70c0dcda793e681"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6b8c967a0ad6028766be3fcb66871100a005f70a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: \u0027string\u0027"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_3c40da55","line":26,"in_reply_to":"fa98f980_7210e2a8","updated":"2014-09-02 14:59:28.000000000","message":"I think the issue is that this needs to be nullable. It seems from the tests that None somehow gets passed in here. That\u0027s backed up by the current validation code that explicitly checks for None: https://github.com/openstack/keystone/blob/master/keystone/trust/controllers.py#L183","commit_id":"63c6087b427d03957ec3b563d70c0dcda793e681"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e3b3d05e9af2deccb6fc316296893808da060897","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: [\u0027null\u0027, \u0027string\u0027]"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_774fd8bd","line":26,"updated":"2014-09-02 16:22:05.000000000","message":"Validation of this can be done with timeutils.parse_isotime, so you don\u0027t need to just validate it\u0027s a string/null. It does require a custom validation code path. (Let\u0027s do that as a followup patch?)\n\nAll datetime validation can be done that way, it should avoid the non-apache license issue","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a0d01781db9eb01057c9ec32395b5de9ceb290b3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: [\u0027null\u0027, \u0027string\u0027]"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_5a3d9bba","line":26,"in_reply_to":"fa98f980_17a4cc55","updated":"2014-09-02 16:30:16.000000000","message":"Yeah, right now we are already validating here: https://github.com/openstack/keystone/blob/master/keystone/trust/controllers.py#L183\n\nI agree that it would be nice to follow up with a fix.","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"be49b0da2e37efb734e4d1753465df3e306d1ed1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: [\u0027null\u0027, \u0027string\u0027]"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_5af59bc9","line":26,"in_reply_to":"fa98f980_5a3d9bba","updated":"2014-09-02 16:36:41.000000000","message":"sounds good, I agree","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"eb5ed422801c6ba2082716467194c05a66160782","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027type\u0027: [\u0027integer\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027expires_at\u0027: {"},{"line_number":26,"context_line":"        \u0027type\u0027: [\u0027null\u0027, \u0027string\u0027]"},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    # TODO(lbragstad): Need to find a better way to do this. We should be"},{"line_number":29,"context_line":"    # checking that a role is a list of IDs and/or names."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_17a4cc55","line":26,"in_reply_to":"fa98f980_774fd8bd","updated":"2014-09-02 16:23:59.000000000","message":"Alternatively, doing a regex like you did for URL to handle isotime would be acceptable.","commit_id":"6b469390a6bc0bbf27f7f6841babc01d23a9add2"}]}
