예제 #1
0
파일: backend.py 프로젝트: sjhudek/thonny
 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 {}
예제 #2
0
    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}
예제 #3
0
 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
     }
예제 #4
0
 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 {}
예제 #5
0
    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)
예제 #6
0
 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
     }
예제 #7
0
    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