MCPcopy
hub / github.com/pydantic/pydantic / test_value_items

Function test_value_items

tests/test_utils.py:136–190  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

134
135
136def test_value_items():
137 v = ['a', 'b', 'c']
138 vi = ValueItems(v, {0, -1})
139 assert vi.is_excluded(2)
140 assert [v_ for i, v_ in enumerate(v) if not vi.is_excluded(i)] == ['b']
141
142 assert vi.is_included(2)
143 assert [v_ for i, v_ in enumerate(v) if vi.is_included(i)] == ['a', 'c']
144
145 v2 = {'a': v, 'b': {'a': 1, 'b': (1, 2)}, 'c': 1}
146
147 vi = ValueItems(v2, {'a': {0, -1}, 'b': {'a': ..., 'b': -1}})
148
149 assert not vi.is_excluded('a')
150 assert vi.is_included('a')
151 assert not vi.is_excluded('c')
152 assert not vi.is_included('c')
153
154 assert str(vi) == "{'a': {0, -1}, 'b': {'a': Ellipsis, 'b': -1}}"
155 assert repr(vi) == "ValueItems({'a': {0, -1}, 'b': {'a': Ellipsis, 'b': -1}})"
156
157 excluded = {k_: v_ for k_, v_ in v2.items() if not vi.is_excluded(k_)}
158 assert excluded == {'a': v, 'b': {'a': 1, 'b': (1, 2)}, 'c': 1}
159
160 included = {k_: v_ for k_, v_ in v2.items() if vi.is_included(k_)}
161 assert included == {'a': v, 'b': {'a': 1, 'b': (1, 2)}}
162
163 sub_v = included['a']
164 sub_vi = ValueItems(sub_v, vi.for_element('a'))
165 assert repr(sub_vi) == 'ValueItems({0: Ellipsis, 2: Ellipsis})'
166
167 assert sub_vi.is_excluded(2)
168 assert [v_ for i, v_ in enumerate(sub_v) if not sub_vi.is_excluded(i)] == ['b']
169
170 assert sub_vi.is_included(2)
171 assert [v_ for i, v_ in enumerate(sub_v) if sub_vi.is_included(i)] == ['a', 'c']
172
173 vi = ValueItems([], {'__all__': {}})
174 assert vi._items == {}
175
176 with pytest.raises(TypeError, match='Unexpected type of exclude value for index "a" <class \'NoneType\'>'):
177 ValueItems(['a', 'b'], {'a': None})
178
179 m = (
180 'Excluding fields from a sequence of sub-models or dicts must be performed index-wise: '
181 'expected integer keys or keyword "__all__"'
182 )
183 with pytest.raises(TypeError, match=m):
184 ValueItems(['a', 'b'], {'a': {}})
185
186 vi = ValueItems([1, 2, 3, 4], {'__all__': True})
187 assert repr(vi) == 'ValueItems({0: Ellipsis, 1: Ellipsis, 2: Ellipsis, 3: Ellipsis})'
188
189 vi = ValueItems([1, 2], {'__all__': {1, 2}})
190 assert repr(vi) == 'ValueItems({0: {1: Ellipsis, 2: Ellipsis}, 1: {1: Ellipsis, 2: Ellipsis}})'
191
192
193@pytest.mark.parametrize(

Callers

nothing calls this directly

Calls 5

is_excludedMethod · 0.95
is_includedMethod · 0.95
for_elementMethod · 0.95
ValueItemsClass · 0.90
itemsMethod · 0.45

Tested by

no test coverage detected