Coverage for tests/conftest.py: 97%

58 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-07-15 09:31 +0000

1import shutil 1abcdef

2import subprocess 1abcdef

3import sys 1abcdef

4from dataclasses import dataclass, field 1abcdef

5from pathlib import Path 1abcdef

6from typing import Any, Callable, Dict, Generator, List, Union 1abcdef

7from unittest.mock import patch 1abcdef

8 

9import pytest 1abcdef

10from pydantic import BaseModel 1abcdef

11from sqlmodel import SQLModel 1abcdef

12from sqlmodel._compat import IS_PYDANTIC_V2 1abcdef

13from sqlmodel.main import default_registry 1abcdef

14 

15top_level_path = Path(__file__).resolve().parent.parent 1abcdef

16docs_src_path = top_level_path / "docs_src" 1abcdef

17 

18 

19@pytest.fixture(autouse=True) 1abcdef

20def clear_sqlmodel() -> Any: 1abcdef

21 # Clear the tables in the metadata for the default base model 

22 SQLModel.metadata.clear() 1abcdef

23 # Clear the Models associated with the registry, to avoid warnings 

24 default_registry.dispose() 1abcdef

25 yield 1abcdef

26 SQLModel.metadata.clear() 1abcdef

27 default_registry.dispose() 1abcdef

28 

29 

30@pytest.fixture() 1abcdef

31def cov_tmp_path(tmp_path: Path) -> Generator[Path, None, None]: 1abcdef

32 yield tmp_path 1abcdef

33 for coverage_path in tmp_path.glob(".coverage*"): 1abcdef

34 coverage_destiny_path = top_level_path / coverage_path.name 

35 shutil.copy(coverage_path, coverage_destiny_path) 

36 

37 

38def coverage_run(*, module: str, cwd: Union[str, Path]) -> subprocess.CompletedProcess: 1abcdef

39 result = subprocess.run( 2bicidieifigihiiijiki

40 [ 

41 "coverage", 

42 "run", 

43 "--parallel-mode", 

44 "--source=docs_src,tests,sqlmodel", 

45 "-m", 

46 module, 

47 ], 

48 cwd=str(cwd), 

49 capture_output=True, 

50 encoding="utf-8", 

51 ) 

52 return result 2bicidieifigihiiijiki

53 

54 

55def get_testing_print_function( 1abcdef

56 calls: List[List[Union[str, Dict[str, Any]]]], 

57) -> Callable[..., Any]: 

