)]}'
{"keystone/catalog/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"03f1d31059b17ba5d4720a1a4f765281c34b4be3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def create_service(self, request, OS_KSADM_service):"},{"line_number":59,"context_line":"        validation.lazy_validate(schema.service_create_v2, OS_KSADM_service)"},{"line_number":60,"context_line":"        self.assert_admin(request)"},{"line_number":61,"context_line":"        service_id \u003d uuid.uuid4().hex"},{"line_number":62,"context_line":"        service_ref \u003d OS_KSADM_service.copy()"},{"line_number":63,"context_line":"        service_ref[\u0027id\u0027] \u003d service_id"},{"line_number":64,"context_line":"        initiator \u003d notifications._get_request_audit_info(request.context_dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_e2d54ce5","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":37},"updated":"2016-07-26 03:40:36.000000000","message":"service_id is definitely not needed for the create call","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35b80d25174e9256f823dac94ad7d9d2ed37a0f1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def create_service(self, request, OS_KSADM_service):"},{"line_number":59,"context_line":"        validation.lazy_validate(schema.service_create_v2, OS_KSADM_service)"},{"line_number":60,"context_line":"        self.assert_admin(request)"},{"line_number":61,"context_line":"        service_id \u003d uuid.uuid4().hex"},{"line_number":62,"context_line":"        service_ref \u003d OS_KSADM_service.copy()"},{"line_number":63,"context_line":"        service_ref[\u0027id\u0027] \u003d service_id"},{"line_number":64,"context_line":"        initiator \u003d notifications._get_request_audit_info(request.context_dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_62ef1ab1","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":37},"in_reply_to":"dada55a8_e2d54ce5","updated":"2016-07-27 15:35:16.000000000","message":"fixed","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"}],"keystone/catalog/schema.py":[{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"4a5d877c23a34ecd2742d5d2379dbd7285ce7e15","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# Schema for Service v2"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_6fae7399","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":26},"updated":"2016-07-25 20:23:39.000000000","message":"Previous tests implied that both \u0027id\u0027 and \u0027description\u0027 were optional, not sure if this is 100% correct.","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35b80d25174e9256f823dac94ad7d9d2ed37a0f1","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# Schema for Service v2"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_c2036675","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":26},"in_reply_to":"dada55a8_22880471","updated":"2016-07-27 15:35:16.000000000","message":"keystone.tests.unit.common.test_notifications.V2Notifications.test_service_and_endpoint\n\nkeystone.tests.unit.test_v2.RevokeApiTestCase.test_service_crud_requires_auth\n\nkeystone.tests.unit.test_v2.V2TestCase.test_service_crud_requires_auth\n\nThose fail when description and id is made required.","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"03f1d31059b17ba5d4720a1a4f765281c34b4be3","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# Schema for Service v2"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_22880471","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":26},"in_reply_to":"dada55a8_6fae7399","updated":"2016-07-26 03:40:36.000000000","message":"where are these previous tests you speak of?","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"03f1d31059b17ba5d4720a1a4f765281c34b4be3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string,"},{"line_number":51,"context_line":"    \u0027id\u0027: parameter_types.id_string"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"service_create_v2 \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_220ac48a","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":35},"updated":"2016-07-26 03:40:36.000000000","message":"probably want to remove this one, we generally don\u0027t allow user defined IDs for things","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35b80d25174e9256f823dac94ad7d9d2ed37a0f1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string,"},{"line_number":51,"context_line":"    \u0027id\u0027: parameter_types.id_string"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"service_create_v2 \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_e202ea6e","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":35},"in_reply_to":"dada55a8_220ac48a","updated":"2016-07-27 15:35:16.000000000","message":"fixed","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"03f1d31059b17ba5d4720a1a4f765281c34b4be3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":75,"context_line":"    \u0027properties\u0027: _service_properties,"},{"line_number":76,"context_line":"    \u0027required\u0027: [\u0027type\u0027],"},{"line_number":77,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":78,"context_line":"}"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"service_update \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_62115c04","line":77,"updated":"2016-07-26 03:40:36.000000000","message":"unnecessary change","commit_id":"1ff9382dc5a60bb720c8b3c571796b63b4145deb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"320963979583f21a0024348038eab51cce925041","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# Schema for Service v2"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_08b47cf0","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":22},"updated":"2016-07-27 17:04:28.000000000","message":"can you add \"\u0027enabled\u0027: parameter_types.boolean,\" too?","commit_id":"219b0a9c729e6743044744b91b9c0b4e8f802eb7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"320963979583f21a0024348038eab51cce925041","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# Schema for Service v2"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string"},{"line_number":51,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_080f5ce2","line":48,"range":{"start_line":48,"start_character":5,"end_line":48,"end_character":9},"updated":"2016-07-27 17:04:28.000000000","message":"this should match the values in line 65-68","commit_id":"219b0a9c729e6743044744b91b9c0b4e8f802eb7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"320963979583f21a0024348038eab51cce925041","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string"},{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_28cb4074","line":49,"range":{"start_line":49,"start_character":35,"end_line":49,"end_character":44},"updated":"2016-07-27 17:04:28.000000000","message":"you probably want to use \"\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027],\" here, check line 18/19","commit_id":"219b0a9c729e6743044744b91b9c0b4e8f802eb7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"320963979583f21a0024348038eab51cce925041","unresolved":false,"context_lines":[{"line_number":47,"context_line":"_service_properties_v2 \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: parameter_types.id_string,"},{"line_number":49,"context_line":"    \u0027description\u0027: parameter_types.id_string,"},{"line_number":50,"context_line":"    \u0027name\u0027: parameter_types.id_string"},{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"service_create_v2 \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_c8870411","line":50,"range":{"start_line":50,"start_character":12,"end_line":50,"end_character":37},"updated":"2016-07-27 17:04:28.000000000","message":"use parameter_types.name","commit_id":"219b0a9c729e6743044744b91b9c0b4e8f802eb7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"320963979583f21a0024348038eab51cce925041","unresolved":false,"context_lines":[{"line_number":53,"context_line":"service_create_v2 \u003d {"},{"line_number":54,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":55,"context_line":"    \u0027properties\u0027: _service_properties_v2,"},{"line_number":56,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027type\u0027],"},{"line_number":57,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_2848602d","line":56,"range":{"start_line":56,"start_character":18,"end_line":56,"end_character":22},"updated":"2016-07-27 17:04:28.000000000","message":"so, looking at the model and manager code, i don\u0027t think \u0027name\u0027 is required.\n\nthe model doesn\u0027t specify it as a column: https://github.com/openstack/keystone/blob/d9c6b50a3ae514e640fa13a344e59fe3649ee0ef/keystone/catalog/backends/sql.py#L52-L60\n\nand the manager sets it to an empty string by default: https://github.com/openstack/keystone/blob/7923a4669278c1386bea2520adf097760a3ec4fd/keystone/catalog/core.py#L127-L133","commit_id":"219b0a9c729e6743044744b91b9c0b4e8f802eb7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"c31539319ad056fe2dcbd279a7527aaab6bda98e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from keystone.common import validation"},{"line_number":14,"context_line":"from keystone.common.validation import parameter_types"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"_type \u003d {"},{"line_number":17,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":18,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":19,"context_line":"    \u0027maxLength\u0027: 255"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_04c1f9e4","line":16,"updated":"2016-07-27 22:42:24.000000000","message":"Maybe this should have a more descriptive name, like \u0027_service_properties_type\u0027 or \u0027_string_type\u0027? Other schemas have \u0027type\u0027 parameters that don\u0027t match this","commit_id":"738bcf5bd940453ea57847c762b2e63bd1f2a8eb"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f62e7faf3e5ee7838526eaf814c18dc0132e908c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from keystone.common import validation"},{"line_number":14,"context_line":"from keystone.common.validation import parameter_types"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"_type \u003d {"},{"line_number":17,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":18,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":19,"context_line":"    \u0027maxLength\u0027: 255"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_8e921856","line":16,"in_reply_to":"bacf61ea_04c1f9e4","updated":"2016-07-28 08:20:46.000000000","message":"++","commit_id":"738bcf5bd940453ea57847c762b2e63bd1f2a8eb"}],"keystone/tests/unit/test_v2_validation.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f62e7faf3e5ee7838526eaf814c18dc0132e908c","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class ServiceValidationTestCase(unit.BaseTestCase):"},{"line_number":69,"context_line":"    \"\"\"Test for V2 Service API Validation.\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def setUp(self):"},{"line_number":72,"context_line":"        super(ServiceValidationTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_0ef3c874","line":69,"updated":"2016-07-28 08:20:46.000000000","message":"maybe add some testcases for `enabled`? like this one https://review.openstack.org/#/c/348115/","commit_id":"738bcf5bd940453ea57847c762b2e63bd1f2a8eb"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8292466882f04bb6cd3afecb4fa14c434938c01b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                          self.create_validator.validate,"},{"line_number":185,"context_line":"                          request)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def test_validate_service_create_fails_with_no_params(self):"},{"line_number":188,"context_line":"        request \u003d {}"},{"line_number":189,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":190,"context_line":"                          self.create_validator.validate,"},{"line_number":191,"context_line":"                          request)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_validate_service_create_fails_with_invalid_name(self):"},{"line_number":194,"context_line":"        request \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_c1f784f3","line":191,"range":{"start_line":187,"start_character":0,"end_line":191,"end_character":34},"updated":"2016-07-29 06:38:30.000000000","message":"Since create service allow additional property, this testcase fails as it needs the required property \u0027type\u0027, so this testcase is actually the same as the testcase above `test_validate_service_create_fails_with_invalid_params`.\n\nBoth the validation failed with the same reason, i.e.this is a duplicated testcase.","commit_id":"2055310a39f70f06e89a76ab8a5630a7d85adcff"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"183deae9398cd98018a495e6d6db340d287f46af","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                          self.create_validator.validate,"},{"line_number":185,"context_line":"                          request)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def test_validate_service_create_fails_with_no_params(self):"},{"line_number":188,"context_line":"        request \u003d {}"},{"line_number":189,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":190,"context_line":"                          self.create_validator.validate,"},{"line_number":191,"context_line":"                          request)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_validate_service_create_fails_with_invalid_name(self):"},{"line_number":194,"context_line":"        request \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_56013105","line":191,"range":{"start_line":187,"start_character":0,"end_line":191,"end_character":34},"in_reply_to":"bacf61ea_c1f784f3","updated":"2016-08-01 14:54:49.000000000","message":"Ah ok, will fix","commit_id":"2055310a39f70f06e89a76ab8a5630a7d85adcff"}]}
