fix typo. When sending email notification, use values from plc_config instead of...
[plcapi.git] / PLC / Methods / GetSlices.py
index ac3c69e..63dc0b4 100644 (file)
@@ -2,6 +2,8 @@ from PLC.Method import Method
 from PLC.Parameter import Parameter, Mixed
 from PLC.Filter import Filter
 from PLC.Auth import Auth
 from PLC.Parameter import Parameter, Mixed
 from PLC.Filter import Filter
 from PLC.Auth import Auth
+from PLC.Persons import Person, Persons
+from PLC.Sites import Site, Sites
 from PLC.Slices import Slice, Slices
 
 class GetSlices(Method):
 from PLC.Slices import Slice, Slices
 
 class GetSlices(Method):
@@ -13,17 +15,19 @@ class GetSlices(Method):
     specified details will be returned.
 
     Users may only query slices of which they are members. PIs may
     specified details will be returned.
 
     Users may only query slices of which they are members. PIs may
-    query any of the slices at their sites. Admins may query any
-    slice. If a slice that cannot be queried is specified in
+    query any of the slices at their sites. Admins and nodes may query
+    any slice. If a slice that cannot be queried is specified in
     slice_filter, details about that slice will not be returned.
     """
 
     slice_filter, details about that slice will not be returned.
     """
 
-    roles = ['admin', 'pi', 'user']
+    roles = ['admin', 'pi', 'user', 'node']
 
     accepts = [
         Auth(),
         Mixed([Mixed(Slice.fields['slice_id'],
                      Slice.fields['name'])],
 
     accepts = [
         Auth(),
         Mixed([Mixed(Slice.fields['slice_id'],
                      Slice.fields['name'])],
+              Parameter(str,"name"),
+              Parameter(int,"slice_id"),
               Filter(Slice.fields)),
         Parameter([str], "List of fields to return", nullok = True)
         ]
               Filter(Slice.fields)),
         Parameter([str], "List of fields to return", nullok = True)
         ]
@@ -33,7 +37,8 @@ class GetSlices(Method):
     def call(self, auth, slice_filter = None, return_fields = None):
        # If we are not admin, make sure to return only viewable
        # slices.
     def call(self, auth, slice_filter = None, return_fields = None):
        # If we are not admin, make sure to return only viewable
        # slices.
-        if 'admin' not in self.caller['roles']:
+        if isinstance(self.caller, Person) and \
+           'admin' not in self.caller['roles']:
             # Get slices that we are able to view
             valid_slice_ids = self.caller['slice_ids']
             if 'pi' in self.caller['roles'] and self.caller['site_ids']:
             # Get slices that we are able to view
             valid_slice_ids = self.caller['slice_ids']
             if 'pi' in self.caller['roles'] and self.caller['site_ids']:
@@ -47,10 +52,24 @@ class GetSlices(Method):
             if slice_filter is None:
                 slice_filter = valid_slice_ids
 
             if slice_filter is None:
                 slice_filter = valid_slice_ids
 
+        # Must query at least slice_id (see below)
+        if return_fields is not None and 'slice_id' not in return_fields:
+            return_fields.append('slice_id')
+            added_fields = True
+        else:
+            added_fields = False
+
         slices = Slices(self.api, slice_filter, return_fields)
 
         # Filter out slices that are not viewable
         slices = Slices(self.api, slice_filter, return_fields)
 
         # Filter out slices that are not viewable
-        if 'admin' not in self.caller['roles']:
+        if isinstance(self.caller, Person) and \
+           'admin' not in self.caller['roles']:
             slices = filter(lambda slice: slice['slice_id'] in valid_slice_ids, slices)
 
             slices = filter(lambda slice: slice['slice_id'] in valid_slice_ids, slices)
 
+        # Remove slice_id if not specified
+        if added_fields:
+            for slice in slices:
+               if 'slice_id' in slice:
+                   del slice['slice_id']
+
         return slices
         return slices