home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / ZSI / writer.pyo (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  5.1 KB  |  169 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from ZSI import _copyright, _get_idstr, ZSI_SCHEMA_URI
  5. from ZSI import _backtrace, _stringtypes, _seqtypes
  6. from ZSI.wstools.Utility import MessageInterface, ElementProxy
  7. from ZSI.wstools.Namespaces import XMLNS, SOAP, SCHEMA
  8. from ZSI.wstools.c14n import Canonicalize
  9. import types
  10. _standard_ns = [
  11.     ('xml', XMLNS.XML),
  12.     ('xmlns', XMLNS.BASE)]
  13. _reserved_ns = {
  14.     'SOAP-ENV': SOAP.ENV,
  15.     'SOAP-ENC': SOAP.ENC,
  16.     'ZSI': ZSI_SCHEMA_URI,
  17.     'xsd': SCHEMA.BASE,
  18.     'xsi': SCHEMA.BASE + '-instance' }
  19.  
  20. class SoapWriter:
  21.     
  22.     def __init__(self, envelope = True, encodingStyle = None, header = True, nsdict = { }, outputclass = None, **kw):
  23.         if not outputclass:
  24.             pass
  25.         outputclass = ElementProxy
  26.         if not issubclass(outputclass, MessageInterface):
  27.             raise TypeError, 'outputclass must subclass MessageInterface'
  28.         issubclass(outputclass, MessageInterface)
  29.         self.dom = outputclass(self)
  30.         self.memo = []
  31.         self.nsdict = nsdict
  32.         self.envelope = envelope
  33.         self.encodingStyle = encodingStyle
  34.         self.header = header
  35.         self.body = None
  36.         self.callbacks = []
  37.         self.closed = False
  38.  
  39.     
  40.     def __str__(self):
  41.         self.close()
  42.         return str(self.dom)
  43.  
  44.     
  45.     def getSOAPHeader(self):
  46.         if self.header in (True, False):
  47.             return None
  48.         return self.header
  49.  
  50.     
  51.     def serialize_header(self, pyobj, typecode = None, **kw):
  52.         kw['unique'] = True
  53.         soap_env = _reserved_ns['SOAP-ENV']
  54.         header = self._header
  55.         if header is None:
  56.             header = self._header = self.dom.createAppendElement(soap_env, 'Header')
  57.         
  58.         typecode = getattr(pyobj, 'typecode', typecode)
  59.         if typecode is None:
  60.             raise RuntimeError('typecode is required to serialize pyobj in header')
  61.         typecode is None
  62.         helt = typecode.serialize(header, self, pyobj, **kw)
  63.  
  64.     
  65.     def serialize(self, pyobj, typecode = None, root = None, header_pyobjs = (), **kw):
  66.         self.body = None
  67.         if self.envelope:
  68.             soap_env = _reserved_ns['SOAP-ENV']
  69.             self.dom.createDocument(soap_env, 'Envelope')
  70.             for prefix, nsuri in _reserved_ns.items():
  71.                 self.dom.setNamespaceAttribute(prefix, nsuri)
  72.             
  73.             self.writeNSdict(self.nsdict)
  74.             if self.encodingStyle:
  75.                 self.dom.setAttributeNS(soap_env, 'encodingStyle', self.encodingStyle)
  76.             
  77.             if self.header:
  78.                 self._header = self.dom.createAppendElement(soap_env, 'Header')
  79.                 for h in header_pyobjs:
  80.                     self.serialize_header(h, **kw)
  81.                 
  82.             
  83.             self.body = self.dom.createAppendElement(soap_env, 'Body')
  84.         else:
  85.             self.dom.createDocument(None, None)
  86.         if typecode is None:
  87.             typecode = pyobj.__class__.typecode
  88.         
  89.         if self.body is None:
  90.             elt = typecode.serialize(self.dom, self, pyobj, **kw)
  91.         else:
  92.             elt = typecode.serialize(self.body, self, pyobj, **kw)
  93.         if root is not None:
  94.             if root not in (0, 1):
  95.                 raise ValueError, 'SOAP-ENC root attribute not in [0,1]'
  96.             root not in (0, 1)
  97.             elt.setAttributeNS(SOAP.ENC, 'root', root)
  98.         
  99.         return self
  100.  
  101.     
  102.     def writeNSdict(self, nsdict):
  103.         for k, v in nsdict.items():
  104.             if (k, v) in _standard_ns:
  105.                 continue
  106.             
  107.             rv = _reserved_ns.get(k)
  108.             if rv:
  109.                 if rv != v:
  110.                     raise KeyError('Reserved namespace ' + str((k, v)) + ' used')
  111.                 rv != v
  112.                 continue
  113.             
  114.             if k:
  115.                 self.dom.setNamespaceAttribute(k, v)
  116.                 continue
  117.             self.dom.setNamespaceAttribute('xmlns', v)
  118.         
  119.  
  120.     
  121.     def ReservedNS(self, prefix, uri):
  122.         return _reserved_ns.get(prefix, uri) != uri
  123.  
  124.     
  125.     def AddCallback(self, func, *arglist):
  126.         self.callbacks.append((func, arglist))
  127.  
  128.     
  129.     def Known(self, obj):
  130.         obj = _get_idstr(obj)
  131.         if obj in self.memo:
  132.             return 1
  133.         self.memo.append(obj)
  134.         return 0
  135.  
  136.     
  137.     def Forget(self, obj):
  138.         obj = _get_idstr(obj)
  139.         
  140.         try:
  141.             self.memo.remove(obj)
  142.         except ValueError:
  143.             pass
  144.  
  145.  
  146.     
  147.     def Backtrace(self, elt):
  148.         return _backtrace(elt._getNode(), self.dom._getNode())
  149.  
  150.     
  151.     def close(self):
  152.         if self.closed:
  153.             return None
  154.         for func, arglist in self.callbacks:
  155.             apply(func, arglist)
  156.         
  157.         self.closed = True
  158.  
  159.     
  160.     def __del__(self):
  161.         if not self.closed:
  162.             self.close()
  163.         
  164.  
  165.  
  166. if __name__ == '__main__':
  167.     print _copyright
  168.  
  169.