162def get_keyring_provider(provider: str) -> KeyRingBaseProvider:
164
165
166 if KEYRING_DISABLED:
167 provider = "disabled"
168 if provider in ["import", "auto"]:
169 try:
170 impl = KeyRingPythonProvider()
172 return impl
173 except ImportError:
174 pass
175 except Exception as exc:
176
177
178 msg = "Installed copy of keyring fails with exception %s"
179 if provider == "auto":
180 msg = msg + ", trying to find a keyring executable as a fallback"
182 if provider in ["subprocess", "auto"]:
185
186 @typing.no_type_check
189 if path is None:
190 try:
192 except (AttributeError, ValueError):
193
195
196
197
198 return path
199
201
202 paths = []
204 p = Path(path)
205 try:
208 except FileNotFoundError:
209 pass
210
212
214
215 if cli:
216 logger.verbose(
"Keyring provider set: subprocess with executable %s", cli)
217 return KeyRingCliProvider(cli)
218
220 return KeyRingNullProvider()
221
222