X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FDeleteSlice.py;h=34b04e13e6ca64e9a810e599dccbcc46dad9ab7e;hb=f3c9e56d0c9427ff4cd8551e3d037531843fc033;hp=c5b511e95bbe693bc3c12ee0f3ae04608d1dcd93;hpb=a017c56cdd2a833ce6d1102eacfc3e7df0d5ee57;p=plcapi.git diff --git a/PLC/Methods/DeleteSlice.py b/PLC/Methods/DeleteSlice.py index c5b511e..34b04e1 100644 --- a/PLC/Methods/DeleteSlice.py +++ b/PLC/Methods/DeleteSlice.py @@ -1,16 +1,17 @@ +# $Id# from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Slices import Slice, Slices -from PLC.Auth import PasswordAuth +from PLC.Auth import Auth class DeleteSlice(Method): """ Deletes the specified slice. Users may only delete slices of which they are members. PIs may - delete any of the slices at their sites. Admins may delete any - slice. + delete any of the slices at their sites, or any slices of which + they are members. Admins may delete any slice. Returns 1 if successful, faults otherwise. """ @@ -18,7 +19,7 @@ class DeleteSlice(Method): roles = ['admin', 'pi', 'user'] accepts = [ - PasswordAuth(), + Auth(), Mixed(Slice.fields['slice_id'], Slice.fields['name']), ] @@ -26,11 +27,14 @@ class DeleteSlice(Method): returns = Parameter(int, '1 if successful') def call(self, auth, slice_id_or_name): - slices = Slices(self.api, [slice_id_or_name]).values() + slices = Slices(self.api, [slice_id_or_name]) if not slices: raise PLCInvalidArgument, "No such slice" slice = slices[0] + if slice['peer_id'] is not None: + raise PLCInvalidArgument, "Not a local slice" + if 'admin' not in self.caller['roles']: if self.caller['person_id'] in slice['person_ids']: pass @@ -40,5 +44,6 @@ class DeleteSlice(Method): raise PLCPermissionDenied, "Specified slice not associated with any of your sites" slice.delete() + self.event_objects = {'Slice': [slice['slice_id']]} return 1