On 28 nov, 15:49, George Sakkis <[EMAIL PROTECTED]> wrote: > On Nov 28, 9:19 am, manatlan <[EMAIL PROTECTED]> wrote: > > > > > On 28 nov, 14:58, George Sakkis <[EMAIL PROTECTED]> wrote: > > > > On Nov 28, 5:36 am, manatlan <[EMAIL PROTECTED]> wrote: > > > > > I'd like to make a "jquery python wrapper" ... > > > > > here is my code : > > > > =================================================================== > > > > #!/usr/bin/env python > > > > # -*- coding: utf-8 -*- > > > > > class JQueryCaller(object): > > > > def __init__(self,callback): > > > > self.__callback=callback > > > > self._s=[] > > > > > def __getattr__(self,name): > > > > def _caller(*args): > > > > sargs=["'%s'"%i for i in args] > > > > self._s.append("%s(%s)"%(name,",".join(sargs))) > > > > return self > > > > return _caller > > > > > def __call__(self): > > > > return self.__callback(".".join(self._s)) > > > > > class MyObject(object): > > > > def __init__(self): > > > > self.js = JQueryCaller(self.__add) > > > > > def __add(self,j): > > > > print "Add:"+j > > > > > if __name__ == "__main__": > > > > o=MyObject() > > > > > o.js.kiki(12).kuku()() > > > > =================================================================== > > > > If i run the script : it will display : > > > > > Add:kiki('12').kuku() > > > > > Because the JQueryCaller caller is called, by the "()" trick at the > > > > end of the last line > > > > > I'd like to display the same thing, but without the need to put the > > > > "()" at then end ! > > > > (by calling simply : "o.js.kiki(12).kuku()" not "o.js.kiki(12).kuku() > > > > ()") > > > > (or how to call the MyObject._add (callback) without using the caller > > > > on my JQueryCaller) > > > > Why don't you rename __call__ to __str__ and have MyObject.__add > > > return a string instead of printing it directly? > > > > class MyObject(object): > > > def __add(self,j): > > > return "Add:"+j > > > > if __name__ == "__main__": > > > o = MyObject() > > > s = o.js.kiki(12).kuku() > > > print s > > > > HTH, > > > George > > > sure, it works like you said ... but it's not what I want. > > by doing that, you create an action ... when you will call "print" it > > will call the __str__ (__repr__ is better in that case), which will > > call the callback of myobject. > > In my preceding post, the action was called by the "()" trick at the > > end of line > > ... which you apparently don't like, and rightly so. __getattr__ and > __call__ do totally different things in your example, why do you want > to conflate them ? > > > In fact, MyObject will handle a list of all "js call" > > If i do : > > o.js.toto() > > o.js.toto().titi(12,13) > > > I'd like my MyObject contains a list like that ["toto()","toto().titi > > (12,23)"] > > Of course this still happens when you rename __call__ to __str__. > > > another idea ? > > Yes, put a little more thought on your design and give a more > realistic example of what you're really trying to do; so far it seems > more like a pointless hack. > > George
I just want to make a jquery wrapper, and let people use it to write jquery call on the server side in a python way ... o is a object, imagine a widget : like a textarea or input box "js" is a special attribut of "o", which will let you write javascript for this object. o=MyObject() o.js.toggleClass("clean").hide() When I will render the object to a http/html output : it will generate something like (a javascript call): $("#idOfMyObject").toggleClass ("clean").hide(); It's all what I want in the real world. I wouldn't do something like that (with the "()" tricks at the end on the chain, because I don't find it really readable/natural) o=MyObject() o.js.toggleClass("clean").hide()() The code I gave before (the JQueryCaller) was just my try to do what I want ... If there is another way : I take ;-) -- http://mail.python.org/mailman/listinfo/python-list