Remove some functions from Command class

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2015-09-11 19:51:50 -04:00
parent 2121f5117e
commit 258d0fa0c6
2 changed files with 61 additions and 60 deletions

View File

@ -55,53 +55,61 @@ class Command(DocoptCommand):
log.warn('The FIG_FILE environment variable is deprecated.') log.warn('The FIG_FILE environment variable is deprecated.')
log.warn('Please use COMPOSE_FILE instead.') log.warn('Please use COMPOSE_FILE instead.')
explicit_config_path = options.get('--file') or os.environ.get('COMPOSE_FILE') or os.environ.get('FIG_FILE') explicit_config_path = (
project = self.get_project( options.get('--file') or
os.environ.get('COMPOSE_FILE') or
os.environ.get('FIG_FILE'))
project = get_project(
self.base_dir,
explicit_config_path, explicit_config_path,
project_name=options.get('--project-name'), project_name=options.get('--project-name'),
verbose=options.get('--verbose')) verbose=options.get('--verbose'))
handler(project, command_options) handler(project, command_options)
def get_client(self, verbose=False):
client = docker_client()
if verbose:
version_info = six.iteritems(client.version())
log.info("Compose version %s", __version__)
log.info("Docker base_url: %s", client.base_url)
log.info("Docker version: %s",
", ".join("%s=%s" % item for item in version_info))
return verbose_proxy.VerboseProxy('docker', client)
return client
def get_project(self, config_path=None, project_name=None, verbose=False): def get_client(verbose=False):
config_details = config.find(self.base_dir, config_path) client = docker_client()
if verbose:
version_info = six.iteritems(client.version())
log.info("Compose version %s", __version__)
log.info("Docker base_url: %s", client.base_url)
log.info("Docker version: %s",
", ".join("%s=%s" % item for item in version_info))
return verbose_proxy.VerboseProxy('docker', client)
return client
try:
return Project.from_dicts(
self.get_project_name(config_details.working_dir, project_name),
config.load(config_details),
self.get_client(verbose=verbose))
except ConfigError as e:
raise errors.UserError(six.text_type(e))
def get_project_name(self, working_dir, project_name=None): def get_project(base_dir, config_path=None, project_name=None, verbose=False):
def normalize_name(name): config_details = config.find(base_dir, config_path)
return re.sub(r'[^a-z0-9]', '', name.lower())
if 'FIG_PROJECT_NAME' in os.environ: try:
log.warn('The FIG_PROJECT_NAME environment variable is deprecated.') return Project.from_dicts(
log.warn('Please use COMPOSE_PROJECT_NAME instead.') get_project_name(config_details.working_dir, project_name),
config.load(config_details),
get_client(verbose=verbose))
except ConfigError as e:
raise errors.UserError(six.text_type(e))
project_name = (
project_name or
os.environ.get('COMPOSE_PROJECT_NAME') or
os.environ.get('FIG_PROJECT_NAME'))
if project_name is not None:
return normalize_name(project_name)
project = os.path.basename(os.path.abspath(working_dir)) def get_project_name(working_dir, project_name=None):
if project: def normalize_name(name):
return normalize_name(project) return re.sub(r'[^a-z0-9]', '', name.lower())
return 'default' if 'FIG_PROJECT_NAME' in os.environ:
log.warn('The FIG_PROJECT_NAME environment variable is deprecated.')
log.warn('Please use COMPOSE_PROJECT_NAME instead.')
project_name = (
project_name or
os.environ.get('COMPOSE_PROJECT_NAME') or
os.environ.get('FIG_PROJECT_NAME'))
if project_name is not None:
return normalize_name(project_name)
project = os.path.basename(os.path.abspath(working_dir))
if project:
return normalize_name(project)
return 'default'

View File

