@@ -22,6 +22,8 @@ pixi add pydantic-settings-sops
2222To use pydantic-settings-sops, adjust your settings sources by defining a custom ` settings_customise_sources ` .
2323For more information on ` pydantic-settings ` , please visit the [ official documentation] ( https://docs.pydantic.dev/latest/concepts/pydantic_settings ) .
2424
25+ If your settings are always encrypted with SOPS, you can use the following example:
26+
2527``` py
2628from pydantic_settings import (
2729 BaseSettings,
@@ -31,22 +33,44 @@ from pydantic_settings import (
3133from pydantic_settings_sops import SOPSConfigSettingsSource
3234
3335class SettingsExample (BaseSettings ):
34- model_config = SettingsConfigDict(
35- yaml_file = " secrets.yaml"
36- )
36+ model_config = SettingsConfigDict(yaml_file = " secrets.yaml" )
37+
38+ foobar: str
39+
40+ @ classmethod
41+ def settings_customise_sources (
42+ cls ,
43+ settings_cls : type[BaseSettings],
44+ init_settings : PydanticBaseSettingsSource,
45+ ** other_settings : PydanticBaseSettingsSource,
46+ ) -> tuple[PydanticBaseSettingsSource, ... ]:
47+ return init_settings, SOPSConfigSettingsSource(settings_cls), * other_settings.values()
48+ ```
49+
50+ If you need to handle JSON or YAML files that might be encrypted or not (i.e., encrypted in development but decrypted in
51+ production), you must use the specific source classes, ` SopsYamlSettingsSource ` or ` SopsJsonSettingsSource ` :
52+
53+ ``` py
54+ from pydantic_settings import (
55+ BaseSettings,
56+ PydanticBaseSettingsSource,
57+ SettingsConfigDict,
58+ )
59+ from pydantic_settings_sops import SopsYamlSettingsSource
60+
61+ class SettingsExample (BaseSettings ):
62+ model_config = SettingsConfigDict(yaml_file = " secrets.yaml" )
3763
3864 foobar: str
3965
4066 @ classmethod
4167 def settings_customise_sources (
4268 cls ,
43- settings_cls : BaseSettings,
69+ settings_cls : type[ BaseSettings] ,
4470 init_settings : PydanticBaseSettingsSource,
45- env_settings : PydanticBaseSettingsSource,
46- dotenv_settings : PydanticBaseSettingsSource,
47- file_secret_settings : PydanticBaseSettingsSource,
71+ ** other_settings : PydanticBaseSettingsSource,
4872 ) -> tuple[PydanticBaseSettingsSource, ... ]:
49- return ( init_settings, SOPSConfigSettingsSource (settings_cls))
73+ return init_settings, SopsYamlSettingsSource (settings_cls), * other_settings.values( )
5074```
5175
5276## Installation
0 commit comments