summaryrefslogtreecommitdiff
path: root/compose/cli/command.py
diff options
context:
space:
mode:
Diffstat (limited to 'compose/cli/command.py')
-rw-r--r--compose/cli/command.py38
1 files changed, 14 insertions, 24 deletions
diff --git a/compose/cli/command.py b/compose/cli/command.py
index 2c70d31a..e1ae690c 100644
--- a/compose/cli/command.py
+++ b/compose/cli/command.py
@@ -4,16 +4,17 @@ from __future__ import unicode_literals
import logging
import os
import re
-import ssl
import six
+from . import errors
from . import verbose_proxy
from .. import config
from ..config.environment import Environment
from ..const import API_VERSIONS
from ..project import Project
from .docker_client import docker_client
+from .docker_client import get_tls_version
from .docker_client import tls_config_from_options
from .utils import get_version_info
@@ -32,7 +33,8 @@ def project_from_options(project_dir, options):
verbose=options.get('--verbose'),
host=host,
tls_config=tls_config_from_options(options),
- environment=environment
+ environment=environment,
+ override_dir=options.get('--project-directory'),
)
@@ -47,33 +49,20 @@ def get_config_from_options(base_dir, options):
def get_config_path_from_options(base_dir, options, environment):
+ def unicode_paths(paths):
+ return [p.decode('utf-8') if isinstance(p, six.binary_type) else p for p in paths]
+
file_option = options.get('--file')
if file_option:
- return file_option
+ return unicode_paths(file_option)
config_files = environment.get('COMPOSE_FILE')
if config_files:
- return config_files.split(os.pathsep)
+ pathsep = environment.get('COMPOSE_PATH_SEPARATOR', os.pathsep)
+ return unicode_paths(config_files.split(pathsep))
return None
-def get_tls_version(environment):
- compose_tls_version = environment.get('COMPOSE_TLS_VERSION', None)
- if not compose_tls_version:
- return None
-
- tls_attr_name = "PROTOCOL_{}".format(compose_tls_version)
- if not hasattr(ssl, tls_attr_name):
- log.warn(
- 'The "{}" protocol is unavailable. You may need to update your '
- 'version of Python or OpenSSL. Falling back to TLSv1 (default).'
- .format(compose_tls_version)
- )
- return None
-
- return getattr(ssl, tls_attr_name)
-
-
def get_client(environment, verbose=False, version=None, tls_config=None, host=None,
tls_version=None):
@@ -92,10 +81,10 @@ def get_client(environment, verbose=False, version=None, tls_config=None, host=N
def get_project(project_dir, config_path=None, project_name=None, verbose=False,
- host=None, tls_config=None, environment=None):
+ host=None, tls_config=None, environment=None, override_dir=None):
if not environment:
environment = Environment.from_env_file(project_dir)
- config_details = config.find(project_dir, config_path, environment)
+ config_details = config.find(project_dir, config_path, environment, override_dir)
project_name = get_project_name(
config_details.working_dir, project_name, environment
)
@@ -110,7 +99,8 @@ def get_project(project_dir, config_path=None, project_name=None, verbose=False,
host=host, environment=environment
)
- return Project.from_config(project_name, config_data, client)
+ with errors.handle_connection_errors(client):
+ return Project.from_config(project_name, config_data, client)
def get_project_name(working_dir, project_name=None, environment=None):