From ea7088921218c2837475decd5df7d1ca4a394fa8 Mon Sep 17 00:00:00 2001
From: Tony Mack <tmack@paris.CS.Princeton.EDU>
Date: Fri, 12 Oct 2012 16:18:59 -0400
Subject: [PATCH] fix bugs

---
 PLC/Methods/AddRoleToTagType.py     | 2 +-
 PLC/Methods/DeleteRoleFromPerson.py | 2 +-
 PLC/Methods/DeleteSite.py           | 3 ++-
 PLC/Methods/GetNodeFlavour.py       | 2 ++
 PLC/Methods/GetSites.py             | 6 ++++--
 PLC/Sites.py                        | 6 ++++--
 plcsh                               | 2 +-
 7 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/PLC/Methods/AddRoleToTagType.py b/PLC/Methods/AddRoleToTagType.py
index 947adcdf..c2067559 100644
--- a/PLC/Methods/AddRoleToTagType.py
+++ b/PLC/Methods/AddRoleToTagType.py
@@ -19,7 +19,7 @@ class AddRoleToTagType(Method):
 
     accepts = [
         Auth(),
-        Mixed(Role.fields['role_id'],
+        Mixed(Role.fields['id'],
               Role.fields['name']),
         Mixed(TagType.fields['tag_type_id'],
               TagType.fields['tagname']),
diff --git a/PLC/Methods/DeleteRoleFromPerson.py b/PLC/Methods/DeleteRoleFromPerson.py
index 4deacf60..9a22f256 100644
--- a/PLC/Methods/DeleteRoleFromPerson.py
+++ b/PLC/Methods/DeleteRoleFromPerson.py
@@ -19,7 +19,7 @@ class DeleteRoleFromPerson(Method):
 
     accepts = [
         Auth(),
-        Mixed(Role.fields['role_id'],
+        Mixed(Role.fields['id'],
               Role.fields['name']),
         Mixed(Person.fields['person_id'],
               Person.fields['email']),
diff --git a/PLC/Methods/DeleteSite.py b/PLC/Methods/DeleteSite.py
index f33aca51..d5d51235 100644
--- a/PLC/Methods/DeleteSite.py
+++ b/PLC/Methods/DeleteSite.py
@@ -18,7 +18,8 @@ class DeleteSite(Method):
 
     accepts = [
         Auth(),
-        Site.fields['id']
+        Mixed(Site.fields['site_id'],
+              Site.fields['login_base'])
         ]
 
     returns = Parameter(int, '1 if successful')
diff --git a/PLC/Methods/GetNodeFlavour.py b/PLC/Methods/GetNodeFlavour.py
index 9800f41f..92c0fc4b 100644
--- a/PLC/Methods/GetNodeFlavour.py
+++ b/PLC/Methods/GetNodeFlavour.py
@@ -4,6 +4,8 @@ from PLC.Faults import *
 from PLC.Parameter import *
 from PLC.Nodes import Node, Nodes
 
+from PLC.Accessors.Accessors_standard import *                  # import node accessors
+
 class GetNodeFlavour(Method):
     """
     Returns detailed information on a given node's flavour, i.e. its
diff --git a/PLC/Methods/GetSites.py b/PLC/Methods/GetSites.py
index a6bfff7e..138c46e9 100644
--- a/PLC/Methods/GetSites.py
+++ b/PLC/Methods/GetSites.py
@@ -17,8 +17,10 @@ class GetSites(Method):
 
     accepts = [
         Auth(),
-        Mixed([Site.fields['id']],
-              Parameter(str,"id"),
+        Mixed([Mixed(Site.fields['site_id'],
+                     Site.fields['login_base'])],
+              Parameter(str,"login_base"),
+              Parameter(int,"site_id"),    
               Filter(Site.fields)),
         Parameter([str], "List of fields to return", nullok = True)
         ]
diff --git a/PLC/Sites.py b/PLC/Sites.py
index c66d38f3..07cd634b 100644
--- a/PLC/Sites.py
+++ b/PLC/Sites.py
@@ -158,8 +158,10 @@ class Sites(list):
         elif isinstance(site_filter, dict):
             sites = Site().select(filter=site_filter)
         elif isinstance(site_filter, (list, tuple, set)):
-            sites = Site().select() 
-            sites = [site for site in sites if site.id in site_filter]
+            ints = filter(lambda x: isinstance(x, (int, long)), site_filter)
+            strs = filter(lambda x: isinstance(x, StringTypes), site_filter)
+            site_filter = {'site_id': ints, 'login_base': strs}
+            sites = Site().select(filter=site_filter)
         else:
             raise PLCInvalidArgument, "Wrong site filter %s" % site_filter         
 
diff --git a/plcsh b/plcsh
index d8ab48f9..2bd46600 100755
--- a/plcsh
+++ b/plcsh
@@ -27,7 +27,7 @@ parser.add_option("-f", "--config", help = "PLC configuration file")
 parser.add_option("-h", "--url", help = "API URL")
 parser.add_option("-c", "--cacert", help = "API SSL certificate")
 parser.add_option("-k", "--insecure", help = "Do not check SSL certificate")
-parser.add_option("-m", "--method", help = "API authentication method")
+parser.add_option("-m", "--method", help = "API authentication method", default='capability')
 parser.add_option("-s", "--session", help = "API session key")
 parser.add_option("-u", "--user", help = "API user name")
 parser.add_option("-p", "--password", help = "API password")
-- 
2.47.0