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

Reply via email to