add messages table and interface
authorMark Huang <mlhuang@cs.princeton.edu>
Fri, 3 Nov 2006 16:05:31 +0000 (16:05 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Fri, 3 Nov 2006 16:05:31 +0000 (16:05 +0000)
PLC/Methods/AddMessage.py [new file with mode: 0644]
PLC/Methods/DeleteMessage.py [new file with mode: 0644]
PLC/Methods/GetMessages.py [new file with mode: 0644]
PLC/Methods/UpdateMessage.py [new file with mode: 0644]
PLC/Methods/__init__.py
PLC/__init__.py
planetlab4.sql

diff --git a/PLC/Methods/AddMessage.py b/PLC/Methods/AddMessage.py
new file mode 100644 (file)
index 0000000..6108f9b
--- /dev/null
@@ -0,0 +1,32 @@
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter
+from PLC.Messages import Message, Messages
+from PLC.Auth import Auth
+
+class AddMessage(Method):
+    """
+    Adds a new message template. Any values specified in
+    message_fields are used, otherwise defaults are used.
+
+    Returns 1 if successful, faults otherwise.
+    """
+
+    roles = ['admin']
+
+    accepts = [
+        Auth(),
+        Message.fields,
+        ]
+
+    returns = Parameter(int, '1 if successful')
+
+    event_type = 'Add'
+    object_type = 'Message'
+    object_ids = []
+
+    def call(self, auth, message_fields):
+        message = Message(self.api, message_fields)
+        message.sync(insert = True)
+
+        return 1
diff --git a/PLC/Methods/DeleteMessage.py b/PLC/Methods/DeleteMessage.py
new file mode 100644 (file)
index 0000000..40e5af2
--- /dev/null
@@ -0,0 +1,32 @@
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Messages import Message, Messages
+from PLC.Auth import Auth
+
+class DeleteMessage(Method):
+    """
+    Deletes a message template.
+
+    Returns 1 if successful, faults otherwise.
+    """
+
+    roles = ['admin']
+
+    accepts = [
+        Auth(),
+        Message.fields['message_id'],
+        ]
+
+    returns = Parameter(int, '1 if successful')
+
+    def call(self, auth, message_id):
+        # Get message information
+        messages = Messages(self.api, [message_id]).values()
+        if not messages:
+            raise PLCInvalidArgument, "No such message"
+        message = messages[0]
+
+        message.delete()
+
+        return 1
diff --git a/PLC/Methods/GetMessages.py b/PLC/Methods/GetMessages.py
new file mode 100644 (file)
index 0000000..12bd315
--- /dev/null
@@ -0,0 +1,28 @@
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter
+from PLC.Messages import Message, Messages
+from PLC.Auth import Auth
+
+class GetMessages(Method):
+    """
+    Return an array of structs containing details about message
+    templates. If message_ids is specified, only the specified
+    messages will be queried.
+    """
+
+    roles = ['admin']
+
+    accepts = [
+        Auth(),
+        [Message.fields['message_id']],
+        ]
+
+    returns = [Message.fields]
+
+    event_type = 'Get'
+    object_type = 'Message'
+    object_ids = []
+
+    def call(self, auth, message_ids = None):
+        return Messages(self.api, message_ids).values()
diff --git a/PLC/Methods/UpdateMessage.py b/PLC/Methods/UpdateMessage.py
new file mode 100644 (file)
index 0000000..261eaeb
--- /dev/null
@@ -0,0 +1,42 @@
+from PLC.Faults import *
+from PLC.Method import Method
+from PLC.Parameter import Parameter, Mixed
+from PLC.Messages import Message, Messages
+from PLC.Auth import Auth
+
+can_update = lambda (field, value): field in \
+             ['template', 'enabled']
+
+class UpdateMessage(Method):
+    """
+    Updates the parameters of an existing message template with the
+    values in message_fields.
+
+    Returns 1 if successful, faults otherwise.
+    """
+
+    roles = ['admin']
+
+    message_fields = dict(filter(can_update, Message.fields.items()))
+
+    accepts = [
+        Auth(),
+        Message.fields['message_id'],
+        message_fields
+        ]
+
+    returns = Parameter(int, '1 if successful')
+
+    def call(self, auth, message_id, message_fields):
+        message_fields = dict(filter(can_update, message_fields.items()))
+
+        # Get message information
+        messages = Messages(self.api, [message_id]).values()
+        if not messages:
+            raise PLCInvalidArgument, "No such message"
+        message = messages[0]
+
+        message.update(message_fields)
+        message.sync()
+
+        return 1
index b2d47ea..a54ea41 100644 (file)
@@ -1 +1 @@
-methods = 'AddAddressType AddAddressTypeToAddress AddBootState AddConfFile AddConfFileToNodeGroup 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 BootCheckAuthentication BootGetNodeDetails BootUpdateNode DeleteAddress DeleteAddressTypeFromAddress DeleteAddressType DeleteBootState DeleteConfFileFromNodeGroup DeleteConfFileFromNode DeleteConfFile DeleteKey DeleteKeyType DeleteNetworkMethod DeleteNetworkType DeleteNodeFromNodeGroup DeleteNodeFromPCU DeleteNodeGroup DeleteNodeNetwork DeleteNode DeletePCU DeletePersonFromSite DeletePersonFromSlice DeletePerson DeleteRoleFromPerson DeleteRole DeleteSession DeleteSite DeleteSliceAttribute DeleteSliceAttributeType DeleteSliceFromNodes DeleteSlice GetAddresses GetAddressTypes GetBootStates GetConfFiles GetEvents GetKeys GetKeyTypes GetNetworkMethods GetNetworkTypes GetNodeGroups GetNodeNetworks GetNodes GetPCUs GetPersons GetRoles GetSession 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()
+methods = 'AddAddressType AddAddressTypeToAddress AddBootState AddConfFile AddConfFileToNodeGroup AddConfFileToNode AddKeyType AddMessage 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 BootCheckAuthentication BootGetNodeDetails BootNotifyOwners BootUpdateNode DeleteAddress DeleteAddressTypeFromAddress DeleteAddressType DeleteBootState DeleteConfFileFromNodeGroup DeleteConfFileFromNode DeleteConfFile DeleteKey DeleteKeyType DeleteMessage DeleteNetworkMethod DeleteNetworkType DeleteNodeFromNodeGroup DeleteNodeFromPCU DeleteNodeGroup DeleteNodeNetwork DeleteNode DeletePCU DeletePersonFromSite DeletePersonFromSlice DeletePerson DeleteRoleFromPerson DeleteRole DeleteSession DeleteSite DeleteSliceAttribute DeleteSliceAttributeType DeleteSliceFromNodes DeleteSlice GetAddresses GetAddressTypes GetBootStates GetConfFiles GetEvents GetKeys GetKeyTypes GetMessages GetNetworkMethods GetNetworkTypes GetNodeGroups GetNodeNetworks GetNodes GetPCUs GetPersons GetRoles GetSession GetSites GetSliceAttributes GetSliceAttributeTypes GetSlices GetSlivers RebootNode SetPersonPrimarySite SliceCreate SliceDelete UpdateAddress UpdateAddressType UpdateConfFile UpdateKey UpdateMessage UpdateNodeGroup UpdateNodeNetwork UpdateNode UpdatePCU UpdatePerson UpdateSite UpdateSliceAttribute UpdateSliceAttributeType UpdateSlice  system.listMethods  system.methodHelp  system.methodSignature  system.multicall'.split()
index 6916831..53ddb6b 100644 (file)
@@ -1 +1 @@
-all = 'Addresses AddressTypes API Auth BootStates ConfFiles Config Debug Events Faults Keys KeyTypes Method NetworkMethods NetworkTypes NodeGroups NodeNetworks Nodes Parameter PCUs Persons POD PostgreSQL Roles Sessions Sites SliceAttributes SliceAttributeTypes SliceInstantiations Slices Table'.split()
+all = 'Addresses AddressTypes API Auth BootStates ConfFiles Config Debug Events Faults Keys KeyTypes Messages Method NetworkMethods NetworkTypes NodeGroups NodeNetworks Nodes Parameter PCUs Persons POD PostgreSQL Roles Sessions Sites SliceAttributes SliceAttributeTypes SliceInstantiations Slices Table'.split()
index 90c095b..bb8d1bd 100644 (file)
@@ -9,7 +9,7 @@
 --
 -- Copyright (C) 2006 The Trustees of Princeton University
 --
--- $Id: planetlab4.sql,v 1.24 2006/10/27 15:31:28 mlhuang Exp $
+-- $Id: planetlab4.sql,v 1.25 2006/10/31 21:45:45 mlhuang Exp $
 --
 
 --------------------------------------------------------------------------------
@@ -630,6 +630,16 @@ CREATE TABLE node_session (
     UNIQUE (session_id) -- Sessions are unique
 ) WITH OIDS;
 
+--------------------------------------------------------------------------------
+-- Message templates
+--------------------------------------------------------------------------------
+
+CREATE TABLE messages (
+    message_id text PRIMARY KEY, -- Message name
+    template text, -- Message template
+    enabled bool NOT NULL DEFAULT true -- Whether message is enabled
+) WITH OIDS;
+
 --------------------------------------------------------------------------------
 -- Events
 --------------------------------------------------------------------------------