@ -4,9 +4,12 @@ from __future__ import unicode_literals
import os import os
import docker import docker
import py
from .. import mock from .. import mock
from .. import unittest from .. import unittest
from compose.cli.command import get_project
from compose.cli.command import get_project_name
from compose.cli.docopt_command import NoSuchCommand from compose.cli.docopt_command import NoSuchCommand
from compose.cli.errors import UserError from compose.cli.errors import UserError
from compose.cli.main import TopLevelCommand from compose.cli.main import TopLevelCommand
@ -14,55 +17,45 @@ from compose.service import Service
class CLITestCase(unittest.TestCase): class CLITestCase(unittest.TestCase):
def test_default_project_name(self):
cwd = os.getcwd()
try: def test_default_project_name(self):
os.chdir('tests/fixtures/simple-composefile') test_dir = py._path.local.LocalPath('tests/fixtures/simple-composefile')
command = TopLevelCommand() with test_dir.as_cwd():
project_name = command.get_project_name('.') project_name = get_project_name('.')
self.assertEquals('simplecomposefile', project_name) self.assertEquals('simplecomposefile', project_name)
finally:
os.chdir(cwd)
def test_project_name_with_explicit_base_dir(self): def test_project_name_with_explicit_base_dir(self):
command = TopLevelCommand() base_dir = 'tests/fixtures/simple-composefile'
command.base_dir = 'tests/fixtures/simple-composefile' project_name = get_project_name(base_dir)
project_name = command.get_project_name(command.base_dir)
self.assertEquals('simplecomposefile', project_name) self.assertEquals('simplecomposefile', project_name)
def test_project_name_with_explicit_uppercase_base_dir(self): def test_project_name_with_explicit_uppercase_base_dir(self):
command = TopLevelCommand() base_dir = 'tests/fixtures/UpperCaseDir'
command.base_dir = 'tests/fixtures/UpperCaseDir' project_name = get_project_name(base_dir)
project_name = command.get_project_name(command.base_dir)
self.assertEquals('uppercasedir', project_name) self.assertEquals('uppercasedir', project_name)
def test_project_name_with_explicit_project_name(self): def test_project_name_with_explicit_project_name(self):
command = TopLevelCommand()
name = 'explicit-project-name' name = 'explicit-project-name'
project_name = command.get_project_name(None, project_name=name) project_name = get_project_name(None, project_name=name)
self.assertEquals('explicitprojectname', project_name) self.assertEquals('explicitprojectname', project_name)
def test_project_name_from_environment_old_var(self): def test_project_name_from_environment_old_var(self):
command = TopLevelCommand()
name = 'namefromenv' name = 'namefromenv'
with mock.patch.dict(os.environ): with mock.patch.dict(os.environ):
os.environ['FIG_PROJECT_NAME'] = name os.environ['FIG_PROJECT_NAME'] = name
project_name = command.get_project_name(None) project_name = get_project_name(None)
self.assertEquals(project_name, name) self.assertEquals(project_name, name)
def test_project_name_from_environment_new_var(self): def test_project_name_from_environment_new_var(self):
command = TopLevelCommand()
name = 'namefromenv' name = 'namefromenv'
with mock.patch.dict(os.environ): with mock.patch.dict(os.environ):
os.environ['COMPOSE_PROJECT_NAME'] = name os.environ['COMPOSE_PROJECT_NAME'] = name
project_name = command.get_project_name(None) project_name = get_project_name(None)
self.assertEquals(project_name, name) self.assertEquals(project_name, name)
def test_get_project(self): def test_get_project(self):
command = TopLevelCommand() base_dir = 'tests/fixtures/longer-filename-composefile'
command.base_dir = 'tests/fixtures/longer-filename-composefile' project = get_project(base_dir)
project = command.get_project()
self.assertEqual(project.name, 'longerfilenamecomposefile') self.assertEqual(project.name, 'longerfilenamecomposefile')
self.assertTrue(project.client) self.assertTrue(project.client)
self.assertTrue(project.services) self.assertTrue(project.services)