def load(self, config, container_builder): extensions = container_builder.parameters.get('ioc.extensions') locator_map = {} for extension in extensions: locator_map[extension] = Definition( 'ioc.locator.ChoiceLocator', arguments=[[ Definition('ioc.locator.FileSystemLocator', arguments=[ "%s/resources/%s" % (container_builder.parameters.get( 'project.root_folder'), extension) ]), Definition('ioc.locator.PackageLocator', arguments=[extension], kwargs={'package_path': 'resources'}) ]]) container_builder.add( 'ioc.locator', Definition('ioc.locator.PrefixLocator', arguments=[locator_map], kwargs={'delimiter': ':'}))
def load(self, file, container_builder): try: data = yaml.load(open(file).read(), OrderedDictYAMLLoader) except yaml.scanner.ScannerError as e: raise ioc.exceptions.LoadingError("file %s, \nerror: %s" % (file, e)) for extension, config in data.items(): if extension in ['parameters', 'services']: continue if config == None: config = {} container_builder.add_extension(extension, self.fix_config(config.copy())) if 'parameters' in data: for key, value in data['parameters'].items(): container_builder.parameters.set(key, value) if 'services' in data: for id, meta in data['services'].items(): if 'arguments' not in meta: meta['arguments'] = [] if 'class' not in meta: meta['class'] = None if 'kwargs' not in meta: meta['kwargs'] = {} if 'calls' not in meta: meta['calls'] = [] if 'tags' not in meta: meta['tags'] = {} if 'abstract' not in meta: meta['abstract'] = False definition = Definition( clazz=meta['class'], arguments=self.set_references(meta['arguments']), kwargs=self.set_references(meta['kwargs']), abstract=meta['abstract']) for call in meta['calls']: if len(call) == 0: continue if len(call) == 2: call.append({}) if len(call) == 1: call.append([]) call.append({}) definition.method_calls.append( (call[0], self.set_references(call[1]), self.set_references(call[2]))) for tag, options in meta['tags'].items(): for option in options: definition.add_tag(tag, option) container_builder.add(id, definition)