From 8999eee4a8afbe5cecb5ed6011af2c33b76eb9ee Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Mon, 1 Sep 2014 16:41:11 -0400 Subject: [PATCH] Resolve #45 - configure project name from the config file. Signed-off-by: Daniel Nephin --- fig/project.py | 14 ++++++++++---- tests/unit/project_test.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/fig/project.py b/fig/project.py index 6ef6a7c526..f62c6bb115 100644 --- a/fig/project.py +++ b/fig/project.py @@ -64,13 +64,19 @@ def from_dicts(cls, name, service_dicts, client): @classmethod def from_config(cls, name, config, client): - dicts = [] + services = [] + project_config = config.pop('project-config', {}) + name = project_config.get('name', name) + for service_name, service in list(config.items()): if not isinstance(service, dict): - raise ConfigurationError('Service "%s" doesn\'t have any configuration options. All top level keys in your fig.yml must map to a dictionary of configuration options.') + raise ConfigurationError( + 'Service "%s" doesn\'t have any configuration options. ' + 'All top level keys in your fig.yml must map to a ' + 'dictionary of configuration options.') service['name'] = service_name - dicts.append(service) - return cls.from_dicts(name, dicts, client) + services.append(service) + return cls.from_dicts(name, services, client) def get_service(self, name): """ diff --git a/tests/unit/project_test.py b/tests/unit/project_test.py index 5c8d35b1d9..340b46382a 100644 --- a/tests/unit/project_test.py +++ b/tests/unit/project_test.py @@ -3,6 +3,7 @@ from fig.service import Service from fig.project import Project, ConfigurationError + class ProjectTest(unittest.TestCase): def test_from_dict(self): project = Project.from_dicts('figtest', [ @@ -65,6 +66,15 @@ def test_from_config_throws_error_when_not_dict(self): 'web': 'busybox:latest', }, None) + def test_from_config_with_project_config(self): + project_name = 'theprojectnamefromconfig' + project = Project.from_config('default_name_not_used', { + 'project-config': {'name': project_name}, + 'web': {'image': 'busybox:latest'} + }, None) + + self.assertEqual(project.name, project_name) + def test_get_service(self): web = Service( project='figtest',