Skip to main content

Override pydantic settings

Project description

Overrdie Pydantic Settings

Settings management in Pydantic makes it easy to override settings, like below.

# override settings
settgins.env = "production"

However, if you want to change the setting value in each test suite in your test code,
You need to change the values at the beginning of the test and roll back the values at the end of the test.

from app.core.config import settings # Pydantic settings

def test_settings():
    # override setting value
    env = settings.ENV
    settings.ENV = "production"
    
    # assertions
    ...
    
    # rollback setting value, because in order not to affect other tests
    settings.ENV = env

This causes a lot of code duplication. So, in order to remove the code that occurs repeatedly, created a decorator for tests.

Features

You can easily override the setting value by applying a decorator to the test function.
Also, when the test function is finished, the settings are automatically roll back.

That's all.

# for sync tests
@override_settings(settings=settings, ENV="production")
# for async tests
@async_override_settings(settings=settings, ENV="production")

Installation

pip install override-pydantic-settings

How to use

For sync tests

from pydantic import BaseSettings
from override_pydantic_settings import override_settings


class MySettings(BaseSettings):
    ENV: str = "dev"
    NAME: str = "Junki"
    EMAIL: str = "na66421@gmail.com"

    
settings = MySettings()


@override_settings(settings=settings, ENV="production", NAME="Junki Yoon")
def test_function():
    ...

For async tests

@pytest.mark.asyncio
@async_override_settings(settings=settings, ENV="production", EMAIL="na86421@naver.com")
async def test_function():
    ...

Warning

You cannot override the setting value that does not exist.

Development

Compatible with Python >= 3.6

Python >= 3.10, we can create async decorators using the asnyc context manager.
It seems that async & sync can be integrated into one function.

Running tests

$ python -m venv venv
(venv)$ source venv/bin/acitave
(venv)$ pip install -r requirements.txt
(venv)$ pytest

License

This project is licensed under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

override-pydantic-settings-1.0.1.tar.gz (3.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page