Вообщем была попытка сделать песочницу на питоне с помощью exec() естесно запретив лишние импорты, для простых вещей типа 2+2 она работает отлично. Но вот понадобилось получить из базы что нить то есть все таки добавить хитрым образом нужный импорт и тут затык.
import __builtin__
i = __builtin__.__import__
def importer(a, s, d, f=[], g=-1):
	aaa = {"json":True, "simplejson":True, "decoder":True}
	print a
	if a in aaa:
		return i(a, s, d, f, g)
	return None
clean_db = None
def get_doc(doc_id):
	doc = clean_db[doc_id]
	return doc['head_field']
def ttt():
	clean_db = couch['db']
	try:
		param = {"get_doc":get_doc}
#запрещаем импорт
		__builtin__.__import__ = importer
		exec("""get_doc("4b24907ade8de755b66b1474ff0034d7")""", param)
#разрешаем импорт
		__builtin__.__import__ = i
	except Exception, e:
		print "ошибка песочницы %s, строка %s" % (e, traceback.format_exception(*sys.exc_info())[1])
ttt()
Выдает ошибку
ошибка песочницы 'NoneType' object is unsubscriptable, in ttt
    exec("""get_doc("4b24907ade8de755b66b1474ff0034d7")""", param)
если функцию ttt закоментировать например а просто написать 
clean_db = couch['py']
__builtin__.__import__ = importer
param = {"get_doc":get_doc}
exec("""get_doc("4b24907ade8de755b66b1474ff0034d7")""", param)
То все нормально. В чем разница не совсем понятно?