0

私は動作中の web.py アプリケーションと動作中の Spyne アプリケーションを持っています。特定の URL に一致するときに、spyne アプリへの web.py ルート リクエストを作成したいと思います。

web.py docs に従ってラッパーを試しましたが、うまくいきませんでした。

myspyne.py で:

import logging
logging.basicConfig(level=logging.DEBUG)
from spyne.application import Application
from spyne.decorator import srpc
from spyne.service import ServiceBase
from spyne.model.primitive import Integer
from spyne.model.primitive import Unicode
from spyne.model.complex import Iterable
from spyne.protocol.soap import Soap11

class HelloWorldService(ServiceBase):
    @srpc(Unicode, Integer, _returns=Iterable(Unicode))
    def say_hello(name, times):
        for i in range(times):
            yield 'Hello, %s' % name

application = Application([HelloWorldService],
                      tns='my.custom.ns',
                      in_protocol=Soap11(validator='lxml'),
                      out_protocol=Soap11())

myweb.py で:

urls = (
    '/', 'index',
    '/myspyne/(.*)', myspyne.application, # this does not work
)

class index:
    def GET(self):
        return "hello"

app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc()
if __name__ == '__main__':
    app.run()
4

1 に答える 1

1

web.py トランスポートを実装するか、web.py から wsgi アプリケーションを公開する方法を見つける必要があります。リンク先のドキュメントは非常に古いものです (私には数十年前のようです:))。

私は web.py の経験がまったくありません。しかし、そのドキュメントの web.py 部分に基づいて、これはうまくいく可能性があります:

def start_response(status, headers):
    web.ctx.status = status
    for header, value in headers:
        web.header(header, value)


class WebPyTransport(WsgiApplication):
    """Class for web.py """
    def GET(self):
        response = self(web.ctx.environ, start_response)
        return render("\n".join(response))

    def POST(self):
        response = self(web.ctx.environ, start_response)
        return render("\n".join(response))

これにより、次を使用できます。

application = Application(...)
webpy_app = WebPyTransport(application)

したがって、次のurlsようになります。

urls = (
    '/', 'index',
    '/myspyne/(.*)', myspyne.webpy_app,
)

それが役立つことを願っています。

于 2013-07-20T11:07:01.297 に答える