Coverage for pydantic/_internal/_serializers.py: 92.59%

21 statements  

« prev     ^ index     » next       coverage.py v7.10.0, created at 2025-07-26 11:49 +0000

1from __future__ import annotations 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

2 

3import collections 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

4import collections.abc 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

5import typing 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

6from typing import Any 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

7 

8from pydantic_core import PydanticOmit, core_schema 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

9 

10SEQUENCE_ORIGIN_MAP: dict[Any, Any] = { 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

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} 

30 

31 

32def serialize_sequence_via_list( 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

33 v: Any, handler: core_schema.SerializerFunctionWrapHandler, info: core_schema.SerializationInfo 

34) -> Any: 

35 items: list[Any] = [] 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

36 

37 mapped_origin = SEQUENCE_ORIGIN_MAP.get(type(v), None) 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

38 if mapped_origin is None: 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

39 # we shouldn't hit this branch, should probably add a serialization error or something 

40 return v 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

41 

42 for index, item in enumerate(v): 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

43 try: 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

44 v = handler(item, index) 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

45 except PydanticOmit: 

46 pass 

47 else: 

48 items.append(v) 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

49 

50 if info.mode_is_json(): 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

51 return items 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO

52 else: 

53 return mapped_origin(items) 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO