move sfa package import inside of __init__()
[plcapi.git] / PLC / Methods / DeleteSlice.py
1 # $Id$
2 # $URL$
3 from PLC.Faults import *
4 from PLC.Method import Method
5 from PLC.Parameter import Parameter, Mixed
6 from PLC.Slices import Slice, Slices
7 from PLC.Auth import Auth
8 from PLC.SFA import SFA
9
10 class DeleteSlice(Method):
11     """
12     Deletes the specified slice.
13
14     Users may only delete slices of which they are members. PIs may
15     delete any of the slices at their sites, or any slices of which
16     they are members. Admins may delete any slice.
17
18     Returns 1 if successful, faults otherwise.
19     """
20
21     roles = ['admin', 'pi', 'user']
22
23     accepts = [
24         Auth(),
25         Mixed(Slice.fields['slice_id'],
26               Slice.fields['name']),
27         ]
28
29     returns = Parameter(int, '1 if successful')
30
31     def call(self, auth, slice_id_or_name):
32         slices = Slices(self.api, [slice_id_or_name])
33         if not slices:
34             raise PLCInvalidArgument, "No such slice"
35         slice = slices[0]
36
37         if slice['peer_id'] is not None:
38             raise PLCInvalidArgument, "Not a local slice"
39
40         if 'admin' not in self.caller['roles']:
41             if self.caller['person_id'] in slice['person_ids']:
42                 pass
43             elif 'pi' not in self.caller['roles']:
44                 raise PLCPermissionDenied, "Not a member of the specified slice"
45             elif slice['site_id'] not in self.caller['site_ids']:
46                 raise PLCPermissionDenied, "Specified slice not associated with any of your sites"
47
48         slice.delete()
49         self.event_objects = {'Slice': [slice['slice_id']]}
50
51         sfa = SFA()
52         sfa.delete_record(slice, 'slice')
53
54         return 1