mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-06-28 05:26:13 +02:00
Fix keyring error handling (#1138)
* Capture KeyringLocked exception and allow manual password entry * Create LockedKeyring for steps * Support types in set_keyring step * Clarify LockedKeyring docs * Deal with locked exceptions elsewhere too * Create behave tests for locked keyring * Fix linting * Fix keyring step to allow no type * Handle all keyring retrieval errors * Better keyring error handling * Remove locked keyring for steps; generalize failed keyring * Finalize tests for keyring handling * Update set_keyring step * Make password of failed keyring encryption test more semantic
This commit is contained in:
parent
9f1bef7fde
commit
57de4f9ba4
3 changed files with 56 additions and 20 deletions
|
@ -69,21 +69,19 @@ class NoKeyring(keyring.backend.KeyringBackend):
|
|||
|
||||
class FailedKeyring(keyring.backend.KeyringBackend):
|
||||
"""
|
||||
A keyring that simulates an environment with a keyring that has passwords, but fails
|
||||
to return them.
|
||||
A keyring that cannot be retrieved.
|
||||
"""
|
||||
|
||||
priority = 2
|
||||
keys = defaultdict(dict)
|
||||
|
||||
def set_password(self, servicename, username, password):
|
||||
self.keys[servicename][username] = password
|
||||
raise keyring.errors.KeyringError
|
||||
|
||||
def get_password(self, servicename, username):
|
||||
raise keyring.errors.NoKeyringError
|
||||
raise keyring.errors.KeyringError
|
||||
|
||||
def delete_password(self, servicename, username):
|
||||
self.keys[servicename][username] = None
|
||||
raise keyring.errors.KeyringError
|
||||
|
||||
|
||||
# set a default keyring
|
||||
|
@ -148,8 +146,12 @@ def use_password(context, password, num=1):
|
|||
|
||||
|
||||
@given("we have a keyring")
|
||||
def set_keyring(context):
|
||||
keyring.set_keyring(TestKeyring())
|
||||
@given("we have a {type} keyring")
|
||||
def set_keyring(context, type=""):
|
||||
if type == "failed":
|
||||
keyring.set_keyring(FailedKeyring())
|
||||
else:
|
||||
keyring.set_keyring(TestKeyring())
|
||||
|
||||
|
||||
@given("we do not have a keyring")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue