all tag types use permission helpers in AuthorizeHelpers
[plcapi.git] / PLC / Methods / UpdatePersonTag.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.PersonTags import PersonTag, PersonTags
10 from PLC.Persons import Person, Persons
11
12 class UpdatePersonTag(Method):
13     """
14     Updates the value of an existing person setting
15
16     Admins have full access.  Non-admins can change their own tags.
17
18     Returns 1 if successful, faults otherwise.
19     """
20
21     roles = ['admin', 'pi', 'tech', 'user']
22
23     accepts = [
24         Auth(),
25         PersonTag.fields['person_tag_id'],
26         PersonTag.fields['value']
27         ]
28
29     returns = Parameter(int, '1 if successful')
30
31     def call(self, auth, person_tag_id, value):
32         person_tags = PersonTags(self.api, [person_tag_id])
33         if not person_tags:
34             raise PLCInvalidArgument, "No such person setting %r"%person_tag_id
35         person_tag = person_tags[0]
36
37         persons = Persons (self.api, person_tag['person_id'])
38         if not persons:
39             raise PLCInvalidArgument, "No such person %d"%person_tag['person_id']
40         person=persons[0]
41
42         # check authorizations
43         person.caller_may_write_tag(self.api,self.caller,tag_type)
44
45         person_tag['value'] = value
46         person_tag.sync()
47
48         self.object_ids = [person_tag['person_tag_id']]
49         return 1