# soaplib v2.0.0beta2 (from memory) # Django v1.3 (stable) # NOTE: CSRF middleware has been turned off! # For urls.py, see: https://gist.github.com/935812
import soaplib from soaplib.core.service import rpc, DefinitionBase from soaplib.core.model.primitive import String, Integer from soaplib.core.model.clazz import Array from django.views.decorators.csrf import csrf_exempt class HelloWorldService(DefinitionBase): @rpc(String,Integer,_returns=Array(String)) def say_hello(self, name, times): results = [] for i in range(0, times): results.append('Hellow, %s' %name) return results from soaplib.core.server.wsgi import Application from django.http import HttpResponse import StringIO class DumbStringIO(StringIO.StringIO): def read(self, n): return self.getvalue() @csrf_exempt class DjangoSoapApp(Application): def __call__(self, request): 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 environ = request.META.copy() environ['CONTENT_LENGTH'] = len(request.raw_post_data) environ['wsgi.input'] = DumbStringIO(request.raw_post_data) environ['wsgi.multithread'] = False # print help(DjangoSoapApp) response = super(DjangoSoapApp, self).__call__(environ, start_response) django_response.content = '\n'.join(response) return django_response print type(DjangoSoapApp) soap_application = soaplib.core.Application([HelloWorldService], 'tns') #import pdb; pdb.set_trace() hello_world_service = DjangoSoapApp(soap_application) On Jul 5, 2:54 pm, Nikolas Stevenson-Molnar <nik.mol...@consbio.org> wrote: > Would you please provide the source for mysite.BDSCheckUser.views? > > _Nik > > On 7/5/2012 11:37 AM, Jeff Silverman wrote: > > > > > Resulting output, > > > Help on function DjangoSoapApp in module mysite.BDSCheckUser.views: > > > DjangoSoapApp(*args, **kwargs) > > > On Jul 5, 2:31 pm, Nikolas Stevenson-Molnar <nik.mol...@consbio.org> > > wrote: > >> Hmmm, I can't think of what may be happening. One more debug thing to > >> try, print the help of DjangoSoapApp just before the problem line: > > >> print help(DjangoSoapApp) > > >> That way, if the DjangoSoapApp symbol is getting reassigned to a > >> function somewhere along the way, that might clue you in. > > >> _Nik > > >> On 7/5/2012 11:17 AM, Jeff Silverman wrote: > > >>> I've been flip flopping my views.py between that snippet, and > >>>https://gist.github.com/935809, which is a bit different, but easier > >>> to follow. > >>> On Jul 5, 2:03 pm, Nikolas Stevenson-Molnar <nik.mol...@consbio.org> > >>> wrote: > >>>> Is your code still the same as you posted > >>>> earlier:http://djangosnippets.org/snippets/2638/?Andtheerror is occuring > >>>> on > >>>> ln 28? > >>>> _Nik > >>>> On 7/5/2012 11:01 AM, Jeff Silverman wrote: > >>>>> The print output is: > >>>>> <type 'function'> > >>>>> On Jul 5, 1:38 pm, Nikolas Stevenson-Molnar <nik.mol...@consbio.org> > >>>>> wrote: > >>>>>> Hmmm, not sure about this one. Try printing out the type of > >>>>>> DjangoSoapApp before that line is called: > >>>>>> print type(DjangoSoapApp) > >>>>>> _Nik > >>>>>> On 7/5/2012 5:20 AM, Jeff Silverman wrote: > >>>>>>> Ok, I'm further along, I think. Now I'm getting the following > >>>>>>> response = super(DjangoSoapApp, self).__call__(environ, > >>>>>>> start_response) > >>>>>>> (Pdb) p start_response > >>>>>>> <function start_response at 0x25d1ed8> > >>>>>>> (Pdb) super(DjangoSoapApp, self).__call__(environ, start_response) > >>>>>>> *** TypeError: super() argument 1 must be type, not function > >>>>>>> On Jul 3, 3:47 pm, Nikolas Stevenson-Molnar <nik.mol...@consbio.org> > >>>>>>> wrote: > >>>>>>>> Looking at the soaplib source, it looks like it required requests to > >>>>>>>> be > >>>>>>>> made using POST. If you're loading this in a web browser to test, > >>>>>>>> then > >>>>>>>> you're making a GET request. Try making a POST request (using > >>>>>>>> something > >>>>>>>> like Fiddler) instead. > >>>>>>>>https://github.com/soaplib/soaplib/blob/master/src/soaplib/core/serve... > >>>>>>>> (line 84/85) > >>>>>>>> _Nik > >>>>>>>> On 7/3/2012 12:20 PM, Jeff Silverman wrote: > >>>>>>>>>http://djangosnippets.org/snippets/2638/ > >>>>>>>>> On Jul 3, 2:56 pm, Nikolas Stevenson-Molnar <nik.mol...@consbio.org> > >>>>>>>>> wrote: > >>>>>>>>>> Would you please provide a reference to the snippet or to your > >>>>>>>>>> complete > >>>>>>>>>> code? It's hard to understand what's going on from this small bit. > >>>>>>>>>> _Nik > >>>>>>>>>> On 7/3/2012 11:33 AM, Jeff Silverman wrote: > >>>>>>>>>>> Thanks for the reply. Removing that did not change the result. > >>>>>>>>>>> Just > >>>>>>>>>>> an FYI, but I copied the code verbatim from the snippet. that's > >>>>>>>>>>> why I > >>>>>>>>>>> cannot understand what's going on. I continually get the405method > >>>>>>>>>>> not allowed error regardless. > >>>>>>>>>>> On Jul 3, 1:28 pm, Nikolas Stevenson-Molnar > >>>>>>>>>>> <nik.mol...@consbio.org> > >>>>>>>>>>> wrote: > >>>>>>>>>>>> I'm not sure that this is the problem, but typically > >>>>>>>>>>>> constructors should > >>>>>>>>>>>> not have a return value. Try removing the "return" from your > >>>>>>>>>>>> DjangoSoapApp constructor. > >>>>>>>>>>>> _Nik > >>>>>>>>>>>> On 7/3/2012 6:32 AM, Jeff Silverman wrote: > >>>>>>>>>>>>> Below is the code from the views.py > >>>>>>>>>>>>> The405is retunred from the 'return super(DjangoSoapApp, > >>>>>>>>>>>>> self).__init__(Application(services, tns))' statement. I am > >>>>>>>>>>>>> using > >>>>>>>>>>>>> python 2.6, soaplib20 and django 1.3. I am struggling to > >>>>>>>>>>>>> understand > >>>>>>>>>>>>> what exactly is wrong here. > >>>>>>>>>>>>> class HelloWorldService(DefinitionBase): > >>>>>>>>>>>>> @soap(String,Integer,_returns=Array(String)) > >>>>>>>>>>>>> def say_smello(self,name,times): > >>>>>>>>>>>>> results = [] > >>>>>>>>>>>>> for i in range(0,times): > >>>>>>>>>>>>> results.append('Hello, %s'%name) > >>>>>>>>>>>>> return results > >>>>>>>>>>>>> class DjangoSoapApp(WSGIApplication): > >>>>>>>>>>>>> csrf_exempt = True > >>>>>>>>>>>>> def __init__(self, services, tns): > >>>>>>>>>>>>> """Create Django view for given SOAP soaplib services > >>>>>>>>>>>>> and > >>>>>>>>>>>>> tns""" > >>>>>>>>>>>>> return super(DjangoSoapApp, > >>>>>>>>>>>>> self).__init__(Application(services, tns)) > >>>>>>>>>>>>> def __call__(self, request): > >>>>>>>>>>>>> django_response = HttpResponse() > >>>>>>>>>>>>> def start_response(status, headers): > >>>>>>>>>>>>> django_response.status_code = int(status.split(' ', > >>>>>>>>>>>>> 1)[0]) > >>>>>>>>>>>>> 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 > >>>>>>>>>>>>> # the view to use in urls.py > >>>>>>>>>>>>> hello_world_service = DjangoSoapApp([HelloWorldService], > >>>>>>>>>>>>> '__name__')- Hide quoted text - > >>>>>>>>>>>> - Show quoted text -- Hide quoted text - > >>>>>>>>>> - Show quoted text -- Hide quoted text - > >>>>>>>> - Show quoted text -- Hide quoted text - > >>>>>> - Show quoted text -- Hide quoted text - > >>>> - Show quoted text -- Hide quoted text - > >> - Show quoted text -- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.