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 Site, Sites
10 from PLC.Nodes import Nodes
11 from PLC.TagTypes import TagType, TagTypes
12 from PLC.SiteTags import SiteTag, SiteTags
14 # need to import so the core classes get decorated with caller_may_write_tag
15 from PLC.AuthorizeHelpers import AuthorizeHelpers
17 class UpdateSiteTag(Method):
19 Updates the value of an existing site setting
21 Admins have full access. Non-admins need to
22 (1) have at least one of the roles attached to the tagtype,
23 and (2) belong in the same site as the tagged subject.
25 Returns 1 if successful, faults otherwise.
28 roles = ['admin', 'pi', 'tech', 'user']
32 SiteTag.fields['site_tag_id'],
33 SiteTag.fields['value']
36 returns = Parameter(int, '1 if successful')
38 def call(self, auth, site_tag_id, value):
39 site_tags = SiteTags(self.api, [site_tag_id])
41 raise PLCInvalidArgument, "No such site setting %r"%site_tag_id
42 site_tag = site_tags[0]
44 tag_type_id = site_tag['tag_type_id']
45 tag_type = TagTypes (self.api,[tag_type_id])[0]
47 sites = Sites (self.api, site_tag['site_id'])
49 raise PLCInvalidArgument, "No such site %d"%site_tag['site_id']
52 # check authorizations
53 site.caller_may_write_tag(self.api,self.caller,tag_type)
55 site_tag['value'] = value
58 self.object_ids = [site_tag['site_tag_id']]