Example #1
0
 def _iter_images_by_dependency(images):
     images_dependency_names = {}
     for name, image in images.items():
         # Remove external dependencies:
         dependencies = filter(lambda n: n in images, image.dependencies)
         images_dependency_names[name] = dependencies
     for image_name in iter_dependencies(
             images, images_dependency_names.__getitem__):
         yield images[image_name]
Example #2
0
 def test_iter_dependencies(self):
     data = {
         'a': {'dependencies': ['b', 'c']},
         'b': {'dependencies': ['c']},
         'c': {}
     }
     def get_item_dependencies(key):
         return data[key].get('dependencies', [])
     self.assertEqual(
         tuple(iter_dependencies(data, get_item_dependencies)),
         ('c', 'b', 'a'))
     data = {
         'a': {'dependencies': 'b'},
         'b': {'dependencies': 'a'}
     }
     with self.assertRaisesRegexp(RuntimeError, 'circular'):
         for item in iter_dependencies(data, get_item_dependencies):
             pass
Example #3
0
    def _make_containers(self, config_data):
        for name, config in config_data.items():
            deps = self._get_container_config_dependencies(config)
            if not all(d in config_data for d in deps):
                raise ValueError(
                    "'dependencies' for container {!r} references "
                    "undefined container".format(name))

        containers = {}
        for name in iter_dependencies(
                config_data,
                lambda name: self._get_container_config_dependencies(
                    config_data[name])):
            containers[name] = self._make_container(
                name, config_data[name], containers)
        return containers
Example #4
0
 def __iter__(self):
     return iter_dependencies(self.containers, lambda c: c.dependencies)