Merge branch 'master' of git://git.planet-lab.org/plstackapi
[plstackapi.git] / planetstack / core / xoslib / objects / sliceplus.py
1 from core.models.slice import Slice
2
3 class SlicePlus(Slice):
4     class Meta:
5         proxy = True
6
7     def getSliceInfo(self, user=None):
8         used_sites = {}
9         used_deployments = {}
10         sliverCount = 0
11         for sliver in self.slivers.all():
12             site = sliver.node.site
13             deployment = sliver.node.deployment
14             used_sites[site.name] = used_sites.get(site.name, 0) + 1
15             used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
16             sliverCount = sliverCount + 1
17
18         roles = []
19         if (user!=None):
20             roles = [x.role for x in self.slice_privileges.filter(user=user)]
21
22         return {"sitesUsed": used_sites,
23                 "deploymentsUsed": used_deployments,
24                 "sliverCount": sliverCount,
25                 "siteCount": len(used_sites.keys()),
26                 "roles": roles}
27
28     @staticmethod
29     def select_by_user(user):
30         if user.is_admin:
31             qs = SlicePlus.objects.all()
32         else:
33             slice_ids = [sp.slice.id for sp in SlicePrivilege.objects.filter(user=user)]
34             qs = SlicePlus.objects.filter(id__in=slice_ids)
35         return qs