def __init__(self, app, chunked=True): HttpBase.__init__(self, app, chunked) self._allowed_http_verbs = app.in_protocol.allowed_http_verbs self._verb_handlers = { "GET": self.handle_rpc, "POST": self.handle_rpc, } self._mtx_build_interface_document = threading.Lock()
def __init__(self, app, chunked=False, max_content_length=2 * 1024 * 1024, block_length=8 * 1024): Resource.__init__(self) self.__http_base = HttpBase(app, chunked, max_content_length, block_length)
class TwistedWebApplication(Resource): """The ZeroMQ server transport.""" isLeaf = True def __init__(self, app, chunked=False, max_content_length=2 * 1024 * 1024, block_length=8 * 1024): Resource.__init__(self) self.__http_base = HttpBase(app, chunked, max_content_length, block_length) def render_GET(self, request): retval = "" if request.uri.endswith('.wsdl') or request.uri.endswith('?wsdl'): retval = self.__handle_wsdl_request(request) elif "get" not in self.__http_base._allowed_http_verbs: request.setResponseCode(405) retval = HTTP_405 else: request.setResponseCode(400) retval = HTTP_400 return retval def render_POST(self, request): initial_ctx = TwistedWebMethodContext(self.__http_base.app, request, self.__http_base.app.out_protocol.mime_type) initial_ctx.in_string = [request.content.getvalue()] ctx, = self.__http_base.generate_contexts(initial_ctx) if ctx.in_error: ctx.out_object = ctx.in_error else: self.__http_base.get_in_object(ctx) if ctx.in_error: ctx.out_object = ctx.in_error else: self.__http_base.get_out_object(ctx) if ctx.out_error: ctx.out_object = ctx.out_error self.__http_base.get_out_string(ctx) return ''.join(ctx.out_string) def __handle_wsdl_request(self, request): ctx = TwistedWebMethodContext(self.app, request, "text/xml; charset=utf-8") url = _reconstruct_url(request) try: ctx.transport.wsdl = self.app.interface.get_interface_document() if ctx.transport.wsdl is None: self.app.interface.build_interface_document(url) ctx.transport.wsdl = self.app.interface.get_interface_document() assert ctx.transport.wsdl != None self.event_manager.fire_event('wsdl', ctx) # implementation hook ctx.transport.resp_headers['Content-Length'] = str(len(ctx.transport.wsdl)) for k,v in ctx.transport.resp_headers.items(): request.setHeader(k,v) return ctx.transport.wsdl except Exception, e: ctx.transport.wsdl_error = e self.event_manager.fire_event('wsdl_exception', ctx) raise