mirror of https://github.com/docker/docker-py.git
				
				
				
			Merge pull request #1331 from aanand/fix-auth-config-path-windows
Fix auth config path on Windows
This commit is contained in:
		
						commit
						c02493cf18
					
				|  | @ -7,6 +7,7 @@ import dockerpycreds | |||
| import six | ||||
| 
 | ||||
| from . import errors | ||||
| from .constants import IS_WINDOWS_PLATFORM | ||||
| 
 | ||||
| INDEX_NAME = 'docker.io' | ||||
| INDEX_URL = 'https://{0}/v1/'.format(INDEX_NAME) | ||||
|  | @ -210,19 +211,12 @@ def parse_auth(entries, raise_on_error=False): | |||
| 
 | ||||
| 
 | ||||
| def find_config_file(config_path=None): | ||||
|     environment_path = os.path.join( | ||||
|         os.environ.get('DOCKER_CONFIG'), | ||||
|         os.path.basename(DOCKER_CONFIG_FILENAME) | ||||
|     ) if os.environ.get('DOCKER_CONFIG') else None | ||||
| 
 | ||||
|     paths = filter(None, [ | ||||
|     paths = list(filter(None, [ | ||||
|         config_path,  # 1 | ||||
|         environment_path,  # 2 | ||||
|         os.path.join(os.path.expanduser('~'), DOCKER_CONFIG_FILENAME),  # 3 | ||||
|         os.path.join( | ||||
|             os.path.expanduser('~'), LEGACY_DOCKER_CONFIG_FILENAME | ||||
|         )  # 4 | ||||
|     ]) | ||||
|         config_path_from_environment(),  # 2 | ||||
|         os.path.join(home_dir(), DOCKER_CONFIG_FILENAME),  # 3 | ||||
|         os.path.join(home_dir(), LEGACY_DOCKER_CONFIG_FILENAME),  # 4 | ||||
|     ])) | ||||
| 
 | ||||
|     log.debug("Trying paths: {0}".format(repr(paths))) | ||||
| 
 | ||||
|  | @ -236,6 +230,24 @@ def find_config_file(config_path=None): | |||
|     return None | ||||
| 
 | ||||
| 
 | ||||
| def config_path_from_environment(): | ||||
|     config_dir = os.environ.get('DOCKER_CONFIG') | ||||
|     if not config_dir: | ||||
|         return None | ||||
|     return os.path.join(config_dir, os.path.basename(DOCKER_CONFIG_FILENAME)) | ||||
| 
 | ||||
| 
 | ||||
| def home_dir(): | ||||
|     """ | ||||
|     Get the user's home directory, using the same logic as the Docker Engine | ||||
|     client - use %USERPROFILE% on Windows, $HOME/getuid on POSIX. | ||||
|     """ | ||||
|     if IS_WINDOWS_PLATFORM: | ||||
|         return os.environ.get('USERPROFILE', '') | ||||
|     else: | ||||
|         return os.path.expanduser('~') | ||||
| 
 | ||||
| 
 | ||||
| def load_config(config_path=None): | ||||
|     """ | ||||
|     Loads authentication data from a Docker configuration file in the given | ||||
|  |  | |||
|  | @ -9,6 +9,9 @@ import shutil | |||
| import tempfile | ||||
| import unittest | ||||
| 
 | ||||
| from py.test import ensuretemp | ||||
| from pytest import mark | ||||
| 
 | ||||
| from docker import auth, errors | ||||
| 
 | ||||
| try: | ||||
|  | @ -269,6 +272,56 @@ class ResolveAuthTest(unittest.TestCase): | |||
|         ) | ||||
| 
 | ||||
| 
 | ||||
| class FindConfigFileTest(unittest.TestCase): | ||||
|     def tmpdir(self, name): | ||||
|         tmpdir = ensuretemp(name) | ||||
|         self.addCleanup(tmpdir.remove) | ||||
|         return tmpdir | ||||
| 
 | ||||
|     def test_find_config_fallback(self): | ||||
|         tmpdir = self.tmpdir('test_find_config_fallback') | ||||
| 
 | ||||
|         with mock.patch.dict(os.environ, {'HOME': str(tmpdir)}): | ||||
|             assert auth.find_config_file() is None | ||||
| 
 | ||||
|     def test_find_config_from_explicit_path(self): | ||||
|         tmpdir = self.tmpdir('test_find_config_from_explicit_path') | ||||
|         config_path = tmpdir.ensure('my-config-file.json') | ||||
| 
 | ||||
|         assert auth.find_config_file(str(config_path)) == str(config_path) | ||||
| 
 | ||||
|     def test_find_config_from_environment(self): | ||||
|         tmpdir = self.tmpdir('test_find_config_from_environment') | ||||
|         config_path = tmpdir.ensure('config.json') | ||||
| 
 | ||||
|         with mock.patch.dict(os.environ, {'DOCKER_CONFIG': str(tmpdir)}): | ||||
|             assert auth.find_config_file() == str(config_path) | ||||
| 
 | ||||
|     @mark.skipif("sys.platform == 'win32'") | ||||
|     def test_find_config_from_home_posix(self): | ||||
|         tmpdir = self.tmpdir('test_find_config_from_home_posix') | ||||
|         config_path = tmpdir.ensure('.docker', 'config.json') | ||||
| 
 | ||||
|         with mock.patch.dict(os.environ, {'HOME': str(tmpdir)}): | ||||
|             assert auth.find_config_file() == str(config_path) | ||||
| 
 | ||||
|     @mark.skipif("sys.platform == 'win32'") | ||||
|     def test_find_config_from_home_legacy_name(self): | ||||
|         tmpdir = self.tmpdir('test_find_config_from_home_legacy_name') | ||||
|         config_path = tmpdir.ensure('.dockercfg') | ||||
| 
 | ||||
|         with mock.patch.dict(os.environ, {'HOME': str(tmpdir)}): | ||||
|             assert auth.find_config_file() == str(config_path) | ||||
| 
 | ||||
|     @mark.skipif("sys.platform != 'win32'") | ||||
|     def test_find_config_from_home_windows(self): | ||||
|         tmpdir = self.tmpdir('test_find_config_from_home_windows') | ||||
|         config_path = tmpdir.ensure('.docker', 'config.json') | ||||
| 
 | ||||
|         with mock.patch.dict(os.environ, {'USERPROFILE': str(tmpdir)}): | ||||
|             assert auth.find_config_file() == str(config_path) | ||||
| 
 | ||||
| 
 | ||||
| class LoadConfigTest(unittest.TestCase): | ||||
|     def test_load_config_no_file(self): | ||||
|         folder = tempfile.mkdtemp() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue