Mercurial > scratch
comparison pydershell/pydershell.py @ 26:b7037cd0f375
Added support for exposing object properties to JS.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 07 Sep 2009 22:17:57 -0700 |
parents | dace90a7f5e3 |
children | 7f12db104246 |
comparison
equal
deleted
inserted
replaced
25:64fb84017d87 | 26:b7037cd0f375 |
---|---|
334 | 334 |
335 def __wrap_pyinstance(self, value): | 335 def __wrap_pyinstance(self, value): |
336 pyproto = type(value) | 336 pyproto = type(value) |
337 if pyproto not in self.__type_protos: | 337 if pyproto not in self.__type_protos: |
338 jsproto = self.cx.new_object() | 338 jsproto = self.cx.new_object() |
339 if hasattr(pyproto, '__jsprops__'): | |
340 define_getter = self.cx.get_property(jsproto, | |
341 '__defineGetter__') | |
342 define_setter = self.cx.get_property(jsproto, | |
343 '__defineSetter__') | |
344 for name in pyproto.__jsprops__: | |
345 prop = getattr(pyproto, name) | |
346 if not type(prop) == property: | |
347 raise TypeError("Expected attribute '%s' to " | |
348 "be a property" % name) | |
349 getter = None | |
350 setter = None | |
351 if prop.fget: | |
352 getter = self.__wrap_pycallable(prop.fget, | |
353 pyproto) | |
354 if prop.fset: | |
355 setter = self.__wrap_pycallable(prop.fset, | |
356 pyproto) | |
357 if getter: | |
358 self.cx.call_function(jsproto, | |
359 define_getter, | |
360 (name, getter)) | |
361 if setter: | |
362 self.cx.call_function(jsproto, | |
363 define_setter, | |
364 (name, setter,)) | |
339 for name in dir(pyproto): | 365 for name in dir(pyproto): |
340 attr = getattr(pyproto, name) | 366 attr = getattr(pyproto, name) |
341 if (isinstance(attr, types.UnboundMethodType) and | 367 if (isinstance(attr, types.UnboundMethodType) and |
342 hasattr(attr, '__jsexposed__') and | 368 hasattr(attr, '__jsexposed__') and |
343 attr.__jsexposed__): | 369 attr.__jsexposed__): |