On 28 nov, 15:19, 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 > > 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)"] > > another idea ?
To explain better, here is another code ====================================================================================== 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(list): def __init__(self): list.__init__([]) js=property(lambda self:JQueryCaller(self.__add)) def __add(self,j): self.append(j) if __name__ == "__main__": o=MyObject() o.js.kiki(12).kuku()() o.js.kiki(12).kuku().roro("gfde")() assert o==["kiki('12').kuku()", "kiki('12').kuku().roro('gfde')"] ====================================================================================== here, it uses the __call__ of JQueryCaller by adding the "()" trick at the end ... I'd really like to have the same result, without the "()" trick, like this: o=MyObject() o.js.kiki(12).kuku() o.js.kiki(12).kuku().roro("gfde") assert o==["kiki('12').kuku()", "kiki('12').kuku().roro('gfde')"] -- http://mail.python.org/mailman/listinfo/python-list