blob: 681b76919a0af21bea823275ddd274e8728a4b59 [file] [log] [blame]
from core.models import Slice, SlicePrivilege, SliceRole, Instance, Site, Node, User
from services.cord.models import VOLTTenant, CordSubscriberRoot
from plus import PlusObjectMixin
from operator import itemgetter, attrgetter
from rest_framework.exceptions import APIException
"""
import os
import sys
sys.path.append("/opt/xos")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
import django
from core.models import *
from services.hpc.models import *
from services.cord.models import *
django.setup()
from core.xoslib.objects.cordsubscriber import CordSubscriber
c=CordSubscriber.get_tenant_objects().select_related().all()[0]
"""
class CordSubscriber(CordSubscriberRoot):
class Meta:
proxy = True
def __init__(self, *args, **kwargs):
super(CordSubscriber, self).__init__(*args, **kwargs)
def __unicode__(self):
return u"cordSubscriber-%s" % str(self.id)
passthroughs = ( # the following are now fields of CordSubscriberRoot
# ("firewall_enable", "vcpe.firewall_enable"),
# ("firewall_rules", "vcpe.firewall_rules"),
# ("url_filter_enable", "vcpe.url_filter_enable"),
# ("url_filter_rules", "vcpe.url_filter_rules"),
# ("url_filter_level", "vcpe.url_filter_level"),
# ("users", "vcpe.users"),
# ("services", "vcpe.services"),
# ("cdn_enable", "vcpe.cdn_enable"),
# uplink_speed, downlink_speed, status, enable_uverse
("c_tag", "volt.c_tag"),
("s_tag", "volt.s_tag"),
("bbs_account", "volt.vcpe.bbs_account"),
("ssh_command", "volt.vcpe.ssh_command"),
("image", "volt.vcpe.image.id"),
("image_name", "volt.vcpe.image.name"),
("instance", "volt.vcpe.instance.id"),
("instance_name", "volt.vcpe.instance.name"),
("routeable_subnet", "volt.vcpe.vbng.routeable_subnet"),
("vcpe_id", "volt.vcpe.id"),
("vbng_id", "volt.vcpe.vbng.id"),
("nat_ip", "volt.vcpe.nat_ip"),
("lan_ip", "volt.vcpe.lan_ip"),
("private_ip", "volt.vcpe.private_ip"),
("wan_ip", "volt.vcpe.wan_ip"),
("wan_mac", "volt.vcpe.wan_mac"),
("vcpe_synced", "volt.vcpe.is_synced"),
("wan_container_ip", "volt.vcpe.wan_container_ip"),
)
def __getattr__(self, key):
#print "XXX getattr", self, key
for (member_name, passthrough_name) in self.passthroughs:
if key==member_name:
parts = passthrough_name.split(".")
obj = self
for part in parts[:-1]:
obj = getattr(obj, part)
if not obj:
return None
return getattr(obj, parts[-1])
raise AttributeError("getattr: %r object has no attribute %r" %
(self.__class__, key))
def __setattr__(self, key, value):
for (member_name, passthrough_name) in self.passthroughs:
if key==member_name:
parts = passthrough_name.split(".")
obj = self
for part in parts[:-1]:
obj = getattr(obj, part)
if not obj:
return
setattr(obj, parts[-1], value)
super(CordSubscriber, self).__setattr__(key, value)
def save(self, *args, **kwargs):
super(CordSubscriber, self).save(*args, **kwargs)
# in case the vcpe or vbng fields were altered
# TODO: dirty detection?
if (self.volt):
print "save volt"
self.volt.save()
if (self.volt.vcpe):
print "save vcpe"
self.volt.vcpe.save()
if (self.volt.vcpe.vbng):
print "save vbng", self.volt.vcpe.vbng
print "attr", self.volt.vcpe.vbng.service_specific_attribute
self.volt.vcpe.vbng.save()