From 8d73d425b1929a8c905f48acffb6a7984b670b13 Mon Sep 17 00:00:00 2001 From: Lungang Fang <6370184+lgfang@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:51:01 +1100 Subject: [PATCH] In sources.py, define T as a covariant type variable. Previously, the type parameter was invariant, leading Pyright to report a type incompatibility error: ``` $ pyright test ... "CliSettingsSource[MyOptions]" is not assignable to "CliSettingsSource[object]" Type parameter "T@CliSettingsSource" is invariant, but "MyOptions" is not the same as "object" (reportAssignmentType) ... ``` Here's the content of `test.py`: ``` from pydantic_settings import BaseSettings, EnvSettingsSource, CliSettingsSource class OptionsBase: pass class MyOptions(OptionsBase): pass cli_source: CliSettingsSource[object] = CliSettingsSource[MyOptions](BaseSettings) ``` --- pydantic_settings/sources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydantic_settings/sources.py b/pydantic_settings/sources.py index cfbbac08..55d6aecb 100644 --- a/pydantic_settings/sources.py +++ b/pydantic_settings/sources.py @@ -165,7 +165,7 @@ class CliMutuallyExclusiveGroup(BaseModel): pass -T = TypeVar('T') +T = TypeVar('T', covariant=True) CliSubCommand = Annotated[Union[T, None], _CliSubCommand] CliPositionalArg = Annotated[T, _CliPositionalArg] _CliBoolFlag = TypeVar('_CliBoolFlag', bound=bool)