Coverage for tests / conftest.py: 96%

53 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-06-10 09:40 +0000

1import shutil 1abcdefgh

2import subprocess 1abcdefgh

3from collections.abc import Callable, Generator 1abcdefgh

4from dataclasses import dataclass, field 1abcdefgh

5from pathlib import Path 1abcdefgh

6from typing import Any 1abcdefgh

7from unittest.mock import patch 1abcdefgh

8 

9import pytest 1abcdefgh

10from pydantic import BaseModel 1abcdefgh

11from sqlmodel import SQLModel 1abcdefgh

12from sqlmodel.main import default_registry 1abcdefgh

13 

14top_level_path = Path(__file__).resolve().parent.parent 1abcdefgh

15docs_src_path = top_level_path / "docs_src" 1abcdefgh

16 

17 

18@pytest.fixture(autouse=True) 1abcdefgh

19def clear_sqlmodel() -> Any: 1abcdefgh

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

21 SQLModel.metadata.clear() 1abcdefgh

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

23 default_registry.dispose() 1abcdefgh

24 yield 1abcdefgh

25 SQLModel.metadata.clear() 1abcdefgh

26 default_registry.dispose() 1abcdefgh

27 

28 

29@pytest.fixture() 1abcdefgh

30def cov_tmp_path(tmp_path: Path) -> Generator[Path, None, None]: 1abcdefgh

31 yield tmp_path 1abcdefgh

32 for coverage_path in tmp_path.glob(".coverage*"): 1abcdefgh

33 coverage_destiny_path = top_level_path / "coverage" / coverage_path.name 

34 shutil.copy(coverage_path, coverage_destiny_path) 

35 

36 

37def coverage_run(*, module: str, cwd: str | Path) -> subprocess.CompletedProcess: 1abcdefgh

38 result = subprocess.run( 2:f;f=f?f@f[f]f^f

39 [ 

40 "coverage", 

41 "run", 

42 "--parallel-mode", 

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

44 "-m", 

45 module, 

46 ], 

47 cwd=str(cwd), 

48 capture_output=True, 

49 encoding="utf-8", 

50 ) 

51 return result 2:f;f=f?f@f[f]f^f

52 

53 

