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,15 +55,21 @@ 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):
def get_client(verbose=False):
client = docker_client() client = docker_client()
if verbose: if verbose:
version_info = six.iteritems(client.version()) version_info = six.iteritems(client.version())
@ -74,18 +80,20 @@ class Command(DocoptCommand):
return verbose_proxy.VerboseProxy('docker', client) return verbose_proxy.VerboseProxy('docker', client)
return client return client
def get_project(self, config_path=None, project_name=None, verbose=False):
config_details = config.find(self.base_dir, config_path) def get_project(base_dir, config_path=None, project_name=None, verbose=False):
config_details = config.find(base_dir, config_path)
try: try:
return Project.from_dicts( return Project.from_dicts(
self.get_project_name(config_details.working_dir, project_name), get_project_name(config_details.working_dir, project_name),
config.load(config_details), config.load(config_details),
self.get_client(verbose=verbose)) get_client(verbose=verbose))
except ConfigError as e: except ConfigError as e:
raise errors.UserError(six.text_type(e)) raise errors.UserError(six.text_type(e))
def get_project_name(self, working_dir, project_name=None):
def get_project_name(working_dir, project_name=None):
def normalize_name(name): def normalize_name(name):
return re.sub(r'[^a-z0-9]', '', name.lower()) return re.sub(r'[^a-z0-9]', '', name.lower())

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)