-
-
Notifications
You must be signed in to change notification settings - Fork 105
Closed
Description
Hi 👋
I just saw the FastAPI 0.100.0 prerelease announcement, the Pydantic v2 migration guide and wanted to give this all a try with one of my project's test suites with the latest and greatest.
I ended up getting this error:
self = EnvSettingsSource(env_nested_delimiter=None, env_prefix_len=0)
def __call__(self) -> dict[str, Any]:
data: dict[str, Any] = {}
for field_name, field in self.settings_cls.model_fields.items():
try:
field_value, field_key, value_is_complex = self.get_field_value(field, field_name)
except Exception as e:
raise SettingsError(
f'error getting value for field "{field_name}" from source "{self.__class__.__name__}"'
) from e
try:
field_value = self.prepare_field_value(field_name, field, field_value, value_is_complex)
except ValueError as e:
> raise SettingsError(
f'error parsing value for field "{field_name}" from source "{self.__class__.__name__}"'
) from e
E pydantic_settings.sources.SettingsError: error parsing value for field "ui_languages" from source "EnvSettingsSource"
And this is my code that triggered the error when calling LanguageSettings().ui_languages
:
from pathlib import Path
from pydantic import Field
from pydantic_settings import BaseSettings
def comma_separated_string_to_set(raw_value: str) -> set[str]:
if not raw_value:
msg = f"{raw_value} must be a comma separated string"
raise ValueError(msg)
return {item.strip() for item in raw_value.split(",")}
class LanguageSettings(BaseSettings):
ui_languages: set[str] = Field(env="UI_LANGUAGES")
class Config:
env_file = Path("envs/test.env")
@classmethod
def parse_env_var(cls, field_name: str, raw_val: str) -> Any:
if field_name == "ui_languages":
return comma_separated_string_to_set(raw_val)
Here's my poetry config:
[tool.poetry.dependencies]
fastapi = {extras = ["all"], version = "^0.100.0b1", allow-prereleases = true}
pydantic = {version = "^2.0b3", allow-prereleases = true}
pydantic-settings = {version = "^2.0b1", allow-prereleases = true}
Is all this expected when moving from old/current Pydantic, or is there a bug in pydantic-settings
?
Metadata
Metadata
Assignees
Labels
No labels