Convert django model into soaplib model, to expose webservices

#contrib.soaplib.serializer.py

from soaplib.serializers.clazz import ClassSerializer

class BaseClassSerializer(ClassSerializer):
    '''
    Helper class to convert django model into soaplib model
    
    Constructor read from django model, custom dict, 
    and permit to override parameters using kwargs.

    
    Example:

    #modelsws.py
    
        from contrib.soaplib.serializer import BaseClassSerializer
        from soaplib.serializers.primitive import *
        
        class WsComment(BaseClassSerializer):
            class types:
                content = String 
                rating = Integer
                ratingText = String
    
        class WsBlog(BaseClassSerializer):
            class types:
                title = String
                subtitle = String
                pub_date = DateTime
                replay_to = String 
                content = String
                comments = Array(WsComment)
            
            
    #views.py
    
        from contrib.soaplib.handler import DjangoSoapApp, soapmethod, soap_types
        from foo.models import Blog
        from foo.wsmodels import WsBlog
        from foo.wsmodels import WsComment
        
        class BlogService(DjangoSoapApp):
    
            __tns__ = 'http://ws.javapress.org/blog/'
        
            @soapmethod(_returns=soap_types.Array(WsBlog))
            def get_blogs(self):
                blogs = Blog.objects.all()
                results = []
                for blog in blogs:
                    comments = []
                    for comment in blog.comment_set.all():
                        comments.append(WsComment(comment, ratingText=comment.ratingText()))
                    b = WsBlog(blog, comments=comments)
                    results.append(b)
                return results
        
        blog_service = BlogService()
        
    #urls.py
        urlpatterns = patterns('',
            (r'^blog/', 'foo.views.blog_service'),
            (r'^blog/service.wsdl', 'foo.views.blog_service'),
        )
    
    '''
    def __init__(self, *args, **kwargs):
        super(BaseClassSerializer, self).__init__()
               
        # for each args read attributes and update wsobjcet
        for source in args:
            if isinstance(source, dict):
                self.__dict__.update(source)
            else:
                # if arg is not an dict, take his dict
                self.__dict__.update(source.__dict__)
        
        # update object also with kwargs
        self.__dict__.update(kwargs)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值