def __getattr__(self, key): if key in self._symbols: raise AttributeError(key) if key in ('__members__', '__methods__'): raise AttributeError(key) if key == 'constructor': return PyV8.JSClassConstructor(self.__class__) if key == 'prototype': return PyV8.JSClassPrototype(self.__class__) prop = self.__dict__.setdefault('__properties__', {}).get(key, None) if prop and isinstance(prop[0], collections.Callable): return prop[0]() if log.ThugOpts.Personality.isIE() and key.lower() in ('wscript', 'wsh', ): # Prevent _ActiveXObject loops super(Window, self).__setattr__("WScript", None) WScript = _ActiveXObject(self, "WScript.Shell") super(Window, self).__setattr__(key, WScript) super(Window, self).__setattr__("WScript", WScript) return WScript context = self.__class__.__dict__['context'].__get__(self, Window) try: self._symbols.add(key) symbol = context.eval(key) except: raise AttributeError(key) finally: self._symbols.discard(key) if isinstance(symbol, PyV8.JSFunction): _method = None if symbol in self._methods: _method = symbol.clone() if _method is None: _method = new.instancemethod(symbol, self, Window) # _method = symbol.__get__(self, Window) setattr(self, key, _method) context.locals[key] = _method return _method if isinstance(symbol, (six.string_types, bool, numbers.Number, datetime.datetime, PyV8.JSObject)): setattr(self, key, symbol) context.locals[key] = symbol return symbol raise AttributeError(key)
def __getattr__(self, name): if name in self._symbols: raise AttributeError(name) if name in ('__members__', '__methods__'): raise AttributeError(name) if name == 'constructor': return PyV8.JSClassConstructor(self.__class__) if name == 'prototype': return PyV8.JSClassPrototype(self.__class__) prop = self.__dict__.setdefault('__properties__', {}).get(name, None) if prop and isinstance(prop[0], collections.Callable): return prop[0]() context = self.__class__.__dict__['context'].__get__(self, Window) try: self._symbols.add(name) symbol = context.eval(name) except: raise AttributeError(name) finally: self._symbols.discard(name) if isinstance(symbol, PyV8.JSFunction): #_method = None # #if symbol in self._methods: # _method = symbol.clone() # #if _method is None: # _method = new.instancemethod(symbol, self, Window) # _method = symbol.__get__(self, Window) # #setattr(self, name, _method) #context.locals[name] = _method #return _method setattr(self, name, symbol) context.locals[name] = symbol return symbol if isinstance(symbol, (thug_string, bool, numbers.Number, datetime.datetime, PyV8.JSObject)): setattr(self, name, symbol) context.locals[name] = symbol return symbol raise AttributeError(name)
def __getattr__(self, name): if name == 'constructor': return PyV8.JSClassConstructor(self.__class__) #if name == 'prototype': # return PyV8.JSClassPrototype(self.__class__) prop = self.__dict__.setdefault('__properties__', {}).get(name, None) if prop and callable(prop[0]): return prop[0]() raise AttributeError(name)
def __getattr__(self, name): if name == 'constructor': return PyV8.JSClassConstructor(self.__class__) #if name == 'prototype': # return PyV8.JSClassPrototype(self.__class__) prop = self.__dict__.setdefault('__properties__', {}).get(name, None) if prop and isinstance(prop[0], collections.Callable): return prop[0]() if name in ('__members__', '__methods__'): raise AttributeError(name) try: symbol = self.context.eval(name) except: raise AttributeError(name) if isinstance(symbol, PyV8.JSFunction): _method = None for _name in ( 'eval', 'unescape', ): if symbol == self.context.eval(_name): _method = symbol.clone() break if _method is None: _method = new.instancemethod(symbol, self, Window) #_method = symbol.__get__(self, Window) setattr(self, name, _method) self.context.locals[name] = _method return _method if isinstance(symbol, (thug_string, bool, numbers.Number, datetime.datetime, PyV8.JSObject)): setattr(self, name, symbol) self.context.locals[name] = symbol return symbol raise AttributeError(name)