Comments (7)
The specific scenario is a project that operates in sub-modules. There is a top-level parent class that is configured through Config, but this cannot realize the loading of global env and sub-module env. After reading the specific code, the specific env call will only call the data source when it is specifically instantiated in the Settings subclass, so it can support the feature I mentioned
from pydantic-settings.
good idea. I think it shouldn't be too hard to implement
from pydantic-settings.
good idea. I think it shouldn't be too hard to implement
yeah,In the data source configuration class, implement the env source in the form of a list, and in the read method, process multiple env sources, which should be fine
from pydantic-settings.
After checking the code I realized pydantic-settings
already have this feature. and you can have multiple env files.
take a look at this test
from pydantic-settings.
After checking the code I realized
pydantic-settings
already have this feature. and you can have multiple env files.take a look at this test
It looks like you need to have a ConfigDict variable in the Settings class, but I actually think that you can store the corresponding value of the corresponding variable in the Settings class. I don't know if ConfigDict can provide variable hinting, after all, code hinting is still quite important
from pydantic-settings.
After checking the code I realized
pydantic-settings
already have this feature. and you can have multiple env files.take a look at this test
Maybe I should provide a simple example to further illustrate my idea?
from pydantic-settings.
It seems that the above test cases are not the functions I want to express. The following are the test cases I provided, hoping to help communicate
# import module
from pydantic import ConfigDict, BaseSettings
from pydantic.env_settings import SettingsSourceCallable
from typing import Tuple
# in main project
class ParentSettings(BaseSettings):
project_home: str = '.'
class Config:
# the env_file should allow multi source file
env_file = '.env'
# such as env_file = ['.env', 'sub_module.env'] sub_module.env usually a dynamically generated path
env_file_encoding = 'utf-8'
extra = 'allow'
@classmethod
def customise_sources(
cls,
init_settings: SettingsSourceCallable,
env_settings: SettingsSourceCallable,
file_secret_settings: SettingsSourceCallable,
) -> Tuple[SettingsSourceCallable, ...]:
return (
init_settings,
env_settings,
file_secret_settings
)
# in sub module
class ChildSettings(ParentSettings):
# i hope the var can auto load from sub module .env file by the parent class‘s Config class
sub_module_var: str = '.'
The above is my specific usage scenario, because I am using it in the production environment, and the v2 version of pydantic is still in the development stage, so use v1 as an example
from pydantic-settings.
Related Issues (20)
- How to build a cascading settings resolver HOT 2
- Option to create environment variables from .env file while still consuming it in the settings class HOT 2
- Reuse attributes inside settings class, and problem with overwriting them with env-vars HOT 2
- Passing an environment variable that should be parsed as `None` HOT 2
- Nested objects from environmental variables does not support JSON parsing of complex types HOT 3
- Give users the ability to override environment variables using SettingsConfigDict HOT 9
- A clearer `ValidationError` should be provided with `Optional` settings HOT 2
- We should use tomli not tomlkit HOT 1
- apparent breaking change in `DotEnvSettingsSource` when `extra="allow"`
- Field with alias leads to ValidationError in v2.2.0 HOT 4
- 2.2.0 broke support for nested BaseSettings with base type (e.g. using ABC) HOT 5
- Release 2.2 breaks enviroment prefix HOT 13
- .env file values take precedence over environment variables in BaseSettings HOT 2
- Feature request: Add `_init_ignore_none` to BaseSettings HOT 4
- Regression in customizing sources in pydantic V2 HOT 6
- Problems with nested settings in pydantic-settings v2.2.1 HOT 2
- `PyprojectTomlConfigSettingsSource` or extend `TomlConfigSettingsSource` HOT 1
- Default field value priority is not consistent with setting sources priority HOT 3
- Values printed in ValidationError stack traces for BaseSettings HOT 2
- TomlConfigSettingsSource is nowhere to be found HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pydantic-settings.