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.PersonTags import PersonTag, PersonTags
10 from PLC.Persons import Person, Persons
12 from PLC.AuthorizeHelpers import AuthorizeHelpers
14 class UpdatePersonTag(Method):
16 Updates the value of an existing person setting
18 Admins have full access. Non-admins can change their own tags.
20 Returns 1 if successful, faults otherwise.
23 roles = ['admin', 'pi', 'tech', 'user']
27 PersonTag.fields['person_tag_id'],
28 PersonTag.fields['value']
31 returns = Parameter(int, '1 if successful')
33 def call(self, auth, person_tag_id, value):
34 person_tags = PersonTags(self.api, [person_tag_id])
36 raise PLCInvalidArgument, "No such person setting %r"%person_tag_id
37 person_tag = person_tags[0]
39 persons = Persons (self.api, person_tag['person_id'])
41 raise PLCInvalidArgument, "No such person %d"%person_tag['person_id']
44 # check authorizations
45 if 'admin' in self.caller['roles']:
47 # user can change tags on self
48 elif AuthorizeHelpers.person_may_access_person (self.api, self.caller, person):
51 raise PLCPermissionDenied, "%s: you can only change your own tags"%self.name
53 person_tag['value'] = value
56 self.object_ids = [person_tag['person_tag_id']]