История изменений
Исправление 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, я буду тебе очень сильно признателен. Без иронии.