from core.models import Network, NetworkDeployments
from observer.deleter import Deleter
from observer.deleters.network_deployment_deleter import NetworkDeploymentDeleter
from util.logger import Logger, logging

logger = Logger(level=logging.INFO)

class NetworkDeleter(Deleter):
    model='Network'

    def call(self, pk):
        network = Network.objects.get(pk=pk) 
        network_deployment_deleter = NetworkDeploymentDeleter()
        for network_deployment in NetworkDeployments.objects.filter(network=network):
            try:
                network_deployment_deleter(network_deployment.id)    
            except:
                logger.log_exc("Failed to delte network deployment %s" % network_deployment)
        network.delete()
