X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FAddNodeTag.py;h=f02181b3be796e2b58a4e27b718e1e17abedd394;hb=5dc031b09f8cf21ddc88b245bcc2fb8935fac516;hp=e6db8ed4b6e7ed77104a443d6dc688040fbc97e3;hpb=7ba889dd89500f8c0695ef21bfda28291bb4f9da;p=plcapi.git diff --git a/PLC/Methods/AddNodeTag.py b/PLC/Methods/AddNodeTag.py index e6db8ed..f02181b 100644 --- a/PLC/Methods/AddNodeTag.py +++ b/PLC/Methods/AddNodeTag.py @@ -1,3 +1,5 @@ +# $Id$ +# $URL$ # # Thierry Parmentelat - INRIA # @@ -8,12 +10,11 @@ from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Auth import Auth -from PLC.NodeTagTypes import NodeTagType, NodeTagTypes -from PLC.NodeTags import NodeTag, NodeTags +from PLC.Sites import Sites from PLC.Nodes import Node, Nodes +from PLC.TagTypes import TagType, TagTypes +from PLC.NodeTags import NodeTag, NodeTags -from PLC.Nodes import Nodes -from PLC.Sites import Sites class AddNodeTag(Method): """ @@ -32,9 +33,10 @@ class AddNodeTag(Method): accepts = [ Auth(), # no other way to refer to a node - NodeTag.fields['node_id'], - Mixed(NodeTagType.fields['node_tag_type_id'], - NodeTagType.fields['name']), + Mixed(Node.fields['node_id'], + Node.fields['hostname']), + Mixed(TagType.fields['tag_type_id'], + TagType.fields['tagname']), NodeTag.fields['value'], ] @@ -43,47 +45,47 @@ class AddNodeTag(Method): object_type = 'Node' - def call(self, auth, node_id, node_tag_type_id_or_name, value): + def call(self, auth, node_id, tag_type_id_or_name, value): nodes = Nodes(self.api, [node_id]) if not nodes: raise PLCInvalidArgument, "No such node %r"%node_id node = nodes[0] - node_tag_types = NodeTagTypes(self.api, [node_tag_type_id_or_name]) - if not node_tag_types: - raise PLCInvalidArgument, "No such node tag type %r"%node_tag_type_id_or_name - node_tag_type = node_tag_types[0] + tag_types = TagTypes(self.api, [tag_type_id_or_name]) + if not tag_types: + raise PLCInvalidArgument, "No such node tag type %r"%tag_type_id_or_name + tag_type = tag_types[0] - # checks for existence - does not allow several different tags + # checks for existence - does not allow several different tags conflicts = NodeTags(self.api, {'node_id':node['node_id'], - 'node_tag_type_id':node_tag_type['node_tag_type_id']}) + 'tag_type_id':tag_type['tag_type_id']}) if len(conflicts) : raise PLCInvalidArgument, "Node %d already has tag %d"%(node['node_id'], - node_tag_type['node_tag_type_id']) - - # check permission : it not admin, is the user affiliated with the right site - if 'admin' not in self.caller['roles']: - # locate node - node = Nodes (self.api,[node['node_id']])[0] - # locate site - site = Sites (self.api, [node['site_id']])[0] - # check caller is affiliated with this site - if self.caller['person_id'] not in site['person_ids']: - raise PLCPermissionDenied, "Not a member of the hosting site %s"%site['abbreviated_site'] - - required_min_role = node_tag_type ['min_role_id'] - if required_min_role is not None and \ - min(self.caller['role_ids']) > required_min_role: - raise PLCPermissionDenied, "Not allowed to modify the specified node tag, requires role %d",required_min_role + tag_type['tag_type_id']) + + # check permission : it not admin, is the user affiliated with the right site + if 'admin' not in self.caller['roles']: + # locate node + node = Nodes (self.api,[node['node_id']])[0] + # locate site + site = Sites (self.api, [node['site_id']])[0] + # check caller is affiliated with this site + if self.caller['person_id'] not in site['person_ids']: + raise PLCPermissionDenied, "Not a member of the hosting site %s"%site['abbreviated_site'] + + required_min_role = tag_type ['min_role_id'] + if required_min_role is not None and \ + min(self.caller['role_ids']) > required_min_role: + raise PLCPermissionDenied, "Not allowed to modify the specified node tag, requires role %d"%required_min_role node_tag = NodeTag(self.api) node_tag['node_id'] = node['node_id'] - node_tag['node_tag_type_id'] = node_tag_type['node_tag_type_id'] + node_tag['tag_type_id'] = tag_type['tag_type_id'] node_tag['value'] = value node_tag.sync() - self.object_ids = [node_tag['node_tag_id']] + self.object_ids = [node_tag['node_tag_id']] return node_tag['node_tag_id']