Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
Archivo: Window.py Proyecto: medim/thug
    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)
Ejemplo n.º 4
0
    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)