edit users button in tenant view
[plstackapi.git] / planetstack / core / xoslib / objects / sliceplus.py
1 from core.models.slice import Slice, SlicePrivilege
2 from plus import PlusObjectMixin
3
4 class SlicePlus(Slice, PlusObjectMixin):
5     class Meta:
6         proxy = True
7
8     def getSliceInfo(self, user=None):
9         used_sites = {}
10         used_deployments = {}
11         sliverCount = 0
12         for sliver in self.slivers.all():
13             site = sliver.node.site_deployment.site
14             deployment = sliver.node.site_deployment.deployment
15             used_sites[site.name] = used_sites.get(site.name, 0) + 1
16             used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
17             sliverCount = sliverCount + 1
18
19         roles = []
20         if (user!=None):
21             roles = [x.role.role for x in self.sliceprivileges.filter(user=user)]
22
23         return {"sitesUsed": used_sites,
24                 "deploymentsUsed": used_deployments,
25                 "sliverCount": sliverCount,
26                 "siteCount": len(used_sites.keys()),
27                 "roles": roles}
28
29     @property
30     def site_allocation(self):
31         return self.getSliceInfo()["sitesUsed"]
32
33     @site_allocation.setter
34     def site_allocation(self, value):
35         print "XXX set sitesUsed to", value
36
37     @property
38     def users(self):
39         user_ids = []
40         for priv in SlicePrivilege.objects.filter(slice=self):
41             if not (priv.user.id in user_ids):
42                 user_ids.append(priv.user.id)
43         return user_ids
44
45     @users.setter
46     def users(self, value):
47         print "XXX set users to", value
48
49     @property
50     def network_ports(self):
51         # XXX this assumes there is only one network that can have ports bound
52         # to it for a given slice. This is intended for the tenant view, which
53         # will obey this field.
54         networkPorts = ""
55         for networkSlice in self.networkslices.all():
56             network = networkSlice.network
57             if network.ports:
58                 networkPorts = network.ports
59
60         return networkPorts
61
62     @network_ports.setter
63     def network_ports(self, value):
64         print "XXX set networkPorts to", value
65
66     @staticmethod
67     def select_by_user(user):
68         if user.is_admin:
69             qs = SlicePlus.objects.all()
70         else:
71             slice_ids = [sp.slice.id for sp in SlicePrivilege.objects.filter(user=user)]
72             qs = SlicePlus.objects.filter(id__in=slice_ids)
73         return qs