)]}'
{"keystone/oauth1/backends/sql.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"69d353a18531c7cd9cffd01df038f777886a409d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            self.get_consumer_with_secret(consumer_id))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def create_consumer(self, consumer):"},{"line_number":104,"context_line":"        consumer[\u0027secret\u0027] \u003d uuid.uuid4().hex"},{"line_number":105,"context_line":"        session \u003d sql.get_session()"},{"line_number":106,"context_line":"        with session.begin():"},{"line_number":107,"context_line":"            consumer_ref \u003d Consumer.from_dict(consumer)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_d64e8e95","line":104,"updated":"2016-01-13 13:14:10.000000000","message":"Why you need to remove this code? This not looks like just a schema validation, sounds more to a schema change. can you add the reason on the commit message?","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e58fdfcab75ba202661a4fc979e1f78964f26af8","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            self.get_consumer_with_secret(consumer_id))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def create_consumer(self, consumer):"},{"line_number":104,"context_line":"        consumer[\u0027secret\u0027] \u003d uuid.uuid4().hex"},{"line_number":105,"context_line":"        session \u003d sql.get_session()"},{"line_number":106,"context_line":"        with session.begin():"},{"line_number":107,"context_line":"            consumer_ref \u003d Consumer.from_dict(consumer)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_92a754bc","line":104,"in_reply_to":"da6ed579_d64e8e95","updated":"2016-01-15 03:29:51.000000000","message":"Done","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"1a91f19b6587c0355793035a1f628625e4e40a1e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            self.get_consumer_with_secret(consumer_id))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def create_consumer(self, consumer):"},{"line_number":104,"context_line":"        consumer[\u0027secret\u0027] \u003d uuid.uuid4().hex"},{"line_number":105,"context_line":"        session \u003d sql.get_session()"},{"line_number":106,"context_line":"        with session.begin():"},{"line_number":107,"context_line":"            consumer_ref \u003d Consumer.from_dict(consumer)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_f87ef817","line":104,"in_reply_to":"da6ed579_d64e8e95","updated":"2016-01-14 01:28:43.000000000","message":"per my understanding, these code block itself is meaningless, it just restrict the `desc` cannot be an empty. This is not true and not consistent with other implementation across the keystone project.\n\nInstead, I do the following in the schema definition to consistent with other entities, such as identity. \n\n \u0027description\u0027: validation.nullable(parameter_types.description)\n\n\nBut good catch! let\u0027s see what others wanna say about this.","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"434e90df187ecd69a12084c25984547f8e8139c5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            self.get_consumer_with_secret(consumer_id))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def create_consumer(self, consumer):"},{"line_number":104,"context_line":"        consumer[\u0027secret\u0027] \u003d uuid.uuid4().hex"},{"line_number":105,"context_line":"        session \u003d sql.get_session()"},{"line_number":106,"context_line":"        with session.begin():"},{"line_number":107,"context_line":"            consumer_ref \u003d Consumer.from_dict(consumer)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_7b8a021d","line":104,"in_reply_to":"da6ed579_f804b84a","updated":"2016-01-14 01:58:51.000000000","message":"yep, the only difference i can see is that before the change, the `desc` cannot be an empty string (\u0027\u0027), it will be convert to be None.\n\nafter removing this block and enforcing via the schema, empty string is allowed, this sound okay to me since this will make it consistent with other entities, and looks like there is no reason empty string should be banned at all.","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fd800e7eb5cd896e7c45aa46521279348c56278b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            self.get_consumer_with_secret(consumer_id))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def create_consumer(self, consumer):"},{"line_number":104,"context_line":"        consumer[\u0027secret\u0027] \u003d uuid.uuid4().hex"},{"line_number":105,"context_line":"        session \u003d sql.get_session()"},{"line_number":106,"context_line":"        with session.begin():"},{"line_number":107,"context_line":"            consumer_ref \u003d Consumer.from_dict(consumer)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_f804b84a","line":104,"in_reply_to":"da6ed579_f87ef817","updated":"2016-01-14 01:40:20.000000000","message":"i think, since the SQL column can be nullable, this is OK.\n\n  description \u003d sql.Column(sql.String(64), nullable\u003dTrue)\n\nadditionally, the client sets description\u003dNone anyway.\n\nhttps://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/v3/contrib/oauth1/consumers.py#L35-L38","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"}],"keystone/oauth1/schema.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6a3300e4d59af4a025f4e3d671ffa43d3b545b86","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"consumer_create \u003d {"},{"line_number":17,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":18,"context_line":"    \u0027properties\u0027: {"},{"line_number":19,"context_line":"        \u0027description\u0027: validation.nullable(parameter_types.description)"},{"line_number":20,"context_line":"    },"},{"line_number":21,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":22,"context_line":"}"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba63e191_3147004d","line":20,"range":{"start_line":18,"start_character":4,"end_line":20,"end_character":6},"updated":"2016-01-19 22:38:11.000000000","message":"nit: this can be pulled out into a consumer_properties variable and shared with the consumer_update dictionary.","commit_id":"5792e1acd6e64b84e8ec97ee8dac031d1ab1020c"}],"keystone/tests/unit/test_v3_oauth1.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fd800e7eb5cd896e7c45aa46521279348c56278b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        normalized_field2_name \u003d \u0027weird_some_field\u0027"},{"line_number":240,"context_line":"        self.assertEqual(field2_value, consumer[normalized_field2_name])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @wip(\"empty request body doesn\u0027t work due to bug 1501740\")"},{"line_number":243,"context_line":"    def test_consumer_create_no_description(self):"},{"line_number":244,"context_line":"        resp \u003d self.post(self.CONSUMER_URL, body\u003d{\u0027consumer\u0027: {}})"},{"line_number":245,"context_line":"        consumer \u003d resp.result[\u0027consumer\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_f87918c9","line":242,"range":{"start_line":242,"start_character":4,"end_line":242,"end_character":62},"updated":"2016-01-14 01:40:20.000000000","message":"hmm, this is definitely a change in behaviour, we should figure out how to allow empty requests bodies for some API calls","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"434e90df187ecd69a12084c25984547f8e8139c5","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        normalized_field2_name \u003d \u0027weird_some_field\u0027"},{"line_number":240,"context_line":"        self.assertEqual(field2_value, consumer[normalized_field2_name])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @wip(\"empty request body doesn\u0027t work due to bug 1501740\")"},{"line_number":243,"context_line":"    def test_consumer_create_no_description(self):"},{"line_number":244,"context_line":"        resp \u003d self.post(self.CONSUMER_URL, body\u003d{\u0027consumer\u0027: {}})"},{"line_number":245,"context_line":"        consumer \u003d resp.result[\u0027consumer\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_7b91a246","line":242,"range":{"start_line":242,"start_character":4,"end_line":242,"end_character":62},"in_reply_to":"da6ed579_f87918c9","updated":"2016-01-14 01:58:51.000000000","message":"@stevemar, fix is here, I am just waiting for other\u0027s input after changing the approach to fix the bug. https://review.openstack.org/#/c/237448/","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b3da133c5350798d5ff1439ef3c6923b95392469","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    def test_consumer_create_none_desc_1(self):"},{"line_number":136,"context_line":"        self._consumer_create()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @wip(\"empty request body doesn\u0027t work due to bug 1501740\")"},{"line_number":139,"context_line":"    def test_consumer_create_none_desc_2(self):"},{"line_number":140,"context_line":"        self._consumer_create(description_flag\u003dFalse)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_73b8832a","line":138,"updated":"2016-02-01 23:10:45.000000000","message":"This bug is fixed.","commit_id":"b9287e0a97536f1338ef48aa7ae4a933ea356268"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"592d44b98ae3ce274c4dfd4f417c4230e7d0bcaa","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    def test_consumer_create_none_desc_1(self):"},{"line_number":136,"context_line":"        self._consumer_create()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @wip(\"empty request body doesn\u0027t work due to bug 1501740\")"},{"line_number":139,"context_line":"    def test_consumer_create_none_desc_2(self):"},{"line_number":140,"context_line":"        self._consumer_create(description_flag\u003dFalse)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_1a883870","line":138,"in_reply_to":"7a5de9d1_73b8832a","updated":"2016-02-02 06:21:22.000000000","message":"Done","commit_id":"b9287e0a97536f1338ef48aa7ae4a933ea356268"}],"keystone/tests/unit/test_validation.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fd800e7eb5cd896e7c45aa46521279348c56278b","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"                          request_to_validate)"},{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"class OAuth1ValidationTestCase(unit.BaseTestCase):"},{"line_number":2026,"context_line":"    \"\"\"Test for V3 Identity OAuth1 API validation.\"\"\""},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_b8564028","line":2025,"range":{"start_line":2025,"start_character":0,"end_line":2025,"end_character":50},"updated":"2016-01-14 01:40:20.000000000","message":"can you add a test that tries to update the ID as well?","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"434e90df187ecd69a12084c25984547f8e8139c5","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"                          request_to_validate)"},{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"class OAuth1ValidationTestCase(unit.BaseTestCase):"},{"line_number":2026,"context_line":"    \"\"\"Test for V3 Identity OAuth1 API validation.\"\"\""},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_dbbf6ea8","line":2025,"range":{"start_line":2025,"start_character":0,"end_line":2025,"end_character":50},"in_reply_to":"da6ed579_b8564028","updated":"2016-01-14 01:58:51.000000000","message":"will do, i think this should not be allowed.","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"db752429e113874693d7f3cf008be4e028cc14fb","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"                          request_to_validate)"},{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"class OAuth1ValidationTestCase(unit.BaseTestCase):"},{"line_number":2026,"context_line":"    \"\"\"Test for V3 Identity OAuth1 API validation.\"\"\""},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_4c58a28a","line":2025,"range":{"start_line":2025,"start_character":0,"end_line":2025,"end_character":50},"in_reply_to":"da6ed579_dbbf6ea8","updated":"2016-01-14 03:53:15.000000000","message":"oh, schema validation should not take care of it, this has been handled by V3Controller. So, the ID could be passed and couldn\u0027t be banned by jsonschema. :(\n\nhttps://github.com/openstack/keystone/blob/master/keystone/oauth1/controllers.py#L67\n\nhttps://github.com/openstack/keystone/blob/master/keystone/common/controller.py#L662-L665","commit_id":"e80e7ec5c7b50b7809c25c670c81da5643c3e08e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6a3300e4d59af4a025f4e3d671ffa43d3b545b86","unresolved":false,"context_lines":[{"line_number":2040,"context_line":"        self.create_consumer_validator.validate(request_to_validate)"},{"line_number":2041,"context_line":"        self.update_consumer_validator.validate(request_to_validate)"},{"line_number":2042,"context_line":""},{"line_number":2043,"context_line":"    def test_validate_consumer_request_no_parameters(self):"},{"line_number":2044,"context_line":"        \"\"\"Test that schema validation with empty request body.\"\"\""},{"line_number":2045,"context_line":"        request_to_validate \u003d {}"},{"line_number":2046,"context_line":"        self.create_consumer_validator.validate(request_to_validate)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba63e191_f185e858","line":2043,"range":{"start_line":2043,"start_character":39,"end_line":2043,"end_character":52},"updated":"2016-01-19 22:38:11.000000000","message":"nit: _request_with_no_parameters(","commit_id":"5792e1acd6e64b84e8ec97ee8dac031d1ab1020c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6a3300e4d59af4a025f4e3d671ffa43d3b545b86","unresolved":false,"context_lines":[{"line_number":2051,"context_line":""},{"line_number":2052,"context_line":"    def test_validate_consumer_request_with_invalid_description_fails(self):"},{"line_number":2053,"context_line":"        \"\"\"Exception is raised when `description` as a non-string value.\"\"\""},{"line_number":2054,"context_line":"        request_to_validate \u003d {\u0027description\u0027: False}"},{"line_number":2055,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":2056,"context_line":"                          self.create_consumer_validator.validate,"},{"line_number":2057,"context_line":"                          request_to_validate)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba63e191_51971490","line":2054,"range":{"start_line":2054,"start_character":30,"end_line":2054,"end_character":52},"updated":"2016-01-19 22:38:11.000000000","message":"could also add integer/float types to this list.","commit_id":"5792e1acd6e64b84e8ec97ee8dac031d1ab1020c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b3da133c5350798d5ff1439ef3c6923b95392469","unresolved":false,"context_lines":[{"line_number":2068,"context_line":"        request_to_validate \u003d {\u0027secret\u0027: uuid.uuid4().hex}"},{"line_number":2069,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":2070,"context_line":"                          self.update_consumer_validator.validate,"},{"line_number":2071,"context_line":"                          request_to_validate)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_3308cbd9","line":2071,"updated":"2016-02-01 23:10:45.000000000","message":"There should be a test that verifies that you can update a consumer with description: None and this is allowed.","commit_id":"b9287e0a97536f1338ef48aa7ae4a933ea356268"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"592d44b98ae3ce274c4dfd4f417c4230e7d0bcaa","unresolved":false,"context_lines":[{"line_number":2068,"context_line":"        request_to_validate \u003d {\u0027secret\u0027: uuid.uuid4().hex}"},{"line_number":2069,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":2070,"context_line":"                          self.update_consumer_validator.validate,"},{"line_number":2071,"context_line":"                          request_to_validate)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_fa975ce9","line":2071,"in_reply_to":"7a5de9d1_3308cbd9","updated":"2016-02-02 06:21:22.000000000","message":"Done","commit_id":"b9287e0a97536f1338ef48aa7ae4a933ea356268"}]}
