add query functions
authorMark Huang <mlhuang@cs.princeton.edu>
Mon, 23 Oct 2006 19:15:18 +0000 (19:15 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Mon, 23 Oct 2006 19:15:18 +0000 (19:15 +0000)
PLC/Methods/AdmQueryConfFile.py [new file with mode: 0644]
PLC/Methods/AdmQueryNode.py [new file with mode: 0644]
PLC/Methods/AdmQueryPerson.py [new file with mode: 0644]
PLC/Methods/AdmQueryPowerControlUnit.py [new file with mode: 0644]
PLC/Methods/AdmQuerySite.py [new file with mode: 0644]
PLC/Methods/__init__.py

diff --git a/PLC/Methods/AdmQueryConfFile.py b/PLC/Methods/AdmQueryConfFile.py
new file mode 100644 (file)
index 0000000..28771d2
--- /dev/null
@@ -0,0 +1,35 @@
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Nodes import Node, Nodes
+from PLC.ConfFiles import ConfFile, ConfFiles
+from PLC.Auth import PasswordAuth
+
+class AdmQueryConfFile(Method):
+    """
+    Deprecated. See GetConfFiles.
+    """
+
+    status = "deprecated"
+
+    roles = ['admin', 'pi', 'user', 'tech']
+
+    accepts = [
+        PasswordAuth(),
+        {'node_id': Node.fields['node_id']}
+        ]
+
+    returns = [ConfFile.fields['conf_file_id']]
+
+    def call(self, auth, search_vals):
+        if 'node_id' in search_vals:
+            conf_files = ConfFiles(self.api).values()
+
+            conf_files = filter(lambda conf_file: \
+                                search_vals['node_id'] in conf_file['node_ids'],
+                                conf_files)
+
+            if conf_files:
+                return [conf_file['conf_file_id'] for conf_file in conf_files]
+
+        return []
diff --git a/PLC/Methods/AdmQueryNode.py b/PLC/Methods/AdmQueryNode.py
new file mode 100644 (file)
index 0000000..8297f24
--- /dev/null
@@ -0,0 +1,67 @@
+import socket
+
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Nodes import Node, Nodes
+from PLC.NodeNetworks import NodeNetwork, NodeNetworks, valid_ip
+from PLC.Auth import PasswordAuth
+
+class AdmQueryNode(Method):
+    """
+    Deprecated. Functionality can be implemented with GetNodes and
+    GetNodeNetworks.
+    """
+
+    status = "deprecated"
+
+    roles = ['admin', 'pi', 'user', 'tech']
+
+    accepts = [
+        PasswordAuth(),
+        {'node_hostname': Node.fields['hostname'],
+         'nodenetwork_ip': NodeNetwork.fields['ip'],
+         'nodenetwork_mac': NodeNetwork.fields['mac'],
+         'nodenetwork_method': NodeNetwork.fields['method']}
+        ]
+
+    returns = [Node.fields['node_id']]
+
+    def call(self, auth, search_vals):
+        # Get possible nodenetworks
+        if 'node_hostname' in search_vals:
+            nodes = Nodes(self.api, [search_vals['node_hostname']]).values()
+            if not nodes:
+                return []
+
+            # No network interface filters specified
+            if 'nodenetwork_ip' not in search_vals and \
+               'nodenetwork_mac' not in search_vals and \
+               'nodenetwork_method' not in search_vals:
+                return [nodes[0]['node_id']]
+
+            if nodes[0]['nodenetwork_ids']:
+                nodenetworks = NodeNetworks(self.api, nodes[0]['nodenetwork_ids']).values()
+            else:
+                nodenetworks = []
+        else:
+            nodenetworks = NodeNetworks(self.api).values()
+
+        if 'nodenetwork_ip' in search_vals:
+            if not valid_ip(search_vals['nodenetwork_ip']):
+                raise PLCInvalidArgument, "Invalid IP address"
+            nodenetworks = filter(lambda nodenetwork: \
+                                  socket.inet_aton(nodenetwork['ip']) == socket.inet_aton(search_vals['nodenetwork_ip']),
+                                  nodenetworks)
+
+        if 'nodenetwork_mac' in search_vals:
+            nodenetworks = filter(lambda nodenetwork: \
+                                 nodenetwork['mac'].lower() == search_vals['nodenetwork_mac'].lower(),
+                                 nodenetworks)
+
+        if 'nodenetwork_method' in search_vals:
+            nodenetworks = filter(lambda nodenetwork: \
+                                  nodenetwork['method'].lower() == search_vals['nodenetwork_method'].lower(),
+                                  nodenetworks)
+
+        return [nodenetwork['node_id'] for nodenetwork in nodenetworks]
diff --git a/PLC/Methods/AdmQueryPerson.py b/PLC/Methods/AdmQueryPerson.py
new file mode 100644 (file)
index 0000000..f1f1e50
--- /dev/null
@@ -0,0 +1,29 @@
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Persons import Person, Persons
+from PLC.Auth import PasswordAuth
+
+class AdmQueryPerson(Method):
+    """
+    Deprecated. See GetPersons.
+    """
+
+    status = "deprecated"
+
+    roles = ['admin', 'pi', 'user', 'tech']
+
+    accepts = [
+        PasswordAuth(),
+        {'email': Person.fields['email']}
+        ]
+
+    returns = [Person.fields['person_id']]
+
+    def call(self, auth, search_vals):
+        if 'email' in search_vals:
+            persons = Persons(self.api, [search_vals['email']]).values()
+            if persons:
+                return [persons[0]['person_id']]
+
+        return []
diff --git a/PLC/Methods/AdmQueryPowerControlUnit.py b/PLC/Methods/AdmQueryPowerControlUnit.py
new file mode 100644 (file)
index 0000000..25bbc0e
--- /dev/null
@@ -0,0 +1,59 @@
+import socket
+
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.PCUs import PCU, PCUs
+from PLC.Nodes import Node, Nodes
+from PLC.NodeNetworks import NodeNetwork, NodeNetworks, valid_ip
+from PLC.Auth import PasswordAuth
+
+class AdmQueryPowerControlUnit(Method):
+    """
+    Deprecated. Functionality can be implemented with GetPCUs or
+    GetNodes.
+    """
+
+    status = "deprecated"
+
+    roles = ['admin', 'pi', 'user', 'tech']
+
+    accepts = [
+        PasswordAuth(),
+        {'pcu_hostname': PCU.fields['hostname'],
+         'pcu_ip': PCU.fields['ip'],
+         'node_hostname': Node.fields['hostname'],
+         'node_id': Node.fields['node_id']}
+        ]
+
+    returns = [PCU.fields['pcu_id']]
+
+    def call(self, auth, search_vals):
+        # Get all PCUs. This is a stupid function. The API should not
+        # be used for DB mining.
+        pcus = PCUs(self.api).values()
+
+        if 'pcu_hostname' in search_vals:
+            pcus = filter(lambda pcu: \
+                          pcu['hostname'].lower() == search_vals['pcu_hostname'].lower(),
+                          pcus)
+
+        if 'pcu_ip' in search_vals:
+            if not valid_ip(search_vals['pcu_ip']):
+                raise PLCInvalidArgument, "Invalid IP address"
+            pcus = filter(lambda pcu: \
+                          socket.inet_aton(pcu['ip']) == socket.inet_aton(search_vals['pcu_ip']),
+                          pcus)
+
+        if 'node_id' in search_vals:
+            pcus = filter(lambda pcu: \
+                          search_vals['node_id'] in pcu['node_ids'],
+                          pcus)
+
+        if 'node_hostname' in search_vals:
+            pcus = filter(lambda pcu: \
+                          search_vals['node_hostname'] in \
+                          [node['hostname'] for node in Nodes(self.api, pcu['node_ids']).values()],
+                          pcus)
+
+        return [pcu['pcu_id'] for pcu in pcus]
diff --git a/PLC/Methods/AdmQuerySite.py b/PLC/Methods/AdmQuerySite.py
new file mode 100644 (file)
index 0000000..ef3a2eb
--- /dev/null
@@ -0,0 +1,87 @@
+import socket
+
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Sites import Site, Sites
+from PLC.Nodes import Node, Nodes
+from PLC.NodeNetworks import NodeNetwork, NodeNetworks, valid_ip
+from PLC.Auth import PasswordAuth
+
+class AdmQuerySite(Method):
+    """
+    Deprecated. Functionality can be implemented with GetSites and
+    GetNodes.
+    """
+
+    status = "deprecated"
+
+    roles = ['admin', 'pi', 'user', 'tech']
+
+    accepts = [
+        PasswordAuth(),
+        {'site_name': Site.fields['name'],
+         'site_abbreviatedname': Site.fields['abbreviated_name'],
+         'site_loginbase': Site.fields['login_base'],
+         'node_hostname': Node.fields['hostname'],
+         'node_id': Node.fields['node_id'],
+         'nodenetwork_ip': NodeNetwork.fields['ip'],
+         'nodenetwork_mac': NodeNetwork.fields['mac']}
+        ]
+
+    returns = [Site.fields['site_id']]
+
+    def call(self, auth, search_vals):
+        if 'site_loginbase' in search_vals:
+            sites = Sites(self.api, [search_vals['site_loginbase']]).values()
+        else:
+            sites = Sites(self.api).values()
+            
+        if 'site_name' in search_vals:
+            sites = filter(lambda site: \
+                           site['name'] == search_vals['site_name'],
+                           sites)
+
+        if 'site_abbreviatedname' in search_vals:
+            sites = filter(lambda site: \
+                           site['abbreviatedname'] == search_vals['site_abbreviatedname'],
+                           sites)
+
+        if 'node_id' in search_vals:
+            sites = filter(lambda site: \
+                           search_vals['node_id'] in site['node_ids'],
+                           sites)
+
+        if 'node_hostname' in search_vals or \
+           'nodenetwork_ip' in search_vals or \
+           'nodenetwork_mac' in search_vals:
+            for site in sites:
+                site['hostnames'] = []
+                site['ips'] = []
+                site['macs'] = []
+                if site['node_ids']:
+                    nodes = Nodes(self.api, site['node_ids']).values()
+                    for node in nodes:
+                        site['hostnames'].append(node['hostname'])
+                        if 'nodenetwork_ip' in search_vals or \
+                           'nodenetwork_mac' in search_vals:
+                            nodenetworks = NodeNetworks(self.api, node['nodenetwork_ids']).values()
+                            site['ips'] += [nodenetwork['ip'] for nodenetwork in nodenetworks]
+                            site['macs'] += [nodenetwork['mac'] for nodenetwork in nodenetworks]
+
+            if 'node_hostname' in search_vals:
+                sites = filter(lambda site: \
+                               search_vals['node_hostname'] in site['hostnames'],
+                               sites)
+
+            if 'nodenetwork_ip' in search_vals:
+                sites = filter(lambda site: \
+                               search_vals['nodenetwork_ip'] in site['ips'],
+                               sites)
+
+            if 'nodenetwork_mac' in search_vals:
+                sites = filter(lambda site: \
+                               search_vals['nodenetwork_mac'] in site['macs'],
+                               sites)
+
+        return [site['site_id'] for site in sites]
index 4511c72..dd44afd 100644 (file)
@@ -1 +1 @@
-methods = 'AddAddressType AddAddressTypeToAddress AddBootState AddKey AddKeyType AddNetworkMethod AddNetworkType AddNodeGroup AddNodeNetwork AddNode AddNodeToNodeGroup AddNodeToPCU AddPCU AddPerson AddPersonToSite AddPersonToSlice AddRole AddRoleToPerson AddSiteAddress AddSite AddSliceAttribute AddSliceAttributeType AddSlice AddSliceToNodes AdmAddAddressType AdmAddNodeGroup AdmAddNodeNetwork AdmAddNode AdmAddNodeToNodeGroup AdmAddPerson AdmAddPersonToSite AdmAddSitePowerControlUnit AdmAddSite AdmAssociateNodeToPowerControlUnitPort AdmAuthCheck AdmDeleteAddressType AdmDeleteNodeGroup AdmDeleteNodeNetwork AdmDeleteNode AdmDeletePerson AdmDeleteSitePowerControlUnit AdmDeleteSite AdmDisassociatePowerControlUnitPort AdmGenerateNodeConfFile AdmGetAllAddressTypes AdmGetAllNodeNetworks AdmGetAllRoles AdmGetNodeGroupNodes AdmGetNodeGroups AdmGetNodes AdmGetPersonRoles AdmGetPersonSites AdmGetPersons AdmGetPowerControlUnitNodes AdmGetPowerControlUnits AdmGetSiteNodes AdmGetSitePersons AdmGetSitePowerControlUnits AdmGetSites AdmGrantRoleToPerson AdmIsPersonInRole AdmRebootNode AdmRemoveNodeFromNodeGroup AdmRemovePersonFromSite AdmRevokeRoleFromPerson AdmSetPersonEnabled AdmSetPersonPrimarySite AdmUpdateNodeGroup AdmUpdateNodeNetwork AdmUpdateNode AdmUpdatePerson AdmUpdateSitePowerControlUnit AdmUpdateSite AuthCheck BlacklistKey DeleteAddress DeleteAddressTypeFromAddress DeleteAddressType DeleteBootState DeleteKey DeleteKeyType DeleteNetworkMethod DeleteNetworkType DeleteNodeFromNodeGroup DeleteNodeFromPCU DeleteNodeGroup DeleteNodeNetwork DeleteNode DeletePCU DeletePersonFromSite DeletePersonFromSlice DeletePerson DeleteRoleFromPerson DeleteRole DeleteSite DeleteSliceAttribute DeleteSliceAttributeType DeleteSliceFromNodes DeleteSlice GetAddresses GetAddressTypes GetBootStates GetKeys GetKeyTypes GetNetworkMethods GetNetworkTypes GetNodeGroups GetNodeNetworks GetNodes GetPCUs GetPersons GetRoles GetSites GetSliceAttributes GetSliceAttributeTypes GetSlices RebootNode SetPersonPrimarySite UpdateAddress UpdateAddressType UpdateKey UpdateNodeGroup UpdateNodeNetwork UpdateNode UpdatePCU UpdatePerson UpdateSite UpdateSliceAttribute UpdateSliceAttributeType UpdateSlice  system.listMethods  system.methodHelp  system.methodSignature  system.multicall'.split()
+methods = 'AddAddressType AddAddressTypeToAddress AddBootState AddConfFile AddConfFileToNode AddKeyType AddNetworkMethod AddNetworkType AddNodeGroup AddNodeNetwork AddNode AddNodeToNodeGroup AddNodeToPCU AddPCU AddPersonKey AddPerson AddPersonToSite AddPersonToSlice AddRole AddRoleToPerson AddSiteAddress AddSite AddSliceAttribute AddSliceAttributeType AddSlice AddSliceToNodes AdmAddAddressType AdmAddNodeGroup AdmAddNodeNetwork AdmAddNode AdmAddNodeToNodeGroup AdmAddPersonKey AdmAddPerson AdmAddPersonToSite AdmAddSitePowerControlUnit AdmAddSite AdmAssociateNodeToPowerControlUnitPort AdmAuthCheck AdmDeleteAddressType AdmDeleteAllPersonKeys AdmDeleteNodeGroup AdmDeleteNodeNetwork AdmDeleteNode AdmDeletePersonKeys AdmDeletePerson AdmDeleteSitePowerControlUnit AdmDeleteSite AdmDisassociatePowerControlUnitPort AdmGenerateNodeConfFile AdmGetAllAddressTypes AdmGetAllKeyTypes AdmGetAllNodeNetworks AdmGetAllRoles AdmGetNodeGroupNodes AdmGetNodeGroups AdmGetNodes AdmGetPersonKeys AdmGetPersonRoles AdmGetPersonSites AdmGetPersons AdmGetPowerControlUnitNodes AdmGetPowerControlUnits AdmGetSiteNodes AdmGetSitePersons AdmGetSitePIs AdmGetSitePowerControlUnits AdmGetSites AdmGetSiteTechContacts AdmGrantRoleToPerson AdmIsPersonInRole AdmQueryConfFile AdmQueryNode AdmQueryPerson AdmQueryPowerControlUnit AdmQuerySite AdmRebootNode AdmRemoveNodeFromNodeGroup AdmRemovePersonFromSite AdmRevokeRoleFromPerson AdmSetPersonEnabled AdmSetPersonPrimarySite AdmUpdateNodeGroup AdmUpdateNodeNetwork AdmUpdateNode AdmUpdatePerson AdmUpdateSitePowerControlUnit AdmUpdateSite AuthCheck BlacklistKey DeleteAddress DeleteAddressTypeFromAddress DeleteAddressType DeleteBootState DeleteConfFile DeleteKey DeleteKeyType DeleteNetworkMethod DeleteNetworkType DeleteNodeFromNodeGroup DeleteNodeFromPCU DeleteNodeGroup DeleteNodeNetwork DeleteNode DeletePCU DeletePersonFromSite DeletePersonFromSlice DeletePerson DeleteRoleFromPerson DeleteRole DeleteSite DeleteSliceAttribute DeleteSliceAttributeType DeleteSliceFromNodes DeleteSlice GetAddresses GetAddressTypes GetBootStates GetConfFiles GetEvents GetKeys GetKeyTypes GetNetworkMethods GetNetworkTypes GetNodeGroups GetNodeNetworks GetNodes GetPCUs GetPersons GetRoles GetSites GetSliceAttributes GetSliceAttributeTypes GetSlices GetSlivers RebootNode SetPersonPrimarySite SliceCreate SliceDelete UpdateAddress UpdateAddressType UpdateConfFile UpdateKey UpdateNodeGroup UpdateNodeNetwork UpdateNode UpdatePCU UpdatePerson UpdateSite UpdateSliceAttribute UpdateSliceAttributeType UpdateSlice  system.listMethods  system.methodHelp  system.methodSignature  system.multicall'.split()