Hi Burak

Thanks for your prompt and positive reply. Your solution is better than mine so 
I would be very happy to see it included in Spyne. It would be nice to have the 
callback_name dynamic since users could then specify it in their HTTP request 
and not be forced to use a common callback_name. 

Best regards,
Jesper

> -----Original Message-----
> From: Burak Arslan [mailto:[email protected]]
> Sent: Wednesday, May 15, 2013 11:47 AM
> To: Jesper Larsen
> Cc: [email protected]
> Subject: Re: [Soap-Python] JSONP response
> 
> On 05/15/13 09:15, Jesper Larsen wrote:
> > So what I intend to do is: Subclass JsonDocument. Override __init__
> to take an optional callback function (default=None => behaviour as
> JsonDocument) and override create_out_string so that it optionally (if
> callback function is not None) wraps the JSON output in:
> >
> > callback_function_name + '(' + json + ')'
> >
> >
> 
> Hi Jesper,
> 
> That's the idea, but I'd rather do:
> 
> from itertools import chain
> 
> class JsonP(JsonDocument):
>      def __init__(self, callback_name, *args, **kwargs):
>          super(JsonP, self).__init__(*args, **kwargs)
>          self.callback_name = callback_name
> 
>      def create_out_string(self, ctx):
>          super(JsonP, self).create_out_string(ctx)
> 
>          ctx.out_string = chain([self.callback_name, '('],
> ctx.out_string, [')'])
> 
> ... because:
> 
> 1) out_string is always a sequence, but not necessarily a list. (With
> Json, as of now, it's always a list but that's an implementation quirk)
> 2) string concatanations are costly.
> 3) Using JsonP does not make sense (does it?) without callback_name so
> I
> made it mandatory.
> 
> If you like this implementation, I'll commit it and it will be out in
> Spyne-2.11. In case you don't want to wait (I got a lot to do for
> 2.11),
> you can use this as it is in your own code (If it works, the above is
> not tested) with 2.10.
> 
> Other things like making callback_name dynamic could also be made by
> trying to get it first from context (e.g. ctx.protocol.callback_name)
> before getting it from protocol-wide setting.
> 
> Best,
> Burak

_______________________________________________
Soap mailing list
[email protected]
http://mail.python.org/mailman/listinfo/soap

Reply via email to