LINUX.ORG.RU

История изменений

Исправление provaton, (текущая версия) :

Вот весь код полностью:

import PyV8

class Test(object):
    a = 5
    b = 6
    c = 7

allowed_attrs = {'Test': ['a', 'b']}

def make_proxy(proxied):
    class SafeProxy(object):
        def __getattribute__(self, name):
            if name in allowed_attrs.get(proxied.__class__.__name__, []):
                return proxied.__getattribute__(name)
    return SafeProxy()

class Global(PyV8.JSClass):
    def __init__(self, obj):
        self.obj = make_proxy(obj)


ctxt = PyV8.JSContext(Global(Test()))
ctxt.enter()
print ctxt.eval('obj.a')
print ctxt.eval('obj.b')
print ctxt.eval('obj.c')
try:
    print ctxt.eval('allowed_attrs')
except Exception, e:
    print e

try:
    print ctxt.eval('obj.__module__.allowed_attrs')
except Exception, e:
    print e

Результаты:

5
6
None
ReferenceError: allowed_attrs is not defined (  @ 1 : 0 )  -> allowed_attrs
TypeError: Cannot read property 'allowed_attrs' of null (  @ 1 : 14 )  -> obj.__module__.allowed_attrs

Если сможешь показать как достать через ctxt.eval allowed_attrs, я буду тебе очень сильно признателен. Без иронии. В таком случае я ее тоже в замыкание засуну.

Исходная версия provaton, :

Вот весь код полностью:

import PyV8

class Test(object):
    a = 5
    b = 6
    c = 7

allowed_attrs = {'Test': ['a', 'b']}

def make_proxy(proxied):
    class SafeProxy(object):
        def __getattribute__(self, name):
            if name in allowed_attrs.get(proxied.__class__.__name__, []):
                return proxied.__getattribute__(name)
    return SafeProxy()

class Global(PyV8.JSClass):
    def __init__(self, obj):
        self.obj = make_proxy(obj)


ctxt = PyV8.JSContext(Global(Test()))
ctxt.enter()
print ctxt.eval('obj.a')
print ctxt.eval('obj.b')
print ctxt.eval('obj.c')
try:
    print ctxt.eval('allowed_attrs')
except Exception, e:
    print e

try:
    print ctxt.eval('obj.__module__.allowed_attrs')
except Exception, e:
    print e

Результаты:

5
6
None
ReferenceError: allowed_attrs is not defined (  @ 1 : 0 )  -> allowed_attrs
TypeError: Cannot read property 'allowed_attrs' of null (  @ 1 : 14 )  -> obj.__module__.allowed_attrs

Если сможешь показать как достать через ctxt.eval allowed_attrs, я буду тебе очень сильно признателен. Без иронии.