pydantic: add support for SecretStr
pydantic offers its own SecretStr
(documentation)
Current this doesn't seem to work.
import click
import typed_settings
from pydantic import BaseModel, Field, SecretStr
class Settings(BaseModel):
secret: SecretStr = Field(
default="my secret",
)
@click.command()
@typed_settings.click_options(Settings, "myapp")
def cli(settings: Settings) -> None:
print(settings)
if __name__ == "__main__":
cli()
causes:
Traceback (most recent call last):
File "/src/.venv/lib/python3.11/site-packages/typed_settings/cli_utils.py", line 431, in get_default
default = converter.structure(default, option_info.cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/src/.venv/lib/python3.11/site-packages/typed_settings/converters.py", line 148, in structure
raise TypeError(f"Cannot create converter for generic type: {cls}")
TypeError: Cannot create converter for generic type: <class 'pydantic.types.SecretStr'>
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/src/my_package/__main__.py", line 1, in <module>
from my_package.cli import cli as main
File "/src/my_package/cli.py", line 30, in <module>
@typed_settings.click_options(Settings, "myapp")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/src/.venv/lib/python3.11/site-packages/typed_settings/cli_click.py", line 258, in wrap
default = get_default(oinfo, merged_settings, state.converter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/src/.venv/lib/python3.11/site-packages/typed_settings/cli_utils.py", line 433, in get_default
raise ValueError(
ValueError: Invalid default for type <class 'pydantic.types.SecretStr'>: my secret