from soaplib.serializers.clazz import Array from soaplib.service import DefinitionBase, rpc from soaplib.wsgi import Application from soaplib.serializers.clazz import ClassSerializer

from django.http import HttpResponse from mosketeros.guias_app.guias.models import Brand, ModelCar from mosketeros.settings import MEDIA_URL # the class with actual web methods

class ReturnVal(ClassSerializer): # class types: brand = String vehicle = String category = String year = Integer file = String

class GuiasService2(DefinitionBase): @rpc(String, String, _returns=Boolean) def Test(self, f1, f2): return True @rpc( _returns=Array(ReturnVal)) def MostrarTodo(self): temp = [] for m in ModelCar.objects.all(): for g in m.guide_cars.filter(deleted=False): r = ReturnVal() r.brand = m.brand.name r.vehicle = m.name r.year = g.year r.category= m.category.name r.file = g.get_file_url() temp.append(r) return temp

# the class which acts as a wrapper between soaplib WSGI functionality and Django class DjangoSoapApp(Application): def __call__(self, request): # wrap the soaplib response into a Django response object django_response = HttpResponse() def start_response(status, headers): status, reason = status.split(' ', 1) django_response.status_code = int(status) for header, value in headers: django_response[header] = value response = super(DjangoSoapApp, self).call(request.META, start_response) django_response.content = '\n'.join(response) return django_response

soap_service = DjangoSoapApp([GuiasService2], name)

# test #python -c "import suds; print suds.client.Client('http://127.0.0.1:8000/guias/service.wsdl', cache=None).service.MostrarTodo()"