Catch the KeyringLocked error instead of the MacOS specific

Turns out that when the KeychainDenied error is raised, it is being caught by the macOS keyring api and the non-macOS-specific KeyringLocked error is raised instead, so we need to catch this one.

CURA-8332
This commit is contained in:
Konstantinos Karmas 2021-06-23 11:20:35 +02:00
parent 4479cd8610
commit 8ade68dbef

View file

@ -1,10 +1,10 @@
# Copyright (c) 2021 Ultimaker B.V. # Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from typing import Type, TYPE_CHECKING, Optional, List, Union from typing import Type, TYPE_CHECKING, Optional, List
import keyring import keyring
from keyring.backend import KeyringBackend from keyring.backend import KeyringBackend
from keyring.errors import NoKeyringError, PasswordSetError, KeyringError from keyring.errors import NoKeyringError, PasswordSetError, KeyringLocked
from UM.Logger import Logger from UM.Logger import Logger
@ -14,24 +14,13 @@ if TYPE_CHECKING:
# Need to do some extra workarounds on windows: # Need to do some extra workarounds on windows:
import sys import sys
from UM.Platform import Platform from UM.Platform import Platform
class _KeychainDenied(Exception):
pass
if Platform.isWindows() and hasattr(sys, "frozen"): if Platform.isWindows() and hasattr(sys, "frozen"):
import win32timezone import win32timezone
from keyring.backends.Windows import WinVaultKeyring from keyring.backends.Windows import WinVaultKeyring
keyring.set_keyring(WinVaultKeyring()) keyring.set_keyring(WinVaultKeyring())
if Platform.isOSX() and hasattr(sys, "frozen"): if Platform.isOSX() and hasattr(sys, "frozen"):
from keyring.backends.macOS import Keyring from keyring.backends.macOS import Keyring
from keyring.backends.macOS.api import KeychainDenied as _KeychainDeniedMacOS
KeychainDenied: Union[Type[_KeychainDenied], Type[_KeychainDeniedMacOS]] = _KeychainDeniedMacOS
keyring.set_keyring(Keyring()) keyring.set_keyring(Keyring())
else:
KeychainDenied = _KeychainDenied
# Even if errors happen, we don't want this stored locally: # Even if errors happen, we don't want this stored locally:
DONT_EVER_STORE_LOCALLY: List[str] = ["refresh_token"] DONT_EVER_STORE_LOCALLY: List[str] = ["refresh_token"]
@ -50,7 +39,7 @@ class KeyringAttribute:
self._store_secure = False self._store_secure = False
Logger.logException("w", "No keyring backend present") Logger.logException("w", "No keyring backend present")
return getattr(instance, self._name) return getattr(instance, self._name)
except KeychainDenied: except KeyringLocked:
self._store_secure = False self._store_secure = False
Logger.log("i", "Access to the keyring was denied.") Logger.log("i", "Access to the keyring was denied.")
return getattr(instance, self._name) return getattr(instance, self._name)