X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=util%2Fgeniclient.py;h=2de52e2ffdd8a29604b01553a8fe270c2d1a7e10;hb=0cba0ea72c986e2108436e447662d96006fa4638;hp=c85b8c11d0037ef10459bc0eb93ea1c9cb327dab;hpb=fd8cac7d5f321443fe93a4f39f3f3e318c1a339c;p=sfa.git diff --git a/util/geniclient.py b/util/geniclient.py index c85b8c11..2de52e2f 100644 --- a/util/geniclient.py +++ b/util/geniclient.py @@ -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): + try: + return xmlrpclib.Unmarshaller.close(self) + except xmlrpclib.Fault, e: + raise ServerException(e.faultString) # GeniTransport # @@ -33,6 +49,11 @@ class GeniTransport(xmlrpclib.Transport): else: return httplib.HTTPS(host, None, key_file=self.key_file, cert_file=self.cert_file) #**(x509 or {})) + def getparser(self): + unmarshaller = ExceptionUnmarshaller() + parser = xmlrpclib.ExpatParser(unmarshaller) + return parser, unmarshaller + # GeniClient: # # Class for performing GeniClient operations. @@ -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 +