/usr/share/pyshared/ZSI/twisted/reverse.py is in python-zsi 2.1~a1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | ###########################################################################
# Joshua R. Boverhof, LBNL
# See Copyright for copyright notice!
# $Id: $
###########################################################################
from ZSI import _get_element_nsuri_name, SoapWriter, ParsedSoap
from interfaces import HandlerChainInterface
from zope.interface import classProvides, implements, Interface
class DataHandler:
""" str --> ps, sw --> str
class variables:
readerClass -- factory class to create reader for ParsedSoap instances.
"""
classProvides(HandlerChainInterface)
readerClass = None
@classmethod
def processRequest(cls, input, **kw):
return ParsedSoap(input, readerclass=cls.readerClass)
@classmethod
def processResponse(cls, sw, **kw):
return str(sw)
class CallbackHandler:
""" ps --> pyobj, pyobj --> sw
class variables:
writerClass -- ElementProxy implementation to use for SoapWriter instances.
"""
classProvides(HandlerChainInterface)
writerClass = None
@classmethod
def processRequest(cls, ps, **kw):
"""invokes callback that should return a (request,response) tuple.
representing the SOAP request and response respectively.
ps -- ParsedSoap instance representing HTTP Body.
request -- twisted.web.server.Request
"""
resource = kw['resource']
request = kw['request']
method = getattr(resource, 'soap_%s' %
_get_element_nsuri_name(ps.body_root)[-1])
try:
req,rsp = method(ps, request=request)
except Exception, ex:
raise
return rsp
@classmethod
def processResponse(cls, output, **kw):
sw = SoapWriter(outputclass=cls.writerClass)
sw.serialize(output)
return sw
class ReverseHandlerChain:
def __init__(self, *handlers):
self.in_handlers = handlers
handlers = list(handlers); handlers.reverse()
self.out_handlers = tuple(handlers)
def processRequest(self, arg, **kw):
for h in self.in_handlers:
arg = h.processRequest(arg, **kw)
return arg
def processResponse(self, arg, **kw):
if arg is None:
return
for h in self.out_handlers:
arg = h.processResponse(arg, **kw)
return arg
class ReverseHandlerChainFactory:
protocol = ReverseHandlerChain
@classmethod
def newInstance(cls):
return cls.protocol(DataHandler, CallbackHandler)
|