2013-07-20 81 views
0

我有一個可用的web.py應用程序和一個可用的Spyne應用程序。我想在匹配特定網址時向spyne應用發送web.py路由請求。如何從web.py運行Spyne應用程序?

我試着用包裝as per 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() 

回答

1

你需要實現一個web.py運輸,或找到一種方法,從暴露的wsgi web.py應用。你鏈接到的文檔是非常古老的(幾十年前似乎:))。

我對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, 
) 

希望這有助於。

+0

沒有:(這可能是在web.py中的子應用程序支持的問題,它看起來像「'模式',module.subapp」形式根本不起作用(至少它不與其他wsgi應用程序,也許它需要特殊的web.py應用程序)我想我必須並行運行這兩個應用程序,並使用其他方式在呼叫之前路由到web.py.謝謝! –

相關問題