From 5bf7525d2d37968235514d1b93a403d037800652 Mon Sep 17 00:00:00 2001 From: Spencer Young Date: Tue, 23 Mar 2021 12:51:34 -0700 Subject: [PATCH 1/2] fix(types): prevent __dir__ from producing duplicates --- gitlab/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/base.py b/gitlab/base.py index 5eb111851..53bf45237 100644 --- a/gitlab/base.py +++ b/gitlab/base.py @@ -132,7 +132,7 @@ def __ne__(self, other: object) -> bool: return super(RESTObject, self) != other def __dir__(self): - return super(RESTObject, self).__dir__() + list(self.attributes) + return super(RESTObject, self).__dir__() | self.attributes.keys() def __hash__(self) -> int: if not self.get_id(): From a8e591f742f777f8747213b783271004e5acc74d Mon Sep 17 00:00:00 2001 From: Spencer Phillip Young Date: Wed, 21 Apr 2021 09:43:44 -0700 Subject: [PATCH 2/2] test(object): add test for __dir__ duplicates --- gitlab/tests/test_base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gitlab/tests/test_base.py b/gitlab/tests/test_base.py index a0adcb03d..6ca261d6c 100644 --- a/gitlab/tests/test_base.py +++ b/gitlab/tests/test_base.py @@ -135,6 +135,10 @@ def test_update_attrs_deleted(self, fake_manager): assert {"foo": "foo"} == obj._attrs assert {} == obj._updated_attrs + def test_dir_unique(self, fake_manager): + obj = FakeObject(fake_manager, {"manager": "foo"}) + assert len(dir(obj)) == len(set(dir(obj))) + def test_create_managers(self, fake_gitlab, fake_manager): class ObjectWithManager(FakeObject): _managers = (("fakes", "FakeManager"),)