2 # Thierry Parmentelat - INRIA
4 from PLC.Faults import *
5 from PLC.Method import Method
6 from PLC.Parameter import Parameter, Mixed
7 from PLC.Auth import Auth
9 from PLC.Sites import Sites
10 from PLC.Nodes import Nodes
11 from PLC.Interfaces import Interface, Interfaces
12 from PLC.TagTypes import TagType, TagTypes
13 from PLC.InterfaceTags import InterfaceTag, InterfaceTags
15 class DeleteInterfaceTag(Method):
17 Deletes the specified interface setting
19 Admins have full access. Non-admins need to
20 (1) have at least one of the roles attached to the tagtype,
21 and (2) belong in the same site as the tagged subject.
23 Returns 1 if successful, faults otherwise.
26 roles = ['admin', 'pi', 'user', 'tech']
30 InterfaceTag.fields['interface_tag_id']
33 returns = Parameter(int, '1 if successful')
35 def call(self, auth, interface_tag_id):
36 interface_tags = InterfaceTags(self.api, [interface_tag_id])
37 if not interface_tags:
38 raise PLCInvalidArgument, "No such interface tag %r"%interface_tag_id
39 interface_tag = interface_tags[0]
41 tag_type_id = interface_tag['tag_type_id']
42 tag_type = TagTypes (self.api,[tag_type_id])[0]
44 interfaces = Interfaces (self.api, interface_tag['interface_id'])
46 raise PLCInvalidArgument, "No such interface %d"%interface_tag['interface_id']
47 interface=interfaces[0]
49 # check authorizations
50 if 'admin' in self.caller['roles']:
52 elif not AuthorizeHelpers.caller_may_access_tag_type (self.api, self.caller, tag_type):
53 raise PLCPermissionDenied, "%s, forbidden tag %s"%(self.name,tag_type['tagname'])
54 elif AuthorizeHelpers.interface_belongs_to_person (self.api, interface, self.caller):
57 raise PLCPermissionDenied, "%s: you must belong in the same site as subject interface"%self.name
59 interface_tag.delete()
60 self.object_ids = [interface_tag['interface_tag_id']]