From dad552d4432540d4977d4c75500fd6a5f417f432 Mon Sep 17 00:00:00 2001 From: Philip DePetro Date: Tue, 15 Oct 2024 08:18:05 -0700 Subject: [PATCH 1/2] Suppress errors for unused slots --- _pydevd_bundle/pydevd_resolver.py | 2 ++ tests_python/test_resolvers.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/_pydevd_bundle/pydevd_resolver.py b/_pydevd_bundle/pydevd_resolver.py index 20a7351a..488793c4 100644 --- a/_pydevd_bundle/pydevd_resolver.py +++ b/_pydevd_bundle/pydevd_resolver.py @@ -190,6 +190,8 @@ def _get_py_dictionary(self, var, names=None, used___dict__=False): name_as_str = "%r" % (name_as_str,) if not used___dict__: + if not hasattr(var, name): + continue attr = getattr(var, name) else: attr = var.__dict__[name] diff --git a/tests_python/test_resolvers.py b/tests_python/test_resolvers.py index 1266caf4..c6794340 100644 --- a/tests_python/test_resolvers.py +++ b/tests_python/test_resolvers.py @@ -107,6 +107,29 @@ def __getattribute__(self, attr_name): assert type_name == "MyObject" +def test_object_resolver_empty_slot(): + from _pydevd_bundle.pydevd_resolver import DefaultResolver + from _pydevd_bundle.pydevd_xml import get_type + + default_resolver = DefaultResolver() + + class MyObject(object): + __slots__ = ["a", "b", "c"] + + def __init__(self): + self.a = 1 + self.c = 3 + + obj = MyObject() + dictionary = default_resolver.get_dictionary(obj) + + dictionary = clear_contents_dictionary(default_resolver.get_dictionary(obj)) + assert dictionary == {"a": 1, "c": 3} + + contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol(default_resolver.get_contents_debug_adapter_protocol(obj)) + assert contents_debug_adapter_protocol == [("a", 1, ".a"), ("c", 3, ".c")] + + def test_object_resolver__dict__non_strings(): from _pydevd_bundle.pydevd_resolver import DefaultResolver From 69a9f4063c06563d80abc7216b72b999b4a10260 Mon Sep 17 00:00:00 2001 From: Philip DePetro Date: Tue, 15 Oct 2024 09:23:59 -0700 Subject: [PATCH 2/2] Remove unused import --- tests_python/test_resolvers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests_python/test_resolvers.py b/tests_python/test_resolvers.py index c6794340..93609c1b 100644 --- a/tests_python/test_resolvers.py +++ b/tests_python/test_resolvers.py @@ -109,7 +109,6 @@ def __getattribute__(self, attr_name): def test_object_resolver_empty_slot(): from _pydevd_bundle.pydevd_resolver import DefaultResolver - from _pydevd_bundle.pydevd_xml import get_type default_resolver = DefaultResolver()