#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)