X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FDeleteSliceAttribute.py;h=11ad0180026bbdaf1dc030ef4a26aa81080c1d46;hb=90a9c8342a4f5bcf02e6407dcf4ed1975ad15baf;hp=16d5104f2e236d71f6f5674d4338858fed7f37ab;hpb=dc507ccf50fba436a80b8cbf2da7a6353af8e10c;p=plcapi.git diff --git a/PLC/Methods/DeleteSliceAttribute.py b/PLC/Methods/DeleteSliceAttribute.py index 16d5104..11ad018 100644 --- a/PLC/Methods/DeleteSliceAttribute.py +++ b/PLC/Methods/DeleteSliceAttribute.py @@ -4,7 +4,7 @@ from PLC.Parameter import Parameter, Mixed from PLC.SliceAttributes import SliceAttribute, SliceAttributes from PLC.Slices import Slice, Slices from PLC.Nodes import Node, Nodes -from PLC.Auth import PasswordAuth +from PLC.Auth import Auth class DeleteSliceAttribute(Method): """ @@ -22,27 +22,28 @@ class DeleteSliceAttribute(Method): roles = ['admin', 'pi', 'user'] accepts = [ - PasswordAuth(), - Mixed(Slice.fields['slice_id'], - Slice.fields['name']), + Auth(), SliceAttribute.fields['slice_attribute_id'] ] returns = Parameter(int, '1 if successful') - def call(self, auth, slice_id_or_name, slice_attribute_id): - slices = Slices(self.api, [slice_id_or_name]).values() - if not slices: - raise PLCInvalidArgument, "No such slice" - slice = slices[0] - slice_attributes = SliceAttributes(self.api, [slice_attribute_id]).values() + def call(self, auth, slice_attribute_id): + slice_attributes = SliceAttributes(self.api, [slice_attribute_id]) if not slice_attributes: raise PLCInvalidArgument, "No such slice attribute" slice_attribute = slice_attributes[0] - if slice_attribute['slice_attribute_id'] not in slice['slice_attribute_ids']: - raise PLCInvalidArgument, "Invalid slice attribute ID" + slices = Slices(self.api, [slice_attribute['slice_id']]) + if not slices: + raise PLCInvalidArgument, "No such slice" + slice = slices[0] + + if slice['peer_id'] is not None: + raise PLCInvalidArgument, "Not a local slice" + + assert slice_attribute['slice_attribute_id'] in slice['slice_attribute_ids'] if 'admin' not in self.caller['roles']: if self.caller['person_id'] in slice['person_ids']: @@ -54,8 +55,9 @@ class DeleteSliceAttribute(Method): if slice_attribute['min_role_id'] is not None and \ min(self.caller['role_ids']) > slice_attribute['min_role_id']: - raise PLCPermissionDenied, "Not allowed to delete the specified attribute" + raise PLCPermissioinDenied, "Not allowed to delete the specified attribute" slice_attribute.delete() + self.object_ids = [slice_attribute['slice_attribute_id']] return 1