From b1fd0e35f65caa6e0e678ed52ee80a247c2afb02 Mon Sep 17 00:00:00 2001 From: Kyle Schwab Date: Thu, 6 Jun 2024 16:51:54 -0600 Subject: [PATCH] Initialize CLI source on demand. --- pydantic_settings/main.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pydantic_settings/main.py b/pydantic_settings/main.py index 3b3ba434..333980f7 100644 --- a/pydantic_settings/main.py +++ b/pydantic_settings/main.py @@ -256,22 +256,6 @@ def _settings_build_values( # Configure built-in sources init_settings = InitSettingsSource(self.__class__, init_kwargs=init_kwargs) - cli_settings = ( - CliSettingsSource( - self.__class__, - cli_prog_name=cli_prog_name, - cli_parse_args=cli_parse_args, - cli_parse_none_str=cli_parse_none_str, - cli_hide_none_type=cli_hide_none_type, - cli_avoid_json=cli_avoid_json, - cli_enforce_required=cli_enforce_required, - cli_use_class_docs_for_groups=cli_use_class_docs_for_groups, - cli_prefix=cli_prefix, - case_sensitive=case_sensitive, - ) - if cli_settings_source is None - else cli_settings_source - ) env_settings = EnvSettingsSource( self.__class__, case_sensitive=case_sensitive, @@ -305,7 +289,23 @@ def _settings_build_values( file_secret_settings=file_secret_settings, ) if not any([source for source in sources if isinstance(source, CliSettingsSource)]): - if cli_parse_args or cli_settings_source: + if cli_parse_args is not None or cli_settings_source is not None: + cli_settings = ( + CliSettingsSource( + self.__class__, + cli_prog_name=cli_prog_name, + cli_parse_args=cli_parse_args, + cli_parse_none_str=cli_parse_none_str, + cli_hide_none_type=cli_hide_none_type, + cli_avoid_json=cli_avoid_json, + cli_enforce_required=cli_enforce_required, + cli_use_class_docs_for_groups=cli_use_class_docs_for_groups, + cli_prefix=cli_prefix, + case_sensitive=case_sensitive, + ) + if cli_settings_source is None + else cli_settings_source + ) sources = (cli_settings,) + sources if sources: return deep_update(*reversed([source() for source in sources]))