From 22718ba59a193263bed8c52cc1abd5ee52358440 Mon Sep 17 00:00:00 2001 From: Yanlong Wang Date: Wed, 11 Jan 2023 06:45:25 +0800 Subject: fix(store): warn on init instead of throw (#3080) Signed-off-by: yanlong.wang --- docker/credentials/store.py | 9 ++++++++- tests/integration/credentials/store_test.py | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docker/credentials/store.py b/docker/credentials/store.py index 297f468..b7ab53f 100644 --- a/docker/credentials/store.py +++ b/docker/credentials/store.py @@ -2,6 +2,7 @@ import errno import json import shutil import subprocess +import warnings from . import constants from . import errors @@ -18,7 +19,7 @@ class Store: self.exe = shutil.which(self.program) self.environment = environment if self.exe is None: - raise errors.InitializationError( + warnings.warn( '{} not installed or not available in PATH'.format( self.program ) @@ -70,6 +71,12 @@ class Store: return json.loads(data.decode('utf-8')) def _execute(self, subcmd, data_input): + if self.exe is None: + raise errors.StoreError( + '{} not installed or not available in PATH'.format( + self.program + ) + ) output = None env = create_environment_dict(self.environment) try: diff --git a/tests/integration/credentials/store_test.py b/tests/integration/credentials/store_test.py index 213cf30..16f4d60 100644 --- a/tests/integration/credentials/store_test.py +++ b/tests/integration/credentials/store_test.py @@ -84,3 +84,10 @@ class TestStore: data = self.store._execute('--null', '') assert b'\0FOO=bar\0' in data assert 'FOO' not in os.environ + + def test_unavailable_store(self): + some_unavailable_store = None + with pytest.warns(UserWarning): + some_unavailable_store = Store('that-does-not-exist') + with pytest.raises(StoreError): + some_unavailable_store.get('anything-this-does-not-matter') -- cgit v1.2.1