blob: 618311303fd40b44629bd53558970b711a454ff0 [file] [log] [blame]
Sapan Bhatia8fc7eb32017-05-05 20:43:43 +02001# 'simple_attributes' will be expanded into properties and setters that
2# store the attribute using self.set_attribute / self.get_attribute.
3
4simple_attributes = ( ("devices", []), )
5
6sync_attributes = ("firewall_enable",
7 "firewall_rules",
8 "url_filter_enable",
9 "url_filter_rules",
10 "cdn_enable",
11 "uplink_speed",
12 "downlink_speed",
13 "enable_uverse",
14 "status")
15
16def __init__(self, *args, **kwargs):
17 super(CordSubscriberRoot, self).__init__(*args, **kwargs)
18 self.cached_volt = None
19
20@property
21def volt(self):
22 volt = self.get_newest_subscribed_tenant(VOLTTenant)
23 if not volt:
24 return None
25
26 # always return the same object when possible
27 if (self.cached_volt) and (self.cached_volt.id == volt.id):
28 return self.cached_volt
29
30 #volt.caller = self.creator
31 self.cached_volt = volt
32 return volt
33
34def find_device(self, mac):
35 for device in self.devices:
36 if device["mac"] == mac:
37 return device
38 return None
39
40def update_device(self, mac, **kwargs):
41 # kwargs may be "level" or "mac"
42 # Setting one of these to None will cause None to be stored in the db
43 devices = self.devices
44 for device in devices:
45 if device["mac"] == mac:
46 for arg in kwargs.keys():
47 device[arg] = kwargs[arg]
48 self.devices = devices
49 return device
50 raise ValueError("Device with mac %s not found" % mac)
51
52def create_device(self, **kwargs):
53 if "mac" not in kwargs:
54 raise XOSMissingField("The mac field is required")
55
56 if self.find_device(kwargs['mac']):
57 raise XOSDuplicateKey("Device with mac %s already exists" % kwargs["mac"])
58
59 device = kwargs.copy()
60
61 devices = self.devices
62 devices.append(device)
63 self.devices = devices
64
65 return device
66
67def delete_device(self, mac):
68 devices = self.devices
69 for device in devices:
70 if device["mac"]==mac:
71 devices.remove(device)
72 self.devices = devices
73 return
74
75 raise ValueError("Device with mac %s not found" % mac)
76
77#--------------------------------------------------------------------------
78# Deprecated -- devices used to be called users
79
80def find_user(self, uid):
81 return self.find_device(uid)
82
83def update_user(self, uid, **kwargs):
84 return self.update_device(uid, **kwargs)
85
86def create_user(self, **kwargs):
87 return self.create_device(**kwargs)
88
89def delete_user(self, uid):
90 return self.delete_user(uid)
91
92# ------------------------------------------------------------------------
93
94@property
95def services(self):
96 return {"cdn": self.cdn_enable,
97 "url_filter": self.url_filter_enable,
98 "firewall": self.firewall_enable}
99
100@services.setter
101def services(self, value):
102 pass
103
104def save(self, *args, **kwargs):
105 self.validate_unique_service_specific_id(none_okay=True)
106 if (not hasattr(self, 'caller') or not self.caller.is_admin):
107 if (self.has_field_changed("service_specific_id")):
108 raise XOSPermissionDenied("You do not have permission to change service_specific_id")
109 super(CordSubscriberRoot, self).save(*args, **kwargs)
110
111 # TODO - reimplement this as a watcher
112
113 if (self.volt) and (self.volt.vcpe):
114 # 1) trigger manage_bbs_account to run
115 # 2) trigger vcpe observer to wake up
116 self.volt.vcpe.save()