58 def new_print(*args: Any) -> None: 2a (b)b*b+b,b-b.b/b:b;b=b?b@b[brgsghbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl tguglbmbhcicjckcvgwgxgygzgAgBgCgDgEgFgb lcmcncocpcqcrcsctcucvcwcxcyczcGgHgnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgrbsbXcYcZc0cKgLgMgNgOgPgQgRgSgTgUgc 1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgtbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gBbCbDbEbFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gd NdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`gNbObPbQbreseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhe zeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvhRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhZb0b1b2bdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhf lfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h#b$b%b'b?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

59 data: List[Any] = [] 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[brgsghbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl tguglbmbhcicjckcvgwgxgygzgAgBgCgDgEgFglcmcnc[h]hocpcqcrcsctcucvcwcxcyczcGgHgnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgrbsbXcYcZc0cKgLgMgNgOgPgQgRgSgTgUg1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgtbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gBbCbDbEbFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`gNbObPbQbreseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhzeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvhRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhZb0b1b2bdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhlfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h#b$b%b'b?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

60 for arg in args: 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[brgsghbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl tguglbmbhcicjckcvgwgxgygzgAgBgCgDgEgFglcmcnc[h]hocpcqcrcsctcucvcwcxcyczcGgHgnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgrbsbXcYcZc0cKgLgMgNgOgPgQgRgSgTgUg1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgtbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gBbCbDbEbFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`gNbObPbQbreseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhzeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvhRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhZb0b1b2bdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhlfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h#b$b%b'b?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

61 if isinstance(arg, BaseModel): 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[brgsghbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl tguglbmbhcicjckcvgwgxgygzgAgBgCgDgEgFglcmcnc[h]hocpcqcrcsctcucvcwcxcyczcGgHgnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgrbsbXcYcZc0cKgLgMgNgOgPgQgRgSgTgUg1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgtbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gBbCbDbEbFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`gNbObPbQbreseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhzeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvhRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhZb0b1b2bdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhlfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h#b$b%b'b?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

62 data.append(arg.model_dump()) 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[brgsgg h i ]b^b_b`b{b|b}bj k ~bacbcccdcecfcgcl tgughcicjckcvgwgxgygzgAgBgCgDgEgFglcmcnc[h]hocpcqcrcsctcucvcwcxcyczcGgHgm n o p q r AcBcCcDcEcFcGcs t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgXcYcZc0cKgLgMgNgOgPgQgRgSgTgUg1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgy z A B C D E F G ^c_c`c{c|c}c~cadbdcdddedfdgdH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gQ R S T U V W X Y )d*d+d,d-d.d/d:d;d=d?d@d[d]dZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`greseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhzeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvh8 9 ! # $ % ' ( ) 2e3e4e5e6e7e8e9e!e#e$e%e'e(e* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhlfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh? @ [ ] ^ _ ` { | OfPfQfRfSfTfUfVfWfXfYfZf0f1f} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

63 elif isinstance(arg, list): 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[bhbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl lbmbhcicjckclcmcnc[h]hocpcqcrcsctcucvcwcxcyczcnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x rbsbXcYcZc0c1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]ctbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P BbCbDbEbFdGdHdIdJdKdLdMdNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(dFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 NbObPbQbreseteuevewexeyezeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = Zb0b1b2bdfefffgfhfifjfkflfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNf3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb#b$b%b'b?f@f[f]f^f_f`f{f

64 new_list = [] 2hbibjbkbg h i j k l lbmbnbobpbqbm n o p q r s t u v w x rbsbtbubvbwbxbybzbAby z A B C D E F G H I J K L M N O P BbCbDbEbFbGbHbIbJbKbLbMbQ R S T U V W X Y Z 0 1 2 3 4 5 6 7 NbObPbQbRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) * + , - . / : ; = Zb0b1b2b3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgb#b$b%b'b

65 for item in arg: 2hbibjbkbg h i j k l lbmbnbobpbqbm n o p q r s t u v w x rbsbtbubvbwbxbybzbAby z A B C D E F G H I J K L M N O P BbCbDbEbFbGbHbIbJbKbLbMbQ R S T U V W X Y Z 0 1 2 3 4 5 6 7 NbObPbQbRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) * + , - . / : ; = Zb0b1b2b3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgb#b$b%b'b

66 if isinstance(item, BaseModel): 2hbibjbkbg h i j k l lbmbnbobpbqbm n o p q r s t u v w x rbsbtbubvbwbxbybzbAby z A B C D E F G H I J K L M N O P BbCbDbEbFbGbHbIbJbKbLbMbQ R S T U V W X Y Z 0 1 2 3 4 5 6 7 NbObPbQbRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) * + , - . / : ; = Zb0b1b2b3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgb#b$b%b'b

67 new_list.append(item.model_dump()) 2hbibjbkbg h i j k l lbmbnbobpbqbm n o p q r s t u v w x rbsbtbubvbwbxbybzbAby z A B C D E F G H I J K L M N O P BbCbDbEbFbGbHbIbJbKbLbMbQ R S T U V W X Y Z 0 1 2 3 4 5 6 7 NbObPbQbRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) * + , - . / : ; = Zb0b1b2b3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgb#b$b%b'b

68 data.append(new_list) 2hbibjbkbg h i j k l lbmbnbobpbqbm n o p q r s t u v w x rbsbtbubvbwbxbybzbAby z A B C D E F G H I J K L M N O P BbCbDbEbFbGbHbIbJbKbLbMbQ R S T U V W X Y Z 0 1 2 3 4 5 6 7 NbObPbQbRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) * + , - . / : ; = Zb0b1b2b3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgb#b$b%b'b

