def initializeLayers(self, instance, item=None, container=None): # scan each field looking for registered layers optionally # call its initializeInstance method and then the # initializeField method initializedLayers = [] called = lambda x: x in initializedLayers for field in self.fields(): if ILayerContainer.providedBy(field): layers = field.registeredLayers() for layer, obj in layers: if ILayer.providedBy(obj): if not called((layer, obj)): obj.initializeInstance(instance, item, container) # Some layers may have the same name, but # different classes, so, they may still # need to be initialized initializedLayers.append((layer, obj)) obj.initializeField(instance, field) # Now do the same for objects registered at this level if ILayerContainer.providedBy(self): for layer, obj in self.registeredLayers(): if (not called((layer, obj)) and ILayer.providedBy(obj)): obj.initializeInstance(instance, item, container) initializedLayers.append((layer, obj))
def cleanupLayers(self, instance, item=None, container=None): # scan each field looking for registered layers optionally # call its cleanupInstance method and then the cleanupField # method queuedLayers = [] queued = lambda x: x in queuedLayers for field in self.fields(): if ILayerContainer.providedBy(field): layers = field.registeredLayers() for layer, obj in layers: if not queued((layer, obj)): queuedLayers.append((layer, obj)) if ILayer.providedBy(obj): obj.cleanupField(instance, field) for layer, obj in queuedLayers: if ILayer.providedBy(obj): obj.cleanupInstance(instance, item, container) # Now do the same for objects registered at this level if ILayerContainer.providedBy(self): for layer, obj in self.registeredLayers(): if (not queued((layer, obj)) and ILayer.providedBy(obj)): obj.cleanupInstance(instance, item, container) queuedLayers.append((layer, obj))
def cleanupField(self, instance, field): storage = self.getFlexStorageBackend(instance) if ILayer.isImplementedBy(storage): return storage.cleanupField(instance, field)
def initializeField(self, instance, field): storage = self.getFlexStorageBackend(instance) if ILayer.isImplementedBy(storage): return storage.initializeField(instance, field)
def cleanupInstance(self, instance, item=None, container=None): storage = self.getFlexStorageBackend(instance) if ILayer.isImplementedBy(storage): return storage.cleanupInstance(instance, item, container)