Last updated:
0 purchases
overridepydanticsettings 1.0.1
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 = "[email protected]"
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="[email protected]")
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.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.