Source code for networkapi.api_network.models

# -*- coding: utf-8 -*-
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import with_statement

import logging

from _mysql_exceptions import OperationalError
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.db.models import get_model

from networkapi.api_network import exceptions
from networkapi.api_rest import exceptions as api_exceptions
from networkapi.models.BaseModel import BaseModel
# from networkapi.ip.models import Ip
# from networkapi.ip.models import Ipv6
# from networkapi.ip.models import NetworkIPv4
# from networkapi.ip.models import NetworkIPv6


[docs]class DHCPRelayIPv4(BaseModel): log = logging.getLogger('DHCPRelayIPv4') id = models.AutoField( primary_key=True, db_column='id_dhcprelay_ipv4' ) ipv4 = models.ForeignKey( 'ip.Ip', db_column='id_ip' ) networkipv4 = models.ForeignKey( 'ip.NetworkIPv4', db_column='id_networkipv4' ) class Meta(BaseModel.Meta): db_table = u'dhcprelay_ipv4' managed = True unique_together = ('ipv4', 'networkipv4')
[docs] def create(self, ipv4_id, networkipv4_id): ipv4_model = get_model('ip', 'Ip') networkipv4_model = get_model('ip', 'NetworkIPv4') ipv4 = ipv4_model.get_by_pk(ipv4_id) networkipv4 = networkipv4_model.get_by_pk(networkipv4_id) if len(DHCPRelayIPv4.objects.filter(ipv4=ipv4, networkipv4=networkipv4)) > 0: raise exceptions.DHCPRelayAlreadyExistsError( ipv4_id, networkipv4_id) self.ipv4 = ipv4 self.networkipv4 = networkipv4
[docs] @classmethod def get_by_pk(cls, id): """ Get DHCPRelayIPv4 by id. @return: DHCPRelayIPv4 @raise DHCPRelayNotFoundError: DHCPRelayIPv4 is not registered. @raise OperationalError: Lock wait timeout exceed """ try: return DHCPRelayIPv4.objects.get(id=id) except ObjectDoesNotExist, e: raise exceptions.DHCPRelayNotFoundError('IPv4', id) except OperationalError, e: cls.log.error( u'Lock wait timeout exceeded searching DHCPRelayIPv4.') raise OperationalError( e, u'Lock wait timeout exceeded; try restarting transaction') except Exception, e: cls.log.error(u'Failure to search the DHCPRelayIPv4.') raise api_exceptions.NetworkAPIException()
[docs]class DHCPRelayIPv6(BaseModel): log = logging.getLogger('DHCPRelayIPv6') id = models.AutoField( primary_key=True, db_column='id_dhcprelay_ipv6' ) ipv6 = models.ForeignKey( 'ip.Ipv6', db_column='id_ipv6' ) networkipv6 = models.ForeignKey( 'ip.NetworkIPv6', db_column='id_networkipv6' ) class Meta(BaseModel.Meta): db_table = u'dhcprelay_ipv6' managed = True unique_together = ('ipv6', 'networkipv6')
[docs] def create(self, ipv6_id, networkipv6_id): ipv6_model = get_model('ip', 'Ipv6') networkipv6_model = get_model('ip', 'NetworkIPv6') ipv6 = ipv6_model.get_by_pk(ipv6_id) networkipv6 = networkipv6_model.get_by_pk(networkipv6_id) if len(DHCPRelayIPv6.objects.filter(ipv6=ipv6, networkipv6=networkipv6)) > 0: raise exceptions.DHCPRelayAlreadyExistsError( ipv6_id, networkipv6_id) self.ipv6 = ipv6 self.networkipv6 = networkipv6
[docs] @classmethod def get_by_pk(cls, id): """ Get DHCPRelayIPv6 by id. @return: DHCPRelayIPv6 @raise DHCPRelayNotFoundError: DHCPRelayIPv6 is not registered. @raise OperationalError: Lock wait timeout exceed """ try: return DHCPRelayIPv6.objects.get(id=id) except ObjectDoesNotExist, e: raise exceptions.DHCPRelayNotFoundError('IPv6', id) except OperationalError, e: cls.log.error( u'Lock wait timeout exceeded searching DHCPRelayIPv6.') raise OperationalError( e, u'Lock wait timeout exceeded; try restarting transaction') except Exception, e: cls.log.error(u'Failure to search the DHCPRelayIPv6.') raise api_exceptions.NetworkAPIException()