)]}'
{"keystone/api/credentials.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4886e9283aa150b3ceb546f0d7728cbd7b149443","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        trust_id \u003d getattr(self.oslo_context, \u0027trust_id\u0027, None)"},{"line_number":140,"context_line":"        ref \u003d self._assign_unique_id("},{"line_number":141,"context_line":"            self._normalize_dict(credential), trust_id\u003dtrust_id)"},{"line_number":142,"context_line":"        ref \u003d PROVIDERS.credential_api.create_credential(ref[\u0027id\u0027], ref, initiator\u003dself.audit_initiator)"},{"line_number":143,"context_line":"        return self.wrap_member(ref), http_client.CREATED"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def patch(self, credential_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_d4c30288","line":142,"range":{"start_line":142,"start_character":83,"end_line":142,"end_character":104},"updated":"2019-06-12 19:04:47.000000000","message":"This is going to fail the pep8 check for going over the line length :(","commit_id":"e7a9df89dfb3aa9332c27efe2abd395f34e17c01"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"d6382cc6dd1d369c0f79af625c5b9a65297e6634","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        ref \u003d PROVIDERS.credential_api.delete_credential(credential_id,"},{"line_number":169,"context_line":"                                                         initiator\u003dself.audit_initiator)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        return self.wrap_member(ref), http_client.NO_CONTENT"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"class CredentialAPI(ks_flask.APIBase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_08409e06","line":171,"range":{"start_line":171,"start_character":15,"end_line":171,"end_character":36},"updated":"2019-06-12 20:00:50.000000000","message":"Oops, missed this before. This is introducing a change that wasn\u0027t there before and is unrelated to the main change. It\u0027s actually a very problematic change because delete_credential should return None, so there is no sense in using collecting the value and wrapping it to present to the user. Please undo this part.","commit_id":"ce81d34401a165cf1a785bdb2752aa995222828e"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"87426e4878012570592bc9a03854f45c282903bd","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        )"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        return PROVIDERS.credential_api.delete_credential(credential_id,"},{"line_number":169,"context_line":"                                                          initiator\u003dself.audit_initiator), http_client.NO_CONTENT"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class CredentialAPI(ks_flask.APIBase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_e8d8aaef","line":169,"updated":"2019-06-12 20:25:36.000000000","message":"This will fail the pep8 test again. It should look like this: http://paste.openstack.org/show/752838/","commit_id":"226108648a2c6521208a8326d5ac0f2c2765d6d3"}],"keystone/credential/core.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"96d5669298f95626eedc80a47f2ad09591b5f414","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        self.driver.delete_credential(credential_id)"},{"line_number":188,"context_line":"        self._get_credential.invalidate(self, credential_id)"},{"line_number":189,"context_line":"        notifications.Audit.deleted("},{"line_number":190,"context_line":"            self._CRED, credential_id, initiator)"},{"line_number":191,"context_line":"        self._list_credentials_for_user.invalidate(self,"},{"line_number":192,"context_line":"                                                   cred[\u0027user_id\u0027],"},{"line_number":193,"context_line":"                                                   cred[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_4b0b0c23","line":190,"updated":"2019-06-11 18:04:48.000000000","message":"Forgot to note this previously, this should go at the end of the function (since it\u0027s notifying that the whole action was completed successfully)","commit_id":"4b6154d8404a74b59f3aef2428eb18c33efec142"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"f54fa306db3f8da481502d8d5b4348b4e0fd9025","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        return self.driver.get_credential(credential_id)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_credential(self, credential_id, credential,"},{"line_number":119,"context_line":"                          initiator\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Create a credential.\"\"\""},{"line_number":121,"context_line":"        credential_copy \u003d self._encrypt_credential(credential)"},{"line_number":122,"context_line":"        ref \u003d self.driver.create_credential(credential_id, credential_copy)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_1f99c577","line":119,"updated":"2019-06-12 02:12:51.000000000","message":"I think the value of \"initiator\" should be passed from API layer?","commit_id":"8f86b4d2bf916c11fd075b3bc9f9907791c28cbb"},{"author":{"_account_id":25231,"name":"Nathan Oyler","email":"notque@gmail.com","username":"notq"},"change_message_id":"a25c49a259936ed69f64d878c330a3a580861502","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        return self.driver.get_credential(credential_id)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_credential(self, credential_id, credential,"},{"line_number":119,"context_line":"                          initiator\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Create a credential.\"\"\""},{"line_number":121,"context_line":"        credential_copy \u003d self._encrypt_credential(credential)"},{"line_number":122,"context_line":"        ref \u003d self.driver.create_credential(credential_id, credential_copy)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_a8b15749","line":119,"in_reply_to":"9fb8cfa7_1f99c577","updated":"2019-06-12 15:55:02.000000000","message":"I used the same structure as application credentials which also uses the initiator\u003dNone syntax. When I look at events created with application credentials, it fills the initiator properly, so I\u0027m unsure how this is being done.","commit_id":"8f86b4d2bf916c11fd075b3bc9f9907791c28cbb"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"6b3561e109f46a45493e48b937da7f32e8954ed2","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        return self.driver.get_credential(credential_id)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_credential(self, credential_id, credential,"},{"line_number":119,"context_line":"                          initiator\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Create a credential.\"\"\""},{"line_number":121,"context_line":"        credential_copy \u003d self._encrypt_credential(credential)"},{"line_number":122,"context_line":"        ref \u003d self.driver.create_credential(credential_id, credential_copy)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_48cd3b2f","line":119,"in_reply_to":"9fb8cfa7_a8b15749","updated":"2019-06-12 16:13:19.000000000","message":"XiYuan is right, we actually need to set this value when calling the function in order for it to be useful. That should happen here:\n\nhttps://opendev.org/openstack/keystone/src/branch/master/keystone/api/credentials.py#L142\nhttps://opendev.org/openstack/keystone/src/branch/master/keystone/api/credentials.py#L167\n\nExample:\n\nhttps://opendev.org/openstack/keystone/src/branch/master/keystone/api/users.py#L615-L616\nhttps://opendev.org/openstack/keystone/src/branch/master/keystone/api/users.py#L650-L651","commit_id":"8f86b4d2bf916c11fd075b3bc9f9907791c28cbb"}]}
