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 details)

Uploaded Source

File details

Details for the file override-pydantic-settings-1.0.1.tar.gz.

File metadata

File hashes

Hashes for override-pydantic-settings-1.0.1.tar.gz
Algorithm Hash digest
SHA256 0dbc552ff4e78e14156b89a7b67f6adbe8e8fd0105736861c5fe855a37594ab4
MD5 601b6d1a1a53ea9e60d99165cb44c3bf
BLAKE2b-256 60580616d2f1cad65fcb9da3509e7ded79572032a72fd609b96897258bb36d17

See more details on using hashes here.

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