)]}'
{"keystone/credential/core.py":[{"author":{"_account_id":20223,"name":"zhaolihui","email":"zhaolh@awcloud.com","username":"zhaolihui"},"change_message_id":"e166208e23f0b4df1d32f52849cf39ebf496c8f7","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _assert_limit_not_exceeded(self, user_id):"},{"line_number":90,"context_line":"        user_limit \u003d CONF.credential.user_limit"},{"line_number":91,"context_line":"        if user_limit \u003e\u003d 0:"},{"line_number":92,"context_line":"            cred_count \u003d len(self.list_credentials_for_user(user_id))"},{"line_number":93,"context_line":"            if cred_count \u003e\u003d user_limit:"},{"line_number":94,"context_line":"                raise exception.CredentialLimitExceeded("}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_07733917","line":91,"updated":"2020-04-21 01:48:11.000000000","message":"In my option, it should add like this\n\nif user_limit \u003e\u003d 0:\n    ...\nelse:\n    \u0027user_limit is not set\u0027 or user_limit \u003d -1","commit_id":"55295ab8737c05dfeb14fb004bd6577d8a2953b5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"31d51680aac44627b389443eea1e54d3160e9400","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Create a credential.\"\"\""},{"line_number":129,"context_line":"        credential_copy \u003d self._encrypt_credential(credential)"},{"line_number":130,"context_line":"        user_id \u003d credential_copy[\u0027user_id\u0027]"},{"line_number":131,"context_line":"        self._assert_limit_not_exceeded(user_id)"},{"line_number":132,"context_line":"        ref \u003d self.driver.create_credential(credential_id, credential_copy)"},{"line_number":133,"context_line":"        if MEMOIZE.should_cache(ref):"},{"line_number":134,"context_line":"            self._get_credential.set(ref,"},{"line_number":135,"context_line":"                                     credential_copy,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_9d072aca","line":132,"range":{"start_line":131,"start_character":8,"end_line":132,"end_character":75},"updated":"2020-05-29 15:29:43.000000000","message":"This code looks a bit racy.","commit_id":"824fe5412bc79f1ae41f65e6d3e0eed5c4748a56"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"14cbfabee5bcbb5f134769931e59cdf0c662fe26","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Create a credential.\"\"\""},{"line_number":129,"context_line":"        credential_copy \u003d self._encrypt_credential(credential)"},{"line_number":130,"context_line":"        user_id \u003d credential_copy[\u0027user_id\u0027]"},{"line_number":131,"context_line":"        self._assert_limit_not_exceeded(user_id)"},{"line_number":132,"context_line":"        ref \u003d self.driver.create_credential(credential_id, credential_copy)"},{"line_number":133,"context_line":"        if MEMOIZE.should_cache(ref):"},{"line_number":134,"context_line":"            self._get_credential.set(ref,"},{"line_number":135,"context_line":"                                     credential_copy,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_579c75be","line":132,"range":{"start_line":131,"start_character":8,"end_line":132,"end_character":75},"in_reply_to":"ff570b3c_059da665","updated":"2020-06-11 22:42:30.000000000","message":"Never mind, noticed your other comment :)","commit_id":"824fe5412bc79f1ae41f65e6d3e0eed5c4748a56"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"53158b09f056c20f094ee0573f90b89655a3ab2e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Create a credential.\"\"\""},{"line_number":129,"context_line":"        credential_copy \u003d self._encrypt_credential(credential)"},{"line_number":130,"context_line":"        user_id \u003d credential_copy[\u0027user_id\u0027]"},{"line_number":131,"context_line":"        self._assert_limit_not_exceeded(user_id)"},{"line_number":132,"context_line":"        ref \u003d self.driver.create_credential(credential_id, credential_copy)"},{"line_number":133,"context_line":"        if MEMOIZE.should_cache(ref):"},{"line_number":134,"context_line":"            self._get_credential.set(ref,"},{"line_number":135,"context_line":"                                     credential_copy,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_059da665","line":132,"range":{"start_line":131,"start_character":8,"end_line":132,"end_character":75},"in_reply_to":"ff570b3c_9d072aca","updated":"2020-06-11 21:59:28.000000000","message":"Do you have a suggestion to improve it? While I think you\u0027re right I think the chances of it causing a major issue is minuscule.","commit_id":"824fe5412bc79f1ae41f65e6d3e0eed5c4748a56"}],"keystone/tests/unit/credential/test_backend_sql.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"99debe66d7ddff8fe88433dbfff828c33dd29835","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.tests.unit import default_fixtures"},{"line_number":21,"context_line":"from keystone.tests.unit import ksfixtures"},{"line_number":22,"context_line":"from keystone.tests.unit.ksfixtures import database"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from keystone.credential.backends import sql as credential_sql"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_c42ba07f","line":23,"updated":"2020-04-17 21:10:02.000000000","message":"pep8: H306  imports not in alphabetical order (keystone.tests.unit.ksfixtures.database, keystone.exception)","commit_id":"3b4087aed2d4902bf6efe599cb9a69d98c411609"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"99debe66d7ddff8fe88433dbfff828c33dd29835","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertIsInstance(ref.encrypted_blob, str)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_credential_limits(self):"},{"line_number":110,"context_line":"        import pdb; pdb.set_trace()"},{"line_number":111,"context_line":"        config_fixture_ \u003d self.user \u003d self.useFixture(config_fixture.Config())"},{"line_number":112,"context_line":"        config_fixture_.config(group\u003d\u0027credential\u0027, user_limit\u003d2)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4c43b2_242364aa","line":110,"updated":"2020-04-17 21:10:02.000000000","message":"pep8: E702 multiple statements on one line (semicolon)","commit_id":"3b4087aed2d4902bf6efe599cb9a69d98c411609"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"be1869d3ebf15a8ac7151e9108034589bdae5884","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.tests.unit import default_fixtures"},{"line_number":21,"context_line":"from keystone.tests.unit import ksfixtures"},{"line_number":22,"context_line":"from keystone.tests.unit.ksfixtures import database"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from keystone.credential.backends import sql as credential_sql"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4c43b2_5bfe46ae","line":23,"updated":"2020-04-18 19:23:29.000000000","message":"pep8: H306  imports not in alphabetical order (keystone.tests.unit.ksfixtures.database, keystone.exception)","commit_id":"486005508aba61b7a86fa5421801f4fde4128e8c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"53158b09f056c20f094ee0573f90b89655a3ab2e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        for _ in range(2):"},{"line_number":114,"context_line":"            self.assertRaises(exception.CredentialLimitExceeded,"},{"line_number":115,"context_line":"                              self._create_credential_with_user_id,"},{"line_number":116,"context_line":"                              self.user_foo[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_85b096df","line":116,"updated":"2020-06-11 21:59:28.000000000","message":"It doesn\u0027t make sense to make the same call twice and assert the same thing. setUp already creates three credentials so if you set the limit at 2 then it\u0027s already over the limit. You could set it to 2 or 3 and then call this just once instead of twice, or better would be to set a higher limit like 4, validate that creating one more still works, but that the fifth one gets rejected.","commit_id":"824fe5412bc79f1ae41f65e6d3e0eed5c4748a56"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"4edc34e732f6aa1d4f79618efe880471122997f3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        for _ in range(2):"},{"line_number":114,"context_line":"            self.assertRaises(exception.CredentialLimitExceeded,"},{"line_number":115,"context_line":"                              self._create_credential_with_user_id,"},{"line_number":116,"context_line":"                              self.user_foo[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_3053c7e4","line":116,"in_reply_to":"ff570b3c_85b096df","updated":"2020-06-12 07:13:59.000000000","message":"Done","commit_id":"824fe5412bc79f1ae41f65e6d3e0eed5c4748a56"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d91b13b61851a169996a8adcf3e9515f200216c2","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertRaises(exception.CredentialLimitExceeded,"},{"line_number":114,"context_line":"                          self._create_credential_with_user_id,"},{"line_number":115,"context_line":"                          self.user_foo[\u0027id\u0027])"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff570b3c_70189f83","line":116,"updated":"2020-06-12 08:38:29.000000000","message":"pep8: W391 blank line at end of file","commit_id":"8e34446c10bdaf17bca93bf3916706a385c3458c"}]}
