# # Handle depend propigation. # # Propigation occurs when a layer A depends on layer B, and # layer C depends on layer D, but Layer A also depends on Layer # C, which means layer D must now also depend on layer B. # # Currently this creates a depend-all (LayerOnLayer) between # the propigated depends. # for depend in on_layer.get_depends(): if depend.is_propigated(): for my_depend in self.get_depends(): dependant = my_depend.get_depend_on_layer() logger.info("propigating dependency %s -> %s" % (dependant, depend.get_depend_on_layer())) dependant.depend_all(depend.get_depend_on_layer(), propigate=False) def undepend(self, depend): """ Remove the given dependency. If the dependency does not exist no exception is thrown. """ try: self.__depends.remove(depend) except Exception, e: logger.warn("failed to remove dependency %s, %s" % (depend, e)) def get_depends(self): """Return a tuple of dependencies this layer depends on."""