コード例 #1
0
ファイル: wsgi.py プロジェクト: teratorn/rpclib
    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()
コード例 #2
0
ファイル: twisted_.py プロジェクト: teratorn/rpclib
    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)
コード例 #3
0
ファイル: twisted_.py プロジェクト: teratorn/rpclib
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