Skip to content

Commit 133d4eb

Browse files
committed
docs(query_list): More detailed docs for keygetter
1 parent d73d110 commit 133d4eb

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

src/libvcs/_internal/query_list.py

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)