54def get_testing_print_function( 1abcdefgh

55 calls: list[list[str | dict[str, Any]]], 

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

57 def new_print(*args: Any) -> None: 1abcdefgh

58 data: list[Any] = [] 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEbSeTe4 5 6 7 i j k FbCeGbHbIbJbKbLbDel m MbNbObPbQbRbSbTbn UeVe8 9 UbVbWbXbWeXeYeZe0e1e2e3e4e5e6eYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b7e8e! # $ % o p q 'bEe(b)b*b+b,b-bFer s .b/b:b;b=b?b@b[bt 9e!e' ( ]b^b_b`b#e$e%e'e(e)e*e+e,e-e.e{b|b}b~bacbcccdcecfcgchcicjckclc/e:e) * + , u v w mcGencocpcqcrcscHex y tcucvcwcxcyczcAcz ;e=e- . BcCcDcEc?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcafbf/ : ; = A B C VcIeWcXcYcZc0c1cJeD E 2c3c4c5c6c7c8c9cF cfdf? @ !c#c$c%cefffgfhfifjfkflfmfnfof'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cpfqf[ ] ^ _ G H I ^cKe_c`c{c|c}c~cLeJ K adbdcdddedfdgdhdL rfsf` { idjdkdldtfufvfwfxfyfzfAfBfCfDfmdndodpdqdrdsdtdudvdwdxdydzdAdBdEfFf| } ~ abM N O CdMeDdEdFdGdHdIdNeP Q JdKdLdMdNdOdPdQdR GfHfbbcbRdSdTdUdIfJfKfLfMfNfOfPfQfRfSfVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!dTfUfdbebfbgbS T U #dOe$d%d'd(d)d*dPeV W +d,d-d.d/d:d;d=dX VfWfhbib?d@d[d]dXfYfZf0f1f2f3f4f5f6f7f^d_d`d{d|d}d~daebecedeeefegeheie8f9fjbkblbmbY Z 0 jeQekelemeneoepeRe1 2 qereseteuevewexe3 !f#fnbobyezeAeBe$f%f'f(f)f*f+f,f-f.f/f

59 for arg in args: 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEbSeTe4 5 6 7 i j k FbCeGbHbIbJbKbLbDel m MbNbObPbQbRbSbTbn UeVe8 9 UbVbWbXbWeXeYeZe0e1e2e3e4e5e6eYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b7e8e! # $ % o p q 'bEe(b)b*b+b,b-bFer s .b/b:b;b=b?b@b[bt 9e!e' ( ]b^b_b`b#e$e%e'e(e)e*e+e,e-e.e{b|b}b~bacbcccdcecfcgchcicjckclc/e:e) * + , u v w mcGencocpcqcrcscHex y tcucvcwcxcyczcAcz ;e=e- . BcCcDcEc?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcafbf/ : ; = A B C VcIeWcXcYcZc0c1cJeD E 2c3c4c5c6c7c8c9cF cfdf? @ !c#c$c%cefffgfhfifjfkflfmfnfof'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cpfqf[ ] ^ _ G H I ^cKe_c`c{c|c}c~cLeJ K adbdcdddedfdgdhdL rfsf` { idjdkdldtfufvfwfxfyfzfAfBfCfDfmdndodpdqdrdsdtdudvdwdxdydzdAdBdEfFf| } ~ abM N O CdMeDdEdFdGdHdIdNeP Q JdKdLdMdNdOdPdQdR GfHfbbcbRdSdTdUdIfJfKfLfMfNfOfPfQfRfSfVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!dTfUfdbebfbgbS T U #dOe$d%d'd(d)d*dPeV W +d,d-d.d/d:d;d=dX VfWfhbib?d@d[d]dXfYfZf0f1f2f3f4f5f6f7f^d_d`d{d|d}d~daebecedeeefegeheie8f9fjbkblbmbY Z 0 jeQekelemeneoepeRe1 2 qereseteuevewexe3 !f#fnbobyezeAeBe$f%f'f(f)f*f+f,f-f.f/f

60 if isinstance(arg, BaseModel): 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEbSeTe4 5 6 7 i j k FbCeGbHbIbJbKbLbDel m MbNbObPbQbRbSbTbn UeVe8 9 UbVbWbXbWeXeYeZe0e1e2e3e4e5e6eYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b7e8e! # $ % o p q 'bEe(b)b*b+b,b-bFer s .b/b:b;b=b?b@b[bt 9e!e' ( ]b^b_b`b#e$e%e'e(e)e*e+e,e-e.e{b|b}b~bacbcccdcecfcgchcicjckclc/e:e) * + , u v w mcGencocpcqcrcscHex y tcucvcwcxcyczcAcz ;e=e- . BcCcDcEc?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcafbf/ : ; = A B C VcIeWcXcYcZc0c1cJeD E 2c3c4c5c6c7c8c9cF cfdf? @ !c#c$c%cefffgfhfifjfkflfmfnfof'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cpfqf[ ] ^ _ G H I ^cKe_c`c{c|c}c~cLeJ K adbdcdddedfdgdhdL rfsf` { idjdkdldtfufvfwfxfyfzfAfBfCfDfmdndodpdqdrdsdtdudvdwdxdydzdAdBdEfFf| } ~ abM N O CdMeDdEdFdGdHdIdNeP Q JdKdLdMdNdOdPdQdR GfHfbbcbRdSdTdUdIfJfKfLfMfNfOfPfQfRfSfVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!dTfUfdbebfbgbS T U #dOe$d%d'd(d)d*dPeV W +d,d-d.d/d:d;d=dX VfWfhbib?d@d[d]dXfYfZf0f1f2f3f4f5f6f7f^d_d`d{d|d}d~daebecedeeefegeheie8f9fjbkblbmbY Z 0 jeQekelemeneoepeRe1 2 qereseteuevewexe3 !f#fnbobyezeAeBe$f%f'f(f)f*f+f,f-f.f/f

61 data.append(arg.model_dump()) 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEbSeTei j k FbGbHbIbJbKbLbl m MbNbObPbQbRbSbTbn UeVeUbVbWbXbWeXeYeZe0e1e2e3e4e5e6eYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b7e8eo p q 'b(b)b*b+b,b-br s .b/b:b;b=b?b@b[bt 9e!e]b^b_b`b#e$e%e'e(e)e*e+e,e-e.e{b|b}b~bacbcccdcecfcgchcicjckclc/e:eu v w mcncocpcqcrcscx y tcucvcwcxcyczcAcz ;e=eBcCcDcEc?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcafbfA B C VcWcXcYcZc0c1cD E 2c3c4c5c6c7c8c9cF cfdf!c#c$c%cefffgfhfifjfkflfmfnfof'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cpfqfG H I ^c_c`c{c|c}c~cJ K adbdcdddedfdgdhdL rfsfidjdkdldtfufvfwfxfyfzfAfBfCfDfmdndodpdqdrdsdtdudvdwdxdydzdAdBdEfFfM N O CdDdEdFdGdHdIdP Q JdKdLdMdNdOdPdQdR GfHfRdSdTdUdIfJfKfLfMfNfOfPfQfRfSfVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!dTfUfS T U #d$d%d'd(d)d*dV W +d,d-d.d/d:d;d=dX VfWf?d@d[d]dXfYfZf0f1f2f3f4f5f6f7f^d_d`d{d|d}d~daebecedeeefegeheie8f9fY Z 0 jekelemeneoepe1 2 qereseteuevewexe3 !f#fyezeAeBe$f%f'f(f)f*f+f,f-f.f/f

62 elif isinstance(arg, list): 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEb4 5 6 7 i j k FbCeGbHbIbJbKbLbDel m MbNbObPbQbRbSbTbn 8 9 UbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b! # $ % o p q 'bEe(b)b*b+b,b-bFer s .b/b:b;b=b?b@b[bt ' ( ]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclc) * + , u v w mcGencocpcqcrcscHex y tcucvcwcxcyczcAcz - . BcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUc/ : ; = A B C VcIeWcXcYcZc0c1cJeD E 2c3c4c5c6c7c8c9cF ? @ !c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c[ ] ^ _ G H I ^cKe_c`c{c|c}c~cLeJ K adbdcdddedfdgdhdL ` { idjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd| } ~ abM N O CdMeDdEdFdGdHdIdNeP Q JdKdLdMdNdOdPdQdR bbcbRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!ddbebfbgbS T U #dOe$d%d'd(d)d*dPeV W +d,d-d.d/d:d;d=dX hbib?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejbkblbmbY Z 0 jeQekelemeneoepeRe1 2 qereseteuevewexe3 nbobyezeAeBe

63 new_list = [] 24 5 6 7 i j k l m n 8 9 ! # $ % o p q r s t ' ( ) * + , u v w x y z - . / : ; = A B C D E F ? @ [ ] ^ _ G H I J K L ` { | } ~ abM N O P Q R bbcbdbebfbgbS T U V W X hbibjbkblbmbY Z 0 1 2 3 nbob

64 for item in arg: 24 5 6 7 i j k l m n 8 9 ! # $ % o p q r s t ' ( ) * + , u v w x y z - . / : ; = A B C D E F ? @ [ ] ^ _ G H I J K L ` { | } ~ abM N O P Q R bbcbdbebfbgbS T U V W X hbibjbkblbmbY Z 0 1 2 3 nbob

65 if isinstance(item, BaseModel): 24 5 6 7 i j k l m n 8 9 ! # $ % o p q r s t ' ( ) * + , u v w x y z - . / : ; = A B C D E F ? @ [ ] ^ _ G H I J K L ` { | } ~ abM N O P Q R bbcbdbebfbgbS T U V W X hbibjbkblbmbY Z 0 1 2 3 nbob

66 new_list.append(item.model_dump()) 24 5 6 7 i j k l m n 8 9 ! # $ % o p q r s t ' ( ) * + , u v w x y z - . / : ; = A B C D E F ? @ [ ] ^ _ G H I J K L ` { | } ~ abM N O P Q R bbcbdbebfbgbS T U V W X hbibjbkblbmbY Z 0 1 2 3 nbob

67 data.append(new_list) 24 5 6 7 i j k l m n 8 9 ! # $ % o p q r s t ' ( ) * + , u v w x y z - . / : ; = A B C D E F ? @ [ ] ^ _ G H I J K L ` { | } ~ abM N O P Q R bbcbdbebfbgbS T U V W X hbibjbkblbmbY Z 0 1 2 3 nbob

68 else: 

69 data.append(arg) 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEbi j k FbCeGbHbIbJbKbLbDel m MbNbObPbQbRbSbTbn UbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%bo p q 'bEe(b)b*b+b,b-bFer s .b/b:b;b=b?b@b[bt ]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcu v w mcGencocpcqcrcscHex y tcucvcwcxcyczcAcz BcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcA B C VcIeWcXcYcZc0c1cJeD E 2c3c4c5c6c7c8c9cF !c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cG H I ^cKe_c`c{c|c}c~cLeJ K adbdcdddedfdgdhdL idjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdM N O CdMeDdEdFdGdHdIdNeP Q JdKdLdMdNdOdPdQdR RdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!dS T U #dOe$d%d'd(d)d*dPeV W +d,d-d.d/d:d;d=dX ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheieY Z 0 jeQekelemeneoepeRe1 2 qereseteuevewexe3 yezeAeBe

70 calls.append(data) 2pbqbrbsbtbubvbwbxbybzbAbBbCbDbEbSeTe4 5 6 7 i j k FbCeGbHbIbJbKbLbDel m MbNbObPbQbRbSbTbn UeVe8 9 UbVbWbXbWeXeYeZe0e1e2e3e4e5e6eYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b7e8e! # $ % o p q 'bEe(b)b*b+b,b-bFer s .b/b:b;b=b?b@b[bt 9e!e' ( ]b^b_b`b#e$e%e'e(e)e*e+e,e-e.e{b|b}b~bacbcccdcecfcgchcicjckclc/e:e) * + , u v w mcGencocpcqcrcscHex y tcucvcwcxcyczcAcz ;e=e- . BcCcDcEc?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcafbf/ : ; = A B C VcIeWcXcYcZc0c1cJeD E 2c3c4c5c6c7c8c9cF cfdf? @ !c#c$c%cefffgfhfifjfkflfmfnfof'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cpfqf[ ] ^ _ G H I ^cKe_c`c{c|c}c~cLeJ K adbdcdddedfdgdhdL rfsf` { idjdkdldtfufvfwfxfyfzfAfBfCfDfmdndodpdqdrdsdtdudvdwdxdydzdAdBdEfFf| } ~ abM N O CdMeDdEdFdGdHdIdNeP Q JdKdLdMdNdOdPdQdR GfHfbbcbRdSdTdUdIfJfKfLfMfNfOfPfQfRfSfVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!dTfUfdbebfbgbS T U #dOe$d%d'd(d)d*dPeV W +d,d-d.d/d:d;d=dX VfWfhbib?d@d[d]dXfYfZf0f1f2f3f4f5f6f7f^d_d`d{d|d}d~daebecedeeefegeheie8f9fjbkblbmbY Z 0 jeQekelemeneoepeRe1 2 qereseteuevewexe3 !f#fnbobyezeAeBe$f%f'f(f)f*f+f,f-f.f/f

71 

72 return new_print 1abcdefgh

73 

74 

75@dataclass 1abcdefgh

76class PrintMock: 1abcdefgh

77 calls: list[Any] = field(default_factory=list) 1abcdefgh

78 

79 

80@pytest.fixture(name="print_mock") 1abcdefgh

81def print_mock_fixture() -> Generator[PrintMock, None, None]: 1abcdefgh

82 print_mock = PrintMock() 1abcdefgh

83 new_print = get_testing_print_function(print_mock.calls) 1abcdefgh

84 with patch("builtins.print", new=new_print): 1abcdefgh

85 yield print_mock 1abcdefgh