1 from PLC.Faults import *
2 from PLC.Method import Method
3 from PLC.Parameter import Parameter, Mixed
4 from PLC.SliceAttributes import SliceAttribute, SliceAttributes
5 from PLC.Sites import Site, Sites
6 from PLC.Slices import Slice, Slices
7 from PLC.Nodes import Node, Nodes
8 from PLC.Auth import Auth
10 class GetSliceAttributes(Method):
12 Get an array of structs containing the values of slice and sliver
13 attributes. An attribute is a sliver attribute if the node_id
14 field is set. If slice_attribute_id_list is specified, only the
15 specified attributes will be queried, if set.
17 Users may only query attributes of slices or slivers of which they
18 are members. PIs may only query attributes of slices or slivers at
19 their sites, or of which they are members. Admins may query
20 attributes of any slice or sliver.
23 roles = ['admin', 'pi', 'user']
27 [SliceAttribute.fields['slice_attribute_id']],
30 returns = [SliceAttribute.fields]
32 def call(self, auth, slice_attribute_ids = None):
33 # If we are not admin, make sure to only return our own slice
34 # and sliver attributes.
35 if 'admin' not in self.caller['roles']:
36 # Get slices that we are able to view
37 valid_slice_ids = self.caller['slice_ids']
38 if 'pi' in self.caller['roles'] and self.caller['site_ids']:
39 sites = Sites(self.api, self.caller['site_ids']).values()
41 valid_slice_ids += site['slice_ids']
43 if not valid_slice_ids:
46 # Get slice attributes that we are able to view
47 valid_slice_attribute_ids = []
48 slices = Slices(self.api, valid_slice_ids).values()
50 valid_slice_attribute_ids += slice['slice_attribute_ids']
52 slice_attribute_ids = set(slice_attribute_ids).intersection(valid_slice_attribute_ids)
53 if not slice_attribute_ids:
56 return SliceAttributes(self.api, slice_attribute_ids).values()