对于SPYE的扩展,因此您可以使用委托类轻松地覆盖服务。
spyne-delegate的Python项目详细描述
Spyne的扩展,以便您可以使用委托类轻松重写服务。
示例用法:
importloggingfromwsgiref.simple_serverimportmake_serverfromwsgiref.validateimportvalidatorfromspyneimportApplication,Unicodefromspyneimportrpcasoriginal_spyne_rpcfromspyne.model.compleximportComplexModelfromspyne.protocol.soap.soap11importSoap11fromspyne.server.wsgiimportWsgiApplicationfromspynedelegate.metaimportDelegateBase,ExtensibleServiceBase,rpclogging.basicConfig(level=logging.DEBUG)logger=logging.getLogger(__name__)# modelsclassChicken(ComplexModel):__namespace__="spyne.delegate.chicken"name=UnicodeclassCow(ComplexModel):__namespace__="spyne.delegate.cow"name=Unicode# delegatesclassChickenDelegate(DelegateBase):@rpc(Chicken,_returns=Chicken.customize(max_occurs='unbounded'))defmultiplyChickens(self,chicken):# noqareturn[chicken,chicken]classCowDelegate(DelegateBase):@propertydefmethod_request_string(self):# you can access the context with self.ctxreturnself.ctx.method_request_stringdefgen_name(self,name):# and you can use self as wellreturn"%s -> %s"%(self.method_request_string,name)@rpc(Cow,_returns=Unicode)defsayMooh(self,cow):# noqareturnself.gen_name(cow.name)@rpc(Cow,_returns=Unicode)defnoInheritance(self,cow):# noqa# This method won't be inherited because we set the# collect_base_methods = False in the overridden delegatereturnself.gen_name(cow.name)classCowDelegateOverridden(CowDelegate):# With this property we don't expose inherited methods from the base# classcollect_base_methods=False@rpc(Cow,_returns=Unicode)defsayMooh(self,cow):# noqa# call the super and add a 'overridden' stringresult=super(CowDelegateOverridden,self).sayMooh(cow)return"%s overridden"%result@rpc(Unicode,_returns=Unicode)defgenerateName(self,name):# shows that we call a regular supermethodreturnsuper(CowDelegateOverridden,self).gen_name(name)# inheritanceclassFarmDelegate(ChickenDelegate,CowDelegateOverridden):pass# servicesclassChickenService(ExtensibleServiceBase):delegate=ChickenDelegateclassFarmService(ExtensibleServiceBase):delegate=FarmDelegate@original_spyne_rpc(_returns=Unicode)defthisStillWorks(ctx):# noqareturn"Old fashioned spyne"farm_application=Application([FarmService],tns='spyne.delegate.farm',name='farm-application',in_protocol=Soap11(validator='lxml'),out_protocol=Soap11())if__name__=="__main__":wsgi_application=WsgiApplication(farm_application)wsgi_server=make_server('localhost',9876,validator(wsgi_application))logger.info('Starting server at %s:%s.'%('localhost',9876))logger.info('WSDL is at: /?wsdl')wsgi_server.serve_forever()