From 80dcce9099e630a6217792b6b3a14213add690e6 Mon Sep 17 00:00:00 2001 From: Dov Shlachter Date: Thu, 17 Feb 2022 10:29:44 -0800 Subject: [PATCH] fix: dir(proto.Message) does not raise (#302) dir(proto.Message) defaults to dir(type) --- proto/message.py | 37 ++++++++++++++++++++----------------- tests/test_message.py | 4 ++++ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/proto/message.py b/proto/message.py index 7293fdb5..de9280da 100644 --- a/proto/message.py +++ b/proto/message.py @@ -274,25 +274,28 @@ def meta(cls): return cls._meta def __dir__(self): - names = set(dir(type)) - names.update( - ( - "meta", - "pb", - "wrap", - "serialize", - "deserialize", - "to_json", - "from_json", - "to_dict", - "copy_from", + try: + names = set(dir(type)) + names.update( + ( + "meta", + "pb", + "wrap", + "serialize", + "deserialize", + "to_json", + "from_json", + "to_dict", + "copy_from", + ) ) - ) - desc = self.pb().DESCRIPTOR - names.update(t.name for t in desc.nested_types) - names.update(e.name for e in desc.enum_types) + desc = self.pb().DESCRIPTOR + names.update(t.name for t in desc.nested_types) + names.update(e.name for e in desc.enum_types) - return names + return names + except AttributeError: + return dir(type) def pb(cls, obj=None, *, coerce: bool = False): """Return the underlying protobuf Message class or instance. diff --git a/tests/test_message.py b/tests/test_message.py index 843fad22..3146f0bb 100644 --- a/tests/test_message.py +++ b/tests/test_message.py @@ -415,3 +415,7 @@ class Arm(proto.Message): actual = set(dir(Mollusc)) assert actual == expected + + +def test_dir_message_base(): + assert set(dir(proto.Message)) == set(dir(type))