def _read(self): if not os.path.exists(self.filename): return {} self._lock.acquire() file = None try: file = open(self.filename, 'r') r = RExec() r.update_global_names(self._context) dict = r.r_eval(file.read()) finally: if file: file.close() self._lock.release() return dict
def _create_shared_env(): import mpx.lib.node class Temp: __module__ = __name__ stub = Temp() stub.lib = Temp() stub.lib.node = Temp() stub.lib.node.as_node = mpx.lib.node.as_node stub.lib.node.as_internal_node = mpx.lib.node.as_internal_node rexec = RExec() rexec.update_global_names( {"mpx": stub, "as_node": mpx.lib.node.as_node, "as_internal_node": mpx.lib.node.as_internal_node} ) return rexec
def __init__(self, name): _logs_lock.acquire() try: if _logs.has_key(name): from mpx.lib.msglog import types raise ENameInUse(name, logtype=types.ERR) self._lock = threading.Lock() self._lock.acquire() _logs[name] = self finally: _logs_lock.release() try: self.name = name self.eval = RExec().r_eval self.path = properties.LOGFILE_DIRECTORY self.filename = os.path.join(self.path, self.name + ".log") self.data_manager = _LogDataManager(self.filename) self._slice_position = 0 self.max_return_length = 100000 self.last_values = self._get_last_row() # It is likely that the log contains a higher seq number than # the one that was last saved by DataManager, if so, update it. # NOTE: the data manager will have a higher number if a trim_g* was # done and then the log was closed. if self.last_values: if self.last_values[-1] >= self.data_manager.inspect_seq(): self.data_manager.set_seq(self.last_values[-1] + 1) else: self.last_values = [] finally: self._lock.release()
def _create_shared_env(): import mpx.lib.node class Temp: __module__ = __name__ stub = Temp() stub.lib = Temp() stub.lib.node = Temp() stub.lib.node.as_node = mpx.lib.node.as_node stub.lib.node.as_internal_node = mpx.lib.node.as_internal_node rexec = RExec() rexec.update_global_names({ 'mpx': stub, 'as_node': mpx.lib.node.as_node, 'as_internal_node': mpx.lib.node.as_internal_node }) return rexec
class TestCase(DefaultTestFixture): def _setUp(self): warnings.resetwarnings() self.rexec = RExec() return def _tearDown(self): if hasattr(self, 'rexec'): del self.rexec return def setUp(self): DefaultTestFixture.setUp(self) self._setUp() return def tearDown(self): try: self._tearDown() finally: DefaultTestFixture.tearDown(self) return def test_create(self): return def test_simple_reval(self): result = self.rexec.r_eval('1 + 1') if result != 2: raise 'Failed simple r_eval.' return def test_ok_python_imports(self): self._tearDown() for m in ('audioop', 'array', 'binascii', 'cmath', 'errno', 'imageop', 'marshal', 'math', 'md5', 'operator', 'parser', 're', 'select', 'strop', 'struct', 'time', 'marshal', '__builtin__', '__main__', 'sys', 'posix', ): self._setUp() warnings.filterwarnings("ignore", '.*', DeprecationWarning) self.rexec.r_exec('import %s' % m) def test_scary_python_imports(self): self._tearDown() for m in ('socket', 'msglog', 'signal', 'SocketServer', 'mmap'): self._setUp() try: self.rexec.r_exec('import %s' % m) except ImportError: pass else: raise 'Failed to recognize a dangerous module: %s' % m
def _read(self): if not os.path.exists(self.filename): return {} self._lock.acquire() file = None try: file = open(self.filename, 'r') dict = RExec().r_eval(file.read()) finally: if file: file.close() self._lock.release() return dict
def _unpackage_dict(dict): r = RExec() for key in dict.keys(): dict[key] = r.r_eval(dict[key]) return dict
def _setUp(self): warnings.resetwarnings() self.rexec = RExec() return
class TestCase(DefaultTestFixture): def _setUp(self): warnings.resetwarnings() self.rexec = RExec() return def _tearDown(self): if hasattr(self, 'rexec'): del self.rexec return def setUp(self): DefaultTestFixture.setUp(self) self._setUp() return def tearDown(self): try: self._tearDown() finally: DefaultTestFixture.tearDown(self) return def test_create(self): return def test_simple_reval(self): result = self.rexec.r_eval('1 + 1') if result != 2: raise 'Failed simple r_eval.' return def test_ok_python_imports(self): self._tearDown() for m in ( 'audioop', 'array', 'binascii', 'cmath', 'errno', 'imageop', 'marshal', 'math', 'md5', 'operator', 'parser', 're', 'select', 'strop', 'struct', 'time', 'marshal', '__builtin__', '__main__', 'sys', 'posix', ): self._setUp() warnings.filterwarnings("ignore", '.*', DeprecationWarning) self.rexec.r_exec('import %s' % m) def test_scary_python_imports(self): self._tearDown() for m in ('socket', 'msglog', 'signal', 'SocketServer', 'mmap'): self._setUp() try: self.rexec.r_exec('import %s' % m) except ImportError: pass else: raise 'Failed to recognize a dangerous module: %s' % m
def _unpackage_dict(dict, context): r = RExec() r.update_global_names(context) for key in dict.keys(): dict[key] = r.r_eval(dict[key]) return dict