def _get_object_info_extras(self, type_name): """object is given in __thonny_value """ if type_name in ("list", "tuple", "set"): items = self._evaluate("[(id(x), __thonny_helper.repr(x)) for x in __thonny_value]") return {"elements": [ValueInfo(x[0], x[1]) for x in items]} elif type_name == "dict": items = self._evaluate( "[((id(key), __thonny_helper.repr(key)), (id(__thonny_value[key]), __thonny_helper.repr(__thonny_value[key]))) for key in __thonny_value]" ) return { "entries": [ (ValueInfo(x[0][0], x[0][1]), ValueInfo(x[1][0], x[1][1])) for x in items ] } else: return {}
def _cmd_get_globals(self, cmd): if cmd.module_name == "__main__": globs = self._evaluate( "{name : (__thonny_helper.repr(value), id(value)) for (name, value) in globals().items() if not name.startswith('__')}" ) else: globs = self._evaluate( dedent( """ import %s as __mod_for_globs __thonny_helper.print_mgmt_value( {name : (__thonny_helper.repr(getattr(__mod_for_globs, name)), id(getattr(__mod_for_globs, name))) in dir(__mod_for_globs) if not name.startswith('__')} ) del __mod_for_globs """ ) ) value_infos = {} for name, pair in globs.items(): value_infos[name] = ValueInfo(pair[1], pair[0]) return {"module_name": cmd.module_name, "globals": value_infos}
def _get_object_attributes(self, all_attributes): """object is given in __thonny_value """ atts = self._evaluate( "{name : (id(getattr(__thonny_value, name)), __thonny_helper.repr(getattr(__thonny_value, name))) for name in dir(__thonny_value)}" ) return { name: ValueInfo(atts[name][0], atts[name][1]) for name in atts if not name.startswith("__") or all_attributes }
def _cmd_execute_source(self, cmd): try: # Try to parse as expression ast.parse(cmd.source, mode="eval") # If it didn't fail then source is an expression _, _, value_repr = self._execute_print_expr(cmd.source) return {"value_info": ValueInfo(0, value_repr)} except SyntaxError: # source is a statement (or invalid syntax) self._execute(cmd.source) return {}
def export_value(self, value, max_repr_length=5000): self._heap[id(value)] = value try: rep = repr(value) except Exception: # See https://bitbucket.org/plas/thonny/issues/584/problem-with-thonnys-back-end-obj-no rep = "??? <repr error>" if len(rep) > max_repr_length: rep = rep[:max_repr_length] + "…" return ValueInfo(id(value), rep)
def _get_object_attributes(self, all_attributes): """object is given in __thonny_helper.object_info""" atts = self._evaluate( "{name : (" " __thonny_helper.builtins.id(__thonny_helper.builtins.getattr(__thonny_helper.object_info, name))," " __thonny_helper.repr(__thonny_helper.builtins.getattr(__thonny_helper.object_info, name))" ") for name in __thonny_helper.builtins.dir(__thonny_helper.object_info)}" ) return { name: ValueInfo(atts[name][0], atts[name][1]) for name in atts if not name.startswith("__") or all_attributes }
def export_value(self, value, skip_None=False): if value is None and skip_None: return None self._heap[id(value)] = value try: type_name = value.__class__.__name__ except: type_name = type(value).__name__ result = ValueInfo(id=id(value), repr=repr(value), type_name=type_name) return result