فهرست منبع

Remove some functions from Command class

Signed-off-by: Daniel Nephin <[email protected]>
Daniel Nephin 10 سال پیش
والد
کامیت
258d0fa0c6
2فایلهای تغییر یافته به همراه66 افزوده شده و 65 حذف شده
  1. 50 42
      compose/cli/command.py
  2. 16 23
      tests/unit/cli_test.py

+ 50 - 42
compose/cli/command.py

@@ -55,53 +55,61 @@ class Command(DocoptCommand):
             log.warn('The FIG_FILE environment variable is deprecated.')
             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')
-        project = self.get_project(
+        explicit_config_path = (
+            options.get('--file') or
+            os.environ.get('COMPOSE_FILE') or
+            os.environ.get('FIG_FILE'))
+
+        project = get_project(
+            self.base_dir,
             explicit_config_path,
             project_name=options.get('--project-name'),
             verbose=options.get('--verbose'))
 
         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):
-        config_details = config.find(self.base_dir, config_path)
+def get_client(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
 
-        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 normalize_name(name):
-            return re.sub(r'[^a-z0-9]', '', name.lower())
-
-        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'
+
+def get_project(base_dir, config_path=None, project_name=None, verbose=False):
+    config_details = config.find(base_dir, config_path)
+
+    try:
+        return Project.from_dicts(
+            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))
+
+
+def get_project_name(working_dir, project_name=None):
+    def normalize_name(name):
+        return re.sub(r'[^a-z0-9]', '', name.lower())
+
+    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'

+ 16 - 23
tests/unit/cli_test.py

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