Coverage for pydantic/_internal/_serializers.py: 92.59%
21 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-22 09:30 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-22 09:30 +0000
1from __future__ import annotations 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
3import collections 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
4import collections.abc 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
5import typing 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
6from typing import Any 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
8from pydantic_core import PydanticOmit, core_schema 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL
10SEQUENCE_ORIGIN_MAP: dict[Any, Any] = { 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL
11 typing.Deque: collections.deque, # noqa: UP006
12 collections.deque: collections.deque,
13 list: list,
14 typing.List: list, # noqa: UP006
15 tuple: tuple,
16 typing.Tuple: tuple, # noqa: UP006
17 set: set,
18 typing.AbstractSet: set,
19 typing.Set: set, # noqa: UP006
20 frozenset: frozenset,
21 typing.FrozenSet: frozenset, # noqa: UP006
22 typing.Sequence: list,
23 typing.MutableSequence: list,
24 typing.MutableSet: set,
25 # this doesn't handle subclasses of these
26 # parametrized typing.Set creates one of these
27 collections.abc.MutableSet: set,
28 collections.abc.Set: frozenset,
29}
32def serialize_sequence_via_list( 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL
33 v: Any, handler: core_schema.SerializerFunctionWrapHandler, info: core_schema.SerializationInfo
34) -> Any:
35 items: list[Any] = [] 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
37 mapped_origin = SEQUENCE_ORIGIN_MAP.get(type(v), None) 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
38 if mapped_origin is None: 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
39 # we shouldn't hit this branch, should probably add a serialization error or something
40 return v 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
42 for index, item in enumerate(v): 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
43 try: 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
44 v = handler(item, index) 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
45 except PydanticOmit:
46 pass
47 else:
48 items.append(v) 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
50 if info.mode_is_json(): 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
51 return items 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO
52 else:
53 return mapped_origin(items) 1abcdefghijklMmnopqrstuvwxyzNABCDEFGHIJKLO