1 from PLC.Faults import *
2 from PLC.Method import Method
3 from PLC.Parameter import Parameter, Mixed
4 from PLC.Persons import Person, Persons
5 from PLC.Auth import Auth
6 from PLC.Roles import Role, Roles
8 class AdmIsPersonInRole(Method):
10 Deprecated. Functionality can be implemented with GetPersons.
12 Returns 1 if the specified account has the specified role, 0
13 otherwise. This function differs from AdmGetPersonRoles() in that
14 any authorized user can call it. It is currently restricted to
20 roles = ['admin', 'pi', 'user', 'tech']
24 Mixed(Person.fields['person_id'],
25 Person.fields['email']),
26 Mixed(Parameter(int, "Role identifier"),
27 Parameter(str, "Role name"))
30 returns = Parameter(int, "1 if account has role, 0 otherwise")
32 def call(self, auth, person_id_or_email, role_id_or_name):
33 # This is a totally fucked up function. I have no idea why it
34 # exists or who calls it, but here is how it is supposed to
37 # Only allow PI roles to be checked
39 for role_id, role in Roles(self.api).iteritems():
40 roles[role_id] = role['name']
41 roles[role['name']] = role_id
43 if role_id_or_name not in roles:
44 raise PLCInvalidArgument, "Invalid role identifier or name"
46 if isinstance(role_id_or_name, int):
47 role_id = role_id_or_name
49 role_id = roles[role_id_or_name]
51 if roles[role_id] != "pi":
52 raise PLCInvalidArgument, "Only the PI role may be checked"
54 # Get account information
55 persons = Persons(self.api, [person_id_or_email])
57 # Rather than raise an error, and indicate whether or not
58 # the person is real, return 0.
62 person = persons.values()[0]
64 if role_id in person['role_ids']: