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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from ZSI import _copyright, _child_elements, EvaluateException, TC
  5. import multifile
  6. import mimetools
  7. import urllib
  8. from base64 import decodestring as b64decode
  9. import cStringIO as StringIO
  10.  
  11. def Opaque(uri, tc, ps, **keywords):
  12.     source = urllib.urlopen(uri, **keywords)
  13.     enc = source.info().getencoding()
  14.     if enc in ('7bit', '8bit', 'binary'):
  15.         return source.read()
  16.     data = StringIO.StringIO()
  17.     mimetools.decode(source, data, enc)
  18.     return data.getvalue()
  19.  
  20.  
  21. def XML(uri, tc, ps, **keywords):
  22.     source = urllib.urlopen(uri, **keywords)
  23.     enc = source.info().getencoding()
  24.     if enc in ('7bit', '8bit', 'binary'):
  25.         data = source
  26.     else:
  27.         data = StringIO.StringIO()
  28.         mimetools.decode(source, data, enc)
  29.         data.seek(0)
  30.     dom = ps.readerclass().fromStream(data)
  31.     return _child_elements(dom)[0]
  32.  
  33.  
  34. class NetworkResolver:
  35.     
  36.     def __init__(self, prefix = None):
  37.         if not prefix:
  38.             pass
  39.         self.allowed = []
  40.  
  41.     
  42.     def _check_allowed(self, uri):
  43.         for a in self.allowed:
  44.             if uri.startswith(a):
  45.                 return None
  46.         
  47.         raise EvaluateException('Disallowed URI prefix')
  48.  
  49.     
  50.     def Opaque(self, uri, tc, ps, **keywords):
  51.         self._check_allowed(uri)
  52.         return Opaque(uri, tc, ps, **keywords)
  53.  
  54.     
  55.     def XML(self, uri, tc, ps, **keywords):
  56.         self._check_allowed(uri)
  57.         return XML(uri, tc, ps, **keywords)
  58.  
  59.     
  60.     def Resolve(self, uri, tc, ps, **keywords):
  61.         if isinstance(tc, TC.XML):
  62.             return XML(uri, tc, ps, **keywords)
  63.         return Opaque(uri, tc, ps, **keywords)
  64.  
  65.  
  66.  
  67. class MIMEResolver:
  68.     
  69.     def __init__(self, ct, f, next = None, uribase = 'thismessage:/', seekable = 0, **kw):
  70.         for param in ct.split(';'):
  71.             a = param.strip()
  72.             if a.startswith('boundary='):
  73.                 if a[9] in ('"', "'"):
  74.                     boundary = a[10:-1]
  75.                 else:
  76.                     boundary = a[9:]
  77.                 break
  78.                 continue
  79.         else:
  80.             raise ValueError('boundary parameter not found')
  81.         self.id_dict = None
  82.         self.loc_dict = { }
  83.         self.parts = []
  84.         self.next = next
  85.         self.base = uribase
  86.         mf = multifile.MultiFile(f, seekable)
  87.         mf.push(boundary)
  88.         while mf.next():
  89.             head = mimetools.Message(mf)
  90.             body = StringIO.StringIO()
  91.             mimetools.decode(mf, body, head.getencoding())
  92.             body.seek(0)
  93.             part = (head, body)
  94.             self.parts.append(part)
  95.             key = head.get('content-id')
  96.             if key:
  97.                 if key[0] == '<' and key[-1] == '>':
  98.                     key = key[1:-1]
  99.                 
  100.                 self.id_dict[key] = part
  101.             
  102.             key = head.get('content-location')
  103.             if key:
  104.                 self.loc_dict[key] = part
  105.                 continue
  106.         mf.pop()
  107.  
  108.     
  109.     def GetSOAPPart(self):
  110.         (head, part) = self.parts[0]
  111.         return StringIO.StringIO(part.getvalue())
  112.  
  113.     
  114.     def get(self, uri):
  115.         if uri.startswith('cid:'):
  116.             (head, part) = self.id_dict[uri[4:]]
  117.             return StringIO.StringIO(part.getvalue())
  118.         if self.loc_dict.has_key(uri):
  119.             (head, part) = self.loc_dict[uri]
  120.             return StringIO.StringIO(part.getvalue())
  121.  
  122.     
  123.     def Opaque(self, uri, tc, ps, **keywords):
  124.         content = self.get(uri)
  125.         if content:
  126.             return content.getvalue()
  127.         if not self.next:
  128.             raise EvaluateException('Unresolvable URI ' + uri)
  129.         self.next
  130.         return self.next.Opaque(uri, tc, ps, **keywords)
  131.  
  132.     
  133.     def XML(self, uri, tc, ps, **keywords):
  134.         content = self.get(uri)
  135.         if content:
  136.             dom = ps.readerclass().fromStream(content)
  137.             return _child_elements(dom)[0]
  138.         if not self.next:
  139.             raise EvaluateException('Unresolvable URI ' + uri)
  140.         self.next
  141.         return self.next.XML(uri, tc, ps, **keywords)
  142.  
  143.     
  144.     def Resolve(self, uri, tc, ps, **keywords):
  145.         if isinstance(tc, TC.XML):
  146.             return self.XML(uri, tc, ps, **keywords)
  147.         return self.Opaque(uri, tc, ps, **keywords)
  148.  
  149.     
  150.     def __getitem__(self, cid):
  151.         (head, body) = self.id_dict[cid]
  152.         newio = StringIO.StringIO(body.getvalue())
  153.         return newio
  154.  
  155.  
  156. if __name__ == '__main__':
  157.     print _copyright
  158.  
  159.