Skip to content

Commit e2c89a2

Browse files
committed
Issue #287
1 parent d084a11 commit e2c89a2

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

tests/test_common.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
import sys
21
from typing import List
32

4-
import pytest
53

64
from typedpy import Integer, String, Structure, StructureReference
7-
from typedpy.commons import deep_get, nested
5+
from typedpy.commons import deep_get, nested, Undefined
86

97

108
def test_deep_get():
119
assert deep_get({"a1": {"b": {"c": 5}}, "a2": 2}, "a1.b.c") == 5
1210
assert deep_get({"a1": {"b": {"c": 5}}, "a2": 2}, "a2") == 2
1311
assert deep_get({"a1": {"b": {"c": 5}}, "a2": 2}, "a1.x") is None
12+
assert deep_get({}, "x.y") is None
13+
assert deep_get({}, "x.y", enable_undefined=True) is Undefined
1414

15-
16-
@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7 or higher")
1715
def test_nested_list():
1816
class Bar(Structure):
1917
x = StructureReference(i=Integer(), s=String())

tests/test_undefined.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,8 @@ def test_undefined_serialization():
4444
assert Serializer(Foo(a=None)).serialize() == {"a": None, "d": 5}
4545
assert Serializer(Foo()).serialize() == {"d": 5}
4646
assert Serializer(Bar()).serialize() == {}
47+
48+
49+
def test_deserialize_empty_with_undefined():
50+
foo = Deserializer(Foo).deserialize({})
51+
assert foo.a is Undefined

typedpy/commons.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ def _get_next_level(
199199
return default
200200

201201
keys = deep_key.split(".")
202+
if not dictionary:
203+
return Undefined if enable_undefined else None
202204
result = reduce(
203205
lambda d, key: _get_next_level(
204206
d, key, default, enable_undefined=enable_undefined

0 commit comments

Comments
 (0)