def load_py(stream, filepath=None): """Load python-formatted data from a stream. Args: stream (file-like object). Returns: dict. """ g = __builtins__.copy() scopes = ScopeContext() g['scope'] = scopes try: exec stream in g except Exception as e: import traceback frames = traceback.extract_tb(sys.exc_info()[2]) while filepath and frames and frames[0][0] != filepath: frames = frames[1:] msg = str(e) stack = ''.join(traceback.format_list(frames)).strip() if stack: msg += ":\n" + stack raise ResourceError(msg) result = {} excludes = set(('scope', '__builtins__')) for k, v in g.iteritems(): if k not in excludes and \ (k not in __builtins__ or __builtins__[k] != v): result[k] = v def _process_objects(data): for k, v in data.iteritems(): if isfunction(v): data[k] = SourceCode.from_function(v) elif isinstance(v, dict): _process_objects(v) return data result.update(scopes.to_dict()) result = _process_objects(result) return result
def load_py(stream, filepath=None): """Load python-formatted data from a stream. Args: stream (file-like object). Returns: dict. """ scopes = ScopeContext() g = dict(scope=scopes, early=early, late=late, include=include, ModifyList=ModifyList, InvalidPackageError=InvalidPackageError) try: exec stream in g except Exception as e: import traceback frames = traceback.extract_tb(sys.exc_info()[2]) while filepath and frames and frames[0][0] != filepath: frames = frames[1:] msg = "Problem loading %s: %s" % (filepath, str(e)) stack = ''.join(traceback.format_list(frames)).strip() if stack: msg += ":\n" + stack raise ResourceError(msg) result = {} excludes = set(('scope', 'InvalidPackageError', '__builtins__', 'early', 'late', 'include', 'ModifyList')) for k, v in g.iteritems(): if k not in excludes and \ (k not in __builtins__ or __builtins__[k] != v): result[k] = v result.update(scopes.to_dict()) result = process_python_objects(result, filepath=filepath) return result