69 else: 

70 data.append(arg) 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[bg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl hcicjckclcmcnc[h]hocpcqcrcsctcucvcwcxcyczcm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x XcYcZc0c1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cy z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P FdGdHdIdJdKdLdMdNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(dQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 reseteuevewexeyezeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = dfefffgfhfifjfkflfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNf? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb?f@f[f]f^f_f`f{f

71 calls.append(data) 2(b)b*b?h@h+b,b-b.b/b:b;b=b?b@b[brgsghbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl tguglbmbhcicjckcvgwgxgygzgAgBgCgDgEgFglcmcnc[h]hocpcqcrcsctcucvcwcxcyczcGgHgnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgrbsbXcYcZc0cKgLgMgNgOgPgQgRgSgTgUg1c2c3c4c5c6c^h_h7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgtbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gBbCbDbEbFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gNdOdPdQdRdSd`h{hTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`gNbObPbQbreseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhzeAeBeCeDeEe|h}hFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvhRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhZb0b1b2bdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhlfmfnfofpfqf~hairfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h#b$b%b'b?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

72 

73 return new_print 2a (b)b*b+b,b-b.b/b:b;b=b?b@b[brgsghbibjbkbg h i ]b|f^b_b`b{b|b}b}fj k ~bacbcccdcecfcgcl tguglbmbhcicjckcvgwgxgygzgAgBgCgDgEgFgb lcmcncocpcqcrcsctcucvcwcxcyczcGgHgnbobpbqbm n o p q r Ac~fBcCcDcEcFcGcags t u v HcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcw x IgJgrbsbXcYcZc0cKgLgMgNgOgPgQgRgSgTgUgc 1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cVgWgXgYgtbubvbwbxbybzbAby z A B C D E F G ^c_cbgcg`c{c|c}c~cadbdcdddedfdgddgegH I J K L M hdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdN O P Zg0g1g2gBbCbDbEbFdGdHdIdJdKdLdMd3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;gd NdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d=g?g@g[gFbGbHbIbJbKbLbMbQ R S T U V W X Y )d*dfggg+d,d-d.d/d:d;d=d?d@d[d]dhgigZ 0 1 2 3 4 ^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqe5 6 7 ]g^g_g`gNbObPbQbreseteuevewexeye{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhe zeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eshthuhvhRbSbTbUbVbWbXbYb8 9 ! # $ % ' ( ) 2e3ejgkg4e5e6e7e8e9e!e#e$e%e'e(elgmg* + , - . / )e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcf: ; = whxhyhzhZb0b1b2bdfefffgfhfifjfkfAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhf lfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfWhXhYhZh3b4b5b6b7b8b9b!b? @ [ ] ^ _ ` { | OfPfngogQfRfSfTfUfVfWfXfYfZf0f1fpgqg} ~ abbbcbdb2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=febfbgb0h1h2h3h#b$b%b'b?f@f[f]f^f_f`f{f4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h

74 

75 

76@dataclass 1abcdef

77class PrintMock: 1abcdef

78 calls: List[Any] = field(default_factory=list) 1abcdef

79 

80 

81@pytest.fixture(name="print_mock") 1abcdef

82def print_mock_fixture() -> Generator[PrintMock, None, None]: 1abcdef

83 print_mock = PrintMock() 1abcdef

84 new_print = get_testing_print_function(print_mock.calls) 1abcdef

85 with patch("builtins.print", new=new_print): 1abcdef

86 yield print_mock 1abcdef

87 

88 

89needs_pydanticv2 = pytest.mark.skipif(not IS_PYDANTIC_V2, reason="requires Pydantic v2") 1abcdef

90needs_pydanticv1 = pytest.mark.skipif(IS_PYDANTIC_V2, reason="requires Pydantic v1") 1abcdef

91 

92needs_py39 = pytest.mark.skipif(sys.version_info < (3, 9), reason="requires python3.9+") 1abcdef

93needs_py310 = pytest.mark.skipif( 1abcdef

94 sys.version_info < (3, 10), reason="requires python3.10+" 

95)