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"