Giter Club home page Giter Club logo

Comments (7)

faker-bert avatar faker-bert commented on May 23, 2024

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.

hramezani avatar hramezani commented on May 23, 2024

good idea. I think it shouldn't be too hard to implement

from pydantic-settings.

faker-bert avatar faker-bert commented on May 23, 2024

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.

hramezani avatar hramezani commented on May 23, 2024

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.

faker-bert avatar faker-bert commented on May 23, 2024

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.

faker-bert avatar faker-bert commented on May 23, 2024

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.

faker-bert avatar faker-bert commented on May 23, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.