- subclass the correct class
[plcapi.git] / PLC / Methods / SliceListNames.py
1 from PLC.Method import Method
2 from PLC.Parameter import Parameter, Mixed
3 from PLC.Filter import Filter
4 from PLC.Auth import Auth
5 from PLC.Slices import Slice, Slices
6
7 class SliceListNames(Method):
8     """
9     Deprecated. Can be implemented with GetSlices.
10
11     List the names of registered slices.
12
13     Users may only query slices of which they are members. PIs may
14     query any of the slices at their sites. Admins may query any
15     slice. If a slice that cannot be queried is specified in
16     slice_filter, details about that slice will not be returned.
17     """
18
19     roles = ['admin', 'pi', 'user']
20
21     accepts = [
22         Auth(),
23         Parameter(str, "Slice prefix", nullok = True)
24         ]
25
26     returns = [Slice.fields]
27     
28
29     def call(self, auth, prefix=None):
30
31         slice_filter = None
32         if prefix:
33             slice_filter = {'name': prefix+'*'}
34         
35         slices = Slices(self.api, slice_filter)
36         if not slices:
37             raise PLCInvalidArgument, "No such slice"
38         
39         # If we are not admin, make sure to return only viewable
40         # slices.
41         if 'admin' not in self.caller['roles']:
42             # Get slices that we are able to view
43             valid_slice_ids = self.caller['slice_ids']
44             if 'pi' in self.caller['roles'] and self.caller['site_ids']:
45                 sites = Sites(self.api, self.caller['site_ids'])
46                 for site in sites:
47                     valid_slice_ids += site['slice_ids']
48
49             if not valid_slice_ids:
50                 return []
51
52             slices = filter(lambda slice: slice['slice_id'] in valid_slice_ids, slices)
53         
54         slice_names = [slice['name'] for slice in slices]
55
56         return slice_names