)]}'
{"keystone/resource/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f6b62f98c97209a41295b4c0104aaa0dd82c01d1","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            msg \u003d _(\u0027Name field is required and cannot be empty\u0027)"},{"line_number":93,"context_line":"            raise exception.ValidationError(message\u003dmsg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        if \u0027is_domain\u0027 in tenant_ref:"},{"line_number":96,"context_line":"            msg \u003d _(\u0027The creation of projects acting as domains is not \u0027"},{"line_number":97,"context_line":"                    \u0027allowed in v2.\u0027)"},{"line_number":98,"context_line":"            raise exception.ValidationError(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_3e916a9b","side":"PARENT","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":37},"updated":"2016-07-25 12:27:39.000000000","message":"this is no longer being checked","commit_id":"94e83aff172feee3874604ab1a92d4038be4965f"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f912b3adf629c99ea3917ffd5e0c3f9872696010","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            msg \u003d _(\u0027Name field is required and cannot be empty\u0027)"},{"line_number":93,"context_line":"            raise exception.ValidationError(message\u003dmsg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        if \u0027is_domain\u0027 in tenant_ref:"},{"line_number":96,"context_line":"            msg \u003d _(\u0027The creation of projects acting as domains is not \u0027"},{"line_number":97,"context_line":"                    \u0027allowed in v2.\u0027)"},{"line_number":98,"context_line":"            raise exception.ValidationError(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_938024c1","side":"PARENT","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":37},"in_reply_to":"dada55a8_3e916a9b","updated":"2016-07-26 05:53:02.000000000","message":"Done","commit_id":"94e83aff172feee3874604ab1a92d4038be4965f"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"870c68cc1bf54d6982680e91f52deecb794cbbf3","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def create_project(self, request, tenant):"},{"line_number":89,"context_line":"        tenant_ref \u003d self._normalize_dict(tenant)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        validation.lazy_validate(schema.tenant_create, tenant)"},{"line_number":92,"context_line":"        self.assert_admin(request)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.resource_api.ensure_default_domain_exists()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_7bad829a","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":62},"updated":"2016-07-26 08:12:24.000000000","message":"Remove any call from clean.py after enable schema validation.\n\nsee code here: https://github.com/openstack/keystone/blob/master/keystone/resource/core.py#L199-L200","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"}],"keystone/resource/schema.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f6b62f98c97209a41295b4c0104aaa0dd82c01d1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":22,"context_line":"    \u0027is_domain\u0027: parameter_types.boolean,"},{"line_number":23,"context_line":"    \u0027parent_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":24,"context_line":"    \u0027name\u0027: {"},{"line_number":25,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":26,"context_line":"        \u0027minLength\u0027: 1,"},{"line_number":27,"context_line":"        \u0027maxLength\u0027: 64,"},{"line_number":28,"context_line":"        \u0027pattern\u0027: \u0027[\\S]+\u0027"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"project_create \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_3eaa0ad3","line":29,"range":{"start_line":24,"start_character":0,"end_line":29,"end_character":5},"updated":"2016-07-25 12:27:39.000000000","message":"make this a common property","commit_id":"ce6e1f6ada2a8b441d1a7a95b580c13df3368721"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f912b3adf629c99ea3917ffd5e0c3f9872696010","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":22,"context_line":"    \u0027is_domain\u0027: parameter_types.boolean,"},{"line_number":23,"context_line":"    \u0027parent_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":24,"context_line":"    \u0027name\u0027: {"},{"line_number":25,"context_line":"        \u0027type\u0027: \u0027string\u0027,"},{"line_number":26,"context_line":"        \u0027minLength\u0027: 1,"},{"line_number":27,"context_line":"        \u0027maxLength\u0027: 64,"},{"line_number":28,"context_line":"        \u0027pattern\u0027: \u0027[\\S]+\u0027"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"project_create \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_2d681a21","line":29,"range":{"start_line":24,"start_character":0,"end_line":29,"end_character":5},"in_reply_to":"dada55a8_3eaa0ad3","updated":"2016-07-26 05:53:02.000000000","message":"Done","commit_id":"ce6e1f6ada2a8b441d1a7a95b580c13df3368721"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"870c68cc1bf54d6982680e91f52deecb794cbbf3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"_tenant_properties \u003d {"},{"line_number":75,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":76,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":77,"context_line":"    \u0027name\u0027: _name_properties"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"tenant_create \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_1b6a8681","line":77,"range":{"start_line":75,"start_character":0,"end_line":77,"end_character":28},"updated":"2016-07-26 08:12:24.000000000","message":"looks like there is an ID (optional, the ID of trust) parameter for V2 API, it\u0027s should be listed here.\n\nsee http://developer.openstack.org/api-ref/identity/v2-admin/?expanded\u003dcreate-tenant-detail#create-tenant","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f2276b9a1fabb97053061c5f825c3a67f4ef1d4e","unresolved":false,"context_lines":[{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"_tenant_properties \u003d {"},{"line_number":75,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":76,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":77,"context_line":"    \u0027name\u0027: _name_properties"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"tenant_create \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_d89bbdc7","line":77,"range":{"start_line":75,"start_character":0,"end_line":77,"end_character":28},"in_reply_to":"dada55a8_1b6a8681","updated":"2016-07-26 14:09:29.000000000","message":"Will add next patchset.","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"870c68cc1bf54d6982680e91f52deecb794cbbf3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":82,"context_line":"    \u0027properties\u0027: _tenant_properties,"},{"line_number":83,"context_line":"    \u0027required\u0027: [\u0027name\u0027],"},{"line_number":84,"context_line":"    \u0027not\u0027: {"},{"line_number":85,"context_line":"        \u0027required\u0027: [\u0027is_domain\u0027]"},{"line_number":86,"context_line":"    },"},{"line_number":87,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":88,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_3bd66a4f","line":86,"range":{"start_line":84,"start_character":0,"end_line":86,"end_character":6},"updated":"2016-07-26 08:12:24.000000000","message":"This is a new property which is landed in Mitaka for V3 API, let\u0027s not mention for V2 tenant creation.","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f2276b9a1fabb97053061c5f825c3a67f4ef1d4e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":82,"context_line":"    \u0027properties\u0027: _tenant_properties,"},{"line_number":83,"context_line":"    \u0027required\u0027: [\u0027name\u0027],"},{"line_number":84,"context_line":"    \u0027not\u0027: {"},{"line_number":85,"context_line":"        \u0027required\u0027: [\u0027is_domain\u0027]"},{"line_number":86,"context_line":"    },"},{"line_number":87,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":88,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_788a9165","line":86,"range":{"start_line":84,"start_character":0,"end_line":86,"end_character":6},"in_reply_to":"dada55a8_3bd66a4f","updated":"2016-07-26 14:09:29.000000000","message":"This property is currently validated in the v2 controller.  Should I remove the check?\n\nhttps://github.com/openstack/keystone/blob/master/keystone/resource/controllers.py#L95-L98","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"}],"keystone/tests/unit/test_v2_validation.py":[{"author":{"_account_id":19985,"name":"Ryosuke Mizuno","email":"r-mizuno@rs.jp.nec.com","username":"r-mizuno"},"change_message_id":"f7e27c7070ccc367d6df1fd489d036165c53cc1e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    def setUp(self):"},{"line_number":72,"context_line":"        super(TenantValidationTestCase, self).setUp()"},{"line_number":73,"context_line":"        schema_tenant_create \u003d resource_schema.tenant_create"},{"line_number":74,"context_line":"        self.create_tenant_validator \u003d validators.SchemaValidator("},{"line_number":75,"context_line":"            schema_tenant_create)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_validate_tenant_create_success(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_3454f052","line":74,"range":{"start_line":74,"start_character":19,"end_line":74,"end_character":26},"updated":"2016-07-25 11:34:04.000000000","message":"please turn this off , or add to the create_validator below.","commit_id":"ce6e1f6ada2a8b441d1a7a95b580c13df3368721"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f912b3adf629c99ea3917ffd5e0c3f9872696010","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    def setUp(self):"},{"line_number":72,"context_line":"        super(TenantValidationTestCase, self).setUp()"},{"line_number":73,"context_line":"        schema_tenant_create \u003d resource_schema.tenant_create"},{"line_number":74,"context_line":"        self.create_tenant_validator \u003d validators.SchemaValidator("},{"line_number":75,"context_line":"            schema_tenant_create)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_validate_tenant_create_success(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_d36e1c2e","line":74,"range":{"start_line":74,"start_character":19,"end_line":74,"end_character":26},"in_reply_to":"dada55a8_3454f052","updated":"2016-07-26 05:53:02.000000000","message":"Done","commit_id":"ce6e1f6ada2a8b441d1a7a95b580c13df3368721"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"bcdb6b80317c6539ccf5758b27664f37e82f8d9c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":93,"context_line":"            \u0027description\u0027: \u0027Test tenant\u0027,"},{"line_number":94,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":95,"context_line":"            \u0027extra\u0027: \u0027test\u0027"},{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":"        self.create_validator.validate(request)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_db7efce2","line":95,"range":{"start_line":95,"start_character":12,"end_line":95,"end_character":27},"updated":"2016-07-27 00:57:55.000000000","message":"`extra` is what is stored in DB, this could be any parameter, such as \u0027location\u0027, \u0027status\u0027, but yes, it could be just named as `extra`.","commit_id":"5225965c101f2c969b5bbc2ba4da68099c914db4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"bcdb6b80317c6539ccf5758b27664f37e82f8d9c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def test_validate_tenant_create_failure_with_empty_name(self):"},{"line_number":109,"context_line":"        request \u003d {"},{"line_number":110,"context_line":"            \u0027name\u0027: \u0027\u0027,"},{"line_number":111,"context_line":"            \u0027description\u0027: \u0027Test tenant\u0027,"},{"line_number":112,"context_line":"            \u0027enabled\u0027: True"},{"line_number":113,"context_line":"        }"},{"line_number":114,"context_line":"        self.assertRaises(exception.SchemaValidationError,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_bbaa286f","line":111,"range":{"start_line":111,"start_character":27,"end_line":111,"end_character":40},"updated":"2016-07-27 00:57:55.000000000","message":"use uuid.uuid4().hex instead, fine as it is.","commit_id":"5225965c101f2c969b5bbc2ba4da68099c914db4"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"1c4d12f80698c357af107db9ebfcf89b996d80d5","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def test_validate_tenant_create_failure_with_empty_name(self):"},{"line_number":109,"context_line":"        request \u003d {"},{"line_number":110,"context_line":"            \u0027name\u0027: \u0027\u0027,"},{"line_number":111,"context_line":"            \u0027description\u0027: \u0027Test tenant\u0027,"},{"line_number":112,"context_line":"            \u0027enabled\u0027: True"},{"line_number":113,"context_line":"        }"},{"line_number":114,"context_line":"        self.assertRaises(exception.SchemaValidationError,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_24ec54ba","line":111,"range":{"start_line":111,"start_character":27,"end_line":111,"end_character":40},"in_reply_to":"dada55a8_bbaa286f","updated":"2016-07-27 03:28:03.000000000","message":"Done","commit_id":"5225965c101f2c969b5bbc2ba4da68099c914db4"}],"keystone/tests/unit/test_validation.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"870c68cc1bf54d6982680e91f52deecb794cbbf3","unresolved":false,"context_lines":[{"line_number":2128,"context_line":"        validators.validate_password(password)"},{"line_number":2129,"context_line":""},{"line_number":2130,"context_line":""},{"line_number":2131,"context_line":"class TenantValidationTestCase(unit.BaseTestCase):"},{"line_number":2132,"context_line":"    \"\"\"Test for v2 Tenant API Validation.\"\"\""},{"line_number":2133,"context_line":""},{"line_number":2134,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_fbf6925b","line":2131,"range":{"start_line":2131,"start_character":1,"end_line":2131,"end_character":50},"updated":"2016-07-26 08:12:24.000000000","message":"I think all test testcases should be in test_v2_validation.py.\n\npls see: https://github.com/openstack/keystone/blob/master/keystone/tests/unit/test_v2_validation.py","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"870c68cc1bf54d6982680e91f52deecb794cbbf3","unresolved":false,"context_lines":[{"line_number":2189,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":2190,"context_line":"            \u0027description\u0027: \u0027Test tenant\u0027,"},{"line_number":2191,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":2192,"context_line":"            \u0027is_domain\u0027: False"},{"line_number":2193,"context_line":"        }"},{"line_number":2194,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":2195,"context_line":"                          self.create_validator.validate,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_9b9cb60f","line":2192,"range":{"start_line":2192,"start_character":12,"end_line":2192,"end_character":30},"updated":"2016-07-26 08:12:24.000000000","message":"Don\u0027t mention V3 property in V2.","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"f2276b9a1fabb97053061c5f825c3a67f4ef1d4e","unresolved":false,"context_lines":[{"line_number":2189,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":2190,"context_line":"            \u0027description\u0027: \u0027Test tenant\u0027,"},{"line_number":2191,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":2192,"context_line":"            \u0027is_domain\u0027: False"},{"line_number":2193,"context_line":"        }"},{"line_number":2194,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":2195,"context_line":"                          self.create_validator.validate,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_9852e5dc","line":2192,"range":{"start_line":2192,"start_character":12,"end_line":2192,"end_character":30},"in_reply_to":"dada55a8_9b9cb60f","updated":"2016-07-26 14:09:29.000000000","message":"See other comment regarding checking \u0027is_domain\u0027.\n\nhttps://github.com/openstack/keystone/blob/master/keystone/resource/controllers.py#L95-L98","commit_id":"507546d2217e48f34809a177315085ecf9466b0b"}]}
