remove PLC.Debug.log, use PLC.Logger.logger instead
[plcapi.git] / PLC / Roles.py
index ddb33af..fcc05f4 100644 (file)
@@ -4,8 +4,6 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id$
-#
 
 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', ('tag_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,7 +55,7 @@ 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
@@ -68,5 +66,13 @@ class Roles(Table):
             elif isinstance(role_filter, dict):
                 role_filter = Filter(Role.fields, role_filter)
                 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)