From b8e2606dafeaff409f9cef22af18b4262f07f8fb Mon Sep 17 00:00:00 2001 From: Georgy Kibardin Date: Fri, 7 Apr 2017 10:25:27 +0300 Subject: [PATCH] Override keys() with a function, not an attribute By mistake keys function has been overriden by a value. Change-Id: I713bddcfb66c4835d477972ece7e0983d263377f Closes-Bug: #1666913 --- nailgun/nailgun/test/unit/test_uniondict.py | 6 ++++++ nailgun/nailgun/utils/uniondict.py | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/nailgun/nailgun/test/unit/test_uniondict.py b/nailgun/nailgun/test/unit/test_uniondict.py index 038f1084d5..0875b3075b 100644 --- a/nailgun/nailgun/test/unit/test_uniondict.py +++ b/nailgun/nailgun/test/unit/test_uniondict.py @@ -103,3 +103,9 @@ f: 6""" def test_repr(self): d = UnionDict(self.D1, self.D2, self.D3) self.assertEquals(eval(repr(d)), self.D) + + def test_keys(self): + ud = UnionDict({'a': 1, 'b': 2, 'c': 3}, + {'b': 2, 'c': 3, 'd': 4}, + {'e': 5}) + self.assertEquals(ud.keys(), {'a', 'b', 'c', 'd', 'e'}) diff --git a/nailgun/nailgun/utils/uniondict.py b/nailgun/nailgun/utils/uniondict.py index 02511ab5d1..a4a315ee6c 100644 --- a/nailgun/nailgun/utils/uniondict.py +++ b/nailgun/nailgun/utils/uniondict.py @@ -31,7 +31,7 @@ class UnionDict(collections.Mapping): self.dicts = list(dicts) self.dicts.reverse() - self.keys = set(itertools.chain.from_iterable(dicts)) + self.keys = lambda: set(itertools.chain.from_iterable(dicts)) def __getitem__(self, key): values = [] @@ -54,10 +54,10 @@ class UnionDict(collections.Mapping): return UnionDict(*values) def __iter__(self): - return iter(self.keys) + return iter(self.keys()) def __len__(self): - return len(self.keys) + return len(self.keys()) def __repr__(self): items = ['{!r}: {!r}'.format(k, v) for k, v in self.items()]