def get_storages(_): def get_storage(field): def set_storage(storage): self.fields_storages[field.name] = storage return defer.succeed(storage) d = self.storageFactory.get(field.type) d.addCallback(set_storage) return d fields = filter(lambda field: IEntity.providedBy(field.type), self.entity.fields()) dlist = map(lambda field: get_storage(field), fields) return defer.DeferredList(dlist, fireOnOneErrback = True)
def __init__(self, entity, factory): self.entity = IEntity(entity) self.factory = Factory(self.entity) self.storageFactory = interface.IStorageFactory(factory) self.unpacker = EntityUnpacker(self.entity) self.id_cache = {} self.id_map = {} self.index_map = {} self.fields_storages = {} self.fields_unpackers = {} for field in filter(lambda field: IEntity.providedBy(field.type), self.entity.fields()): self.fields_unpackers[field.name] = EntityUnpacker(field.type) for field in self.entity.indexed_fields(): self.index_map[field.name] = {} self.initialized = False self.initd = None
def complete(optional): fields = filter(lambda field: IEntity.providedBy(field.type), self.entity.optional_fields()) if len(fields): def complete(results): for (field, (success, value)) in map(lambda field, result: (field, result), fields, results): if not success: return defer.fail(value) optional[field.name] = value return defer.succeed(optional) dlist = map(lambda field: self.fields_unpackers[field.name].unpack_identity(optional[field.name]), fields) d = defer.DeferredList(dlist, consumeErrors = True) d.addCallback(complete) return d else: return defer.succeed(optional)