@@ -19,10 +19,53 @@ def keygetter(
1919) -> Union [None , Any , str , list [str ], Mapping [str , str ]]:
2020 """Fetch values in objects and keys, deeply.
2121
22- >>> keygetter({ "foods": { "breakfast": "cereal" } }, "foods__breakfast")
23- 'cereal'
24- >>> keygetter({ "foods ": { "breakfast": "cereal" } }, "foods ")
22+ **With dictionaries**:
23+
24+ >>> keygetter({ "menu ": { "breakfast": "cereal" } }, "menu ")
2525 {'breakfast': 'cereal'}
26+
27+ >>> keygetter({ "menu": { "breakfast": "cereal" } }, "menu__breakfast")
28+ 'cereal'
29+
30+ **With objects**:
31+
32+ >>> from typing import Optional
33+ >>> from dataclasses import dataclass, field
34+
35+ >>> @dataclass()
36+ ... class Menu:
37+ ... fruit: list[str] = field(default_factory=list)
38+ ... breakfast: Optional[str] = None
39+
40+
41+ >>> @dataclass()
42+ ... class Restaurant:
43+ ... place: str
44+ ... city: str
45+ ... state: str
46+ ... menu: Menu = field(default_factory=Menu)
47+
48+
49+ >>> restaurant = Restaurant(
50+ ... place="Largo",
51+ ... city="Tampa",
52+ ... state="Florida",
53+ ... menu=Menu(
54+ ... fruit=["banana", "orange"], breakfast="cereal"
55+ ... )
56+ ... )
57+
58+ >>> restaurant
59+ Restaurant(place='Largo',
60+ city='Tampa',
61+ state='Florida',
62+ menu=Menu(fruit=['banana', 'orange'], breakfast='cereal'))
63+
64+ >>> keygetter(restaurant, "menu")
65+ Menu(fruit=['banana', 'orange'], breakfast='cereal')
66+
67+ >>> keygetter(restaurant, "menu__breakfast")
68+ 'cereal'
2669 """
2770 try :
2871 sub_fields = path .split ("__" )
0 commit comments