trashing existing tmp file if older than 5 minutes
[plcapi.git] / PLC / Methods / UpdateSiteTag.py
1 #
2 # Thierry Parmentelat - INRIA
3 #
4 from PLC.Faults import *
5 from PLC.Method import Method
6 from PLC.Parameter import Parameter, Mixed
7 from PLC.Auth import Auth
8
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
13
14 # need to import so the core classes get decorated with caller_may_write_tag
15 from PLC.AuthorizeHelpers import AuthorizeHelpers
16
17 class UpdateSiteTag(Method):
18     """
19     Updates the value of an existing site setting
20
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.
24
25     Returns 1 if successful, faults otherwise.
26     """
27
28     roles = ['admin', 'pi', 'tech', 'user']
29
30     accepts = [
31         Auth(),
32         SiteTag.fields['site_tag_id'],
33         SiteTag.fields['value']
34         ]
35
36     returns = Parameter(int, '1 if successful')
37
38     def call(self, auth, site_tag_id, value):
39         site_tags = SiteTags(self.api, [site_tag_id])
40         if not site_tags:
41             raise PLCInvalidArgument, "No such site setting %r"%site_tag_id
42         site_tag = site_tags[0]
43
44         tag_type_id = site_tag['tag_type_id']
45         tag_type = TagTypes (self.api,[tag_type_id])[0]
46
47         sites = Sites (self.api, site_tag['site_id'])
48         if not sites:
49             raise PLCInvalidArgument, "No such site %d"%site_tag['site_id']
50         site=sites[0]
51         
52         # check authorizations
53         site.caller_may_write_tag(self.api,self.caller,tag_type)
54             
55         site_tag['value'] = value
56         site_tag.sync()
57
58         self.object_ids = [site_tag['site_tag_id']]
59         return 1