def _add(self, parent: IPool, resource: object, appstructs: dict, registry: Registry) -> str: """Add resource to parent pool. :raises substanced.folder.FolderKeyError: :raises ValueError: """ name = '' if self.name_identifier in appstructs: name = appstructs[self.name_identifier]['name'] if self.meta.use_autonaming: prefix = self.meta.autonaming_prefix name = parent.next_name(resource, prefix=prefix) elif self.meta.use_autonaming_random: name = generate_random_name() if name in parent: raise KeyError('Duplicate name: {}'.format(name)) if IServicePool.providedBy(resource): name = self.meta.content_name parent.add_service(name, resource, send_events=True, registry=registry) return if name == '': raise KeyError('Empty name') parent.add(name, resource, send_events=True, registry=registry)