2013-07-20 3 views
0

나는 작동하는 web.py 응용 프로그램과 작동하는 Spyne 응용 프로그램을 가지고 있습니다. 특정 URL과 일치 할 때 spyne 앱에 web.py 라우트 요청을하고 싶습니다.web.py에서 Spyne 애플리케이션을 실행하려면 어떻게해야합니까?

나는 래퍼 as per web.py docs을 사용해 보았지만 행운은 없었다. myspyne.py에서

:

myweb.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()) 

:

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 전송을 구현, 또는 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, 
) 

나는 희망 도움이됩니다.

+0

아니요 (web.py의 하위 응용 프로그램 지원에 문제가있을 수 있습니다. "pattern ', module.subapp"양식이 작동하지 않습니다. (적어도 다른 wsgi와는 호환되지 않습니다. 어쩌면 특별한 web.py 앱이 필요하다.) 나는 두 앱을 병렬로 실행해야하고 web.py를 치기 전에 다른 호출을 사용해야한다. 어쨌든 고마워! –