/Users/maurits/Documents/studie/afstuderen/biosphere/python/biosphere/types.py

Go to the documentation of this file.
00001 import base64
00002 import uuid
00003 
00004 """There are several types used by the Bio-SPHERE platform to
00005 model the offered services. Especially the bs_definition and related
00006 classes are very similar in structure to WSDL.
00007 
00008 The bs_service_request and bs_service_response classes are used for
00009 making the actual requests and response. They are similar in function
00010 to SOAP."""
00011 
00012 
00013 class bs_data_type:
00014     """A class representing a data type in the Bio-SPHERE platform."""
00015     
00016     def __init__(self, name):
00017         self.namename = name
00018     
00019     def isBuiltin(self):
00020         """Check whether this type is one builtin types (which are
00021         serialized differently) or a custom type. Returns true if it
00022         is a builtin type.
00023         """
00024         if self.namename == 'bs_bool': return True
00025         elif self.namename == 'bs_string': return True
00026         elif self.namename == 'bs_byte': return True
00027         elif self.namename == 'bs_double': return True
00028         elif self.namename == 'bs_int16': return True
00029         elif self.namename == 'bs_uint16': return True
00030         elif self.namename == 'bs_int32': return True
00031         elif self.namename == 'bs_uint32': return True
00032         elif self.namename == 'bs_int64': return True
00033         elif self.namename == 'bs_uint64': return True
00034         elif self.namename == 'bs_double': return True
00035         else: return False
00036     
00037     def toXML(self):
00038         return '  <type name="%s" />\n' % self.namename
00039 
00040 
00041 class bs_message_part:
00042     """Class representing a message part."""
00043     
00044     def __init__(self, name, type):
00045         self.namename = name
00046         self.typetype = type
00047     
00048     def toXML(self):
00049         return '    <part name="%s" type="%s" />\n' % (self.namename,
00050                                                  self.typetype.name)
00051 
00052 
00053 class bs_message:
00054     """Class representing a message, consisting of several parts."""
00055     
00056     def __init__(self, name, parts=None):
00057         self.namename = name
00058         if parts == None: self.partsparts = []
00059         else: self.partsparts = parts
00060     
00061     def toXML(self):
00062         return '  <message name="%s">\n' % self.namename + \
00063             ''.join([part.toXML() for part in self.partsparts]) + \
00064             '  </message>\n'
00065 
00066 
00067 class bs_operation:
00068     
00069     def __init__(self, name, input=None,
00070                  output=None, fault=None):
00071         self.namename = name
00072         self.inputinput = input
00073         self.outputoutput = output
00074         self.faultfault = fault
00075     
00076     def toXML(self):
00077         ret = '    <operation name="%s">\n' % self.namename
00078         if self.inputinput != None:
00079             ret = ret + '      <input name="%s" />\n' % self.inputinput.name
00080         if self.outputoutput != None:
00081             ret = ret + '      <output name="%s" />\n' % self.outputoutput.name
00082         if self.faultfault != None:
00083             ret = ret + '      <fault name="%s" />\n' % self.faultfault.name
00084         return ret + '    </operation>\n'
00085 
00086 
00087 class bs_port_type:
00088     
00089     def __init__(self, name, operations=None):
00090         self.namename = name
00091         if operations == None: self.operationsoperations = []
00092         else: self.operationsoperations = operations
00093     
00094     def toXML(self):
00095         return '  <portType name="%s">\n' % self.namename + \
00096             ''.join([op.toXML() for op in self.operationsoperations]) + \
00097             '  </portType>\n'
00098 
00099 
00100 class bs_port:
00101     
00102     def __init__(self, name, type):
00103         self.namename = name
00104         self.typetype = type
00105     
00106     def toXML(self):
00107         return '    <port name="%s" type="%s" />\n' % (self.namename,
00108                                                  self.typetype.name)
00109 
00110 class bs_service:
00111     
00112     def __init__(self, name, ports=None):
00113         self.namename = name
00114         if ports == None: self.portsports = []
00115         else: self.portsports = ports
00116     
00117     def toXML(self):
00118         return '  <service name="%s">\n' % self.namename + \
00119             ''.join([port.toXML() for port in self.portsports]) + \
00120             '  </service>\n'
00121 
00122 
00123 class bs_definition:
00124     
00125     def __init__(self, name, types=None, messages=None,
00126                  porttypes=None, services=None):
00127         self.namename = name
00128         if types == None: self.typestypes = []
00129         else: self.typestypes = types
00130         if messages == None: self.messagesmessages = []
00131         else: self.messagesmessages = messages
00132         if porttypes == None: self.porttypesporttypes = []
00133         else: self.porttypesporttypes = porttypes
00134         if services == None: self.servicesservices = []
00135         else: self.servicesservices = services
00136     
00137     def toXML(self):
00138         return '<definitions name="%s">\n' % self.namename + \
00139             ''.join([t.toXML() for t in self.typestypes]) + \
00140             ''.join([m.toXML() for m in self.messagesmessages]) + \
00141             ''.join([p.toXML() for p in self.porttypesporttypes]) + \
00142             ''.join([s.toXML() for s in self.servicesservices]) + \
00143             '</definitions>\n'
00144 
00145 
00146 class bs_part_instance:
00147     
00148     def __init__(self, name, type, data):
00149         self.namename = name
00150         self.typetype = type
00151         self.datadata = data
00152     
00153     def toXML(self):
00154         ret = '    <part name="%s" type="%s">' % (self.namename,
00155                                               self.typetype.name)
00156         if self.typetype.isBuiltin():
00157             ret = ret + str(self.datadata)
00158         else:
00159             ret = ret + base64.b64encode(self.datadata)
00160         return ret + '</part>\n'
00161     
00162 
00163 class bs_message_instance:
00164     
00165     def __init__(self, name, direction='input', parts=None):
00166         self.namename = name
00167         self.directiondirection = direction
00168         if parts == None: self.partsparts = []
00169         else: self.partsparts = parts
00170     
00171     def toXML(self):
00172         return '  <%s message="%s">\n' % (self.directiondirection, self.namename) + \
00173             ''.join([p.toXML() for p in self.partsparts]) + \
00174             '  </%s>\n' % self.directiondirection
00175 
00176 
00177 class bs_service_request:
00178     
00179     def __init__(self, service, port, operation,
00180                  input=None, u=None):
00181         self.serviceservice = service
00182         self.portport = port
00183         self.operationoperation = operation
00184         self.inputinput = input
00185         self.uuiduuid = u
00186         if self.uuiduuid == None:
00187             self.uuiduuid = str(uuid.uuid4())
00188     
00189     def toXML(self):
00190         return '<request uuid="%s">\n' % self.uuiduuid + \
00191             '  <use service="%s" port="%s" operation="%s" />\n' % (self.serviceservice,
00192                                                                self.portport,
00193                                                                self.operationoperation) + \
00194            self.inputinput.toXML() + \
00195            '</request>\n'
00196 
00197 
00198 class bs_service_response:
00199     
00200     def __init__(self, service, port, operation, uuid,
00201                  output=None, fault=None):
00202         self.serviceservice = service
00203         self.portport = port
00204         self.operationoperation = operation
00205         self.outputoutput = output
00206         self.faultfault = fault
00207         self.uuiduuid = uuid
00208     
00209     def toXML(self):
00210         ret = '<response uuid="%s">\n' % self.uuiduuid + \
00211             '  <used service="%s" port="%s" operation="%s" />\n' % (self.serviceservice,
00212                                                                 self.portport,
00213                                                                 self.operationoperation)
00214         if self.outputoutput != None:
00215             ret = ret + self.outputoutput.toXML()
00216         if self.faultfault != None:
00217             ret = ret + self.faultfault.toXML()
00218         return ret + '</response>\n'

Generated on Tue Jul 17 09:50:53 2007 for Bio-SPHERE by  doxygen 1.5.1