X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FRoles.py;h=fcc05f4bd609edf609d01d7047d8b53ef46ff84b;hb=da06561d0f5240a5409474e16824e4e015f31fac;hp=86477668ed8c7423d4bd070263054429afe72653;hpb=e1a827010ec8e6e5c1e1272e22b3269108bcc9c8;p=plcapi.git diff --git a/PLC/Roles.py b/PLC/Roles.py index 8647766..fcc05f4 100644 --- a/PLC/Roles.py +++ b/PLC/Roles.py @@ -4,8 +4,6 @@ # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id: Roles.py,v 1.7 2006/11/08 23:02:01 mlhuang Exp $ -# from types import StringTypes from PLC.Faults import * @@ -21,31 +19,31 @@ class Role(Row): table_name = 'roles' primary_key = 'role_id' - join_tables = ['person_role', ('slice_attribute_types', 'min_role_id')] + join_tables = ['person_role', 'tag_type_role' ] fields = { 'role_id': Parameter(int, "Role identifier"), 'name': Parameter(str, "Role", max = 100), } def validate_role_id(self, role_id): - # Make sure role does not already exist - conflicts = Roles(self.api, [role_id]) + # Make sure role does not already exist + conflicts = Roles(self.api, [role_id]) if conflicts: raise PLCInvalidArgument, "Role ID already in use" return role_id def validate_name(self, name): - # Make sure name is not blank + # Make sure name is not blank if not len(name): raise PLCInvalidArgument, "Role must be specified" - - # Make sure role does not already exist - conflicts = Roles(self.api, [name]) + + # Make sure role does not already exist + conflicts = Roles(self.api, [name]) if conflicts: raise PLCInvalidArgument, "Role name already in use" - return name + return name class Roles(Table): """ @@ -57,16 +55,24 @@ class Roles(Table): sql = "SELECT %s FROM roles WHERE True" % \ ", ".join(Role.fields) - + if role_filter is not None: if isinstance(role_filter, (list, tuple, set)): # Separate the list into integers and strings ints = filter(lambda x: isinstance(x, (int, long)), role_filter) strs = filter(lambda x: isinstance(x, StringTypes), role_filter) role_filter = Filter(Role.fields, {'role_id': ints, 'name': strs}) - sql += " AND (%s)" % role_filter.sql(api, "OR") + sql += " AND (%s) %s" % role_filter.sql(api, "OR") elif isinstance(role_filter, dict): role_filter = Filter(Role.fields, role_filter) - sql += " AND (%s)" % role_filter.sql(api, "AND") + sql += " AND (%s) %s" % role_filter.sql(api, "AND") + elif isinstance(role_filter, (int, long)): + role_filter = Filter(Role.fields, {'role_id': role_filter}) + sql += " AND (%s) %s" % role_filter.sql(api, "AND") + elif isinstance(role_filter, StringTypes): + role_filter = Filter(Role.fields, {'name': role_filter}) + sql += " AND (%s) %s" % role_filter.sql(api, "AND") + else: + raise PLCInvalidArgument, "Wrong role filter %r"%role_filter self.selectall(sql)