From e6117e7cfa971863703087ab62031db11783ecf4 Mon Sep 17 00:00:00 2001 From: Ayala Shachar Date: Tue, 29 Oct 2019 19:29:13 +0200 Subject: [PATCH] Fix DefaultMunch/DefaultFactoryMunch return value for get method (fixes #53) Commit 10c726f847b3b7fb6d666809ab5b65f81b966192 added bug which cause DefaultMunch and DefaultFactoryMunch to ignore 'default_value' parameter of get method. --- CHANGELOG.md | 1 + munch/__init__.py | 5 ++--- tests/conftest.py | 10 ++++++++++ tests/test_munch.py | 4 ++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 424148a..723ba37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Changelog Next Version ------------ +* Fix return value of DefaultMunch and DefaultFactoryMunch's get method (fixes [#53](https://github.com/Infinidat/munch/issues/53)) 2.4.0 (2019-10-29) ------------------ diff --git a/munch/__init__.py b/munch/__init__.py index 83420a4..b668fc3 100644 --- a/munch/__init__.py +++ b/munch/__init__.py @@ -238,10 +238,9 @@ def get(self, k, d=None): """ D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. """ - try: - return self[k] - except KeyError: + if k not in self: return d + return self[k] def setdefault(self, k, d=None): """ diff --git a/tests/conftest.py b/tests/conftest.py index 259071a..45d6b23 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ import pytest +import munch @pytest.fixture(name='yaml') @@ -9,3 +10,12 @@ def yaml_module(): except ImportError: pass pytest.skip("Module 'PyYAML' is required") + + +@pytest.fixture(params=[munch.Munch, munch.AutoMunch, munch.DefaultMunch, munch.DefaultFactoryMunch]) +def munch_obj(request): + cls = request.param + args = tuple() + if cls == munch.DefaultFactoryMunch: + args = args + (lambda: None,) + return cls(*args, hello="world", number=5) diff --git a/tests/test_munch.py b/tests/test_munch.py index fc55165..9c645cc 100644 --- a/tests/test_munch.py +++ b/tests/test_munch.py @@ -533,3 +533,7 @@ def __getitem__(self, k): assert custom_munch.a == 42 assert custom_munch.get('b') == 42 assert custom_munch.copy() == Munch(a=42, b=42) + + +def test_get_default_value(munch_obj): + assert munch_obj.get("fake_key", "default_value") == "default_value"