2014-02-15 29 views
0

在我剛開始使用Spyne並試圖用ComplexModel作爲參數的一種方法。我大多沿用來自源的user_manager例如與spyne < 2.99,但做client.factory.create()調用時,我總是得到一個類型錯誤。ComplexModel不可用客戶端

失敗

示例代碼:

from spyne.application import Application 
from spyne.decorator import rpc 
from spyne.service import ServiceBase 
from spyne.protocol.soap import Soap11 
from spyne.model.primitive import String, Integer 
from spyne.model.complex import ComplexModel 

class DatosFac(ComplexModel): 
    __namespace__ = 'facturamanager.datosfac' 
    numero = String(pattern=r'[A-Z]/[0-9]+') 

class FacturaService(ServiceBase): 
    @rpc(String, DatosFac, _returns=Integer) 
    def updateFacData(self, numero, data): 
     # do stuff 
     return 1 

application = Application([FacturaService], 'facturaManager.service', 
     in_protocol=Soap11(validator='lxml'), 
     out_protocol=Soap11() 
    ) 

from spyne.server.null import NullServer 
s = NullServer(application) 
data = s.factory.create('DatosFac') 

如果你運行該代碼,您可以:

Traceback (most recent call last): 
    File "spyner.py", line 25, in <module> 
    data = s.factory.create('DatosFac') 
    File "/Users/marc/.pyEnvs/default/lib/python2.7/site-packages/spyne/client/_base.py", line 30, in create 
    return self.__app.interface.get_class_instance(object_name) 
    File "/Users/marc/.pyEnvs/default/lib/python2.7/site-packages/spyne/interface/_base.py", line 114, in get_class_instance 
    return self.classes[key]() 
KeyError: 'DatosFac' 

(我用NullServer,使其更容易複製,但同樣的情況發生在肥皂+ WSGI )。

我AMB幾乎停留在此,我看不出有什麼從這個代碼和user_manager例子essentialy不同。

我在做什麼錯?

感謝, 馬克

回答

0

感謝您提供一個完全工作的例子。

不同的是,TNS和DatosFac的名稱空間是不同的。

要麼是:

data = s.factory.create('{facturamanager.datosfac}DatosFac') 

DatosFac定義中刪除__namespace__

+0

這工作,謝謝! ;) –

相關問題