Exemplo n.º 1
0
    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': ':'}))
Exemplo n.º 2
0
    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)