added tickets
[sfa.git] / util / geniclient.py
index c85b8c1..2de52e2 100644 (file)
@@ -11,6 +11,22 @@ import xmlrpclib
 from gid import *
 from credential import *
 from record import *
+from geniticket import *
+
+# ServerException, ExceptionUnmarshaller
+#
+# Used to convert server exception strings back to an exception.
+#    from usenet, Raghuram Devarakonda
+
+class ServerException(Exception):
+    pass
+
+class ExceptionUnmarshaller(xmlrpclib.Unmarshaller):
+    def close(self):\r
+        try:\r
+            return xmlrpclib.Unmarshaller.close(self)\r
+        except xmlrpclib.Fault, e:\r
+            raise ServerException(e.faultString)
 
 # GeniTransport
 #
@@ -33,6 +49,11 @@ class GeniTransport(xmlrpclib.Transport):
         else:\r
             return httplib.HTTPS(host, None, key_file=self.key_file, cert_file=self.cert_file) #**(x509 or {}))\r
 \r
+    def getparser(self): \r
+        unmarshaller = ExceptionUnmarshaller() \r
+        parser = xmlrpclib.ExpatParser(unmarshaller) \r
+        return parser, unmarshaller\r
+\r
 # GeniClient:\r
 #\r
 # Class for performing GeniClient operations.\r
@@ -48,7 +69,15 @@ class GeniClient():
        self.transport = GeniTransport()
        self.transport.key_file = self.key_file
        self.transport.cert_file = self.cert_file
-       self.server = xmlrpclib.ServerProxy(self.url, self.transport)
+       self.server = xmlrpclib.ServerProxy(self.url, self.transport, allow_none=True)
+
+    # -------------------------------------------------------------------------
+    # Registry Interface
+    # -------------------------------------------------------------------------
+
+    def create_gid(self, cred, name, uuid, pkey_string):
+        gid_str = self.server.create_gid(cred.save_to_string(save_parents=True), name, uuid, pkey_string)
+        return GID(string=gid_str)
 
     def get_gid(self, name):
        gid_str_list = self.server.get_gid(name)
@@ -64,17 +93,72 @@ class GeniClient():
     # get_credential(..., cred=None,...)
 
     def get_self_credential(self, type, name):
-       cred_str = self.server.get_self_credential(type, name)
-       return Credential(string = cred_str)
+        cred_str = self.server.get_self_credential(type, name)
+        return Credential(string = cred_str)
 
     def get_credential(self, cred, type, name):
-       cred_str = self.server.get_credential(cred.save_to_string(), type, name)
-       return Credential(string = cred_str)
+        if cred == None:
+            return self.get_self_credential(type, name)
+        cred_str = self.server.get_credential(cred.save_to_string(save_parents=True), type, name)
+        return Credential(string = cred_str)
+
+    def list(self, cred):
+        result_dict_list = self.server.list(cred.save_to_string(save_parents=True))
+        result_rec_list = []
+        for dict in result_dict_list:
+             result_rec_list.append(GeniRecord(dict=dict))
+        return result_rec_list
+
+    def register(self, cred, record):
+        gid_str = self.server.register(cred.save_to_string(save_parents=True), record.as_dict())
+        return GID(string = gid_str)
+
+    def remove(self, cred, record):
+        result = self.server.remove(cred.save_to_string(save_parents=True), record.as_dict())
+        return result
 
     def resolve(self, cred, name):
-       result_dict_list = self.server.resolve(cred.save_to_string(), name)
-       result_rec_list = []
-       for dict in result_dict_list:
-            result_rec_list.append(GeniRecord(dict=dict))
-       return result_rec_list
+        result_dict_list = self.server.resolve(cred.save_to_string(save_parents=True), name)
+        result_rec_list = []
+        for dict in result_dict_list:
+             result_rec_list.append(GeniRecord(dict=dict))
+        return result_rec_list
+
+    def update(self, cred, record):
+        result = self.server.update(cred.save_to_string(save_parents=True), record.as_dict())
+        return result
+
+    # ------------------------------------------------------------------------
+    # Slice Interface
+    # ------------------------------------------------------------------------
+
+    def start_slice(self, cred):
+        result = self.server.start_slice(cred.save_to_string(save_parents=True))
+        return result
+
+    def stop_slice(self, cred):
+        result = self.server.stop_slice(cred.save_to_string(save_parents=True))
+        return result
+
+    def reset_slice(self, cred):
+        result = self.server.reset_slice(cred.save_to_string(save_parents=True))
+        return result
+
+    def delete_slice(self, cred):
+        result = self.server.delete_slice(cred.save_to_string(save_parents=True))
+        return result
+
+    def list_slices(self, cred):
+        result = self.server.list_slices(cred.save_to_string(save_parents=True))
+        return result
+
+    def get_ticket(self, cred, name, rspec):
+        ticket_str = self.server.get_ticket(cred.save_to_string(save_parents=True), name, rspec)
+        ticket = Ticket(string=ticket_str)
+        return ticket
+
+    def redeem_ticket(self, ticket):
+        result = self.server.redeem_ticket(ticket.save_to_string(save_parents=True))
+        return result
+