Skip to main content

Stay informed of it

Project description

Django Dynamic Settings

Build status PyPI PyPI - Django version PyPI - Python version PyPI - License

Django Dynamic Settings allows you to create & use dynamic settings backed by a database.

Installation

Installation using pip:

pip install dj-dynamic-settings

dj_dynamic_settings app has to be added to INSTALLED_APPS and migrate command has to be run.

INSTALLED_APPS = (
    # other apps here...
    "dj_dynamic_settings",
)

dj_dynamic_settings.urls must be included to a desired url path.

urlpatterns = [
    ...,
    url(r"^api/v1/", include("dj_dynamic_settings.urls")),
]

Setting class must be defined & registered. Please make sure that this class' module runs whenever the application runs.

from dj_dynamic_settings.registry import BaseSetting, registry
from dj_dynamic_settings.validators import TypeValidator


@registry.register
class FeatureActive(BaseSetting):
    key = "FEATURE_ACTIVE"
    validators = [TypeValidator(bool)]
    default = False
    description = "Flag for Feature X"

Create Setting instance using view.

import requests

requests.post(
    url="https://your-app.com/api/v1/dynamic_settings/",
    headers={
        "Authorization": "Token <secret-login-token>",
    },
    json={
        "key": "FEATURE_ACTIVE",
        "value": True,
        "is_active": True,
    }
)

Access this setting as in django.conf.settings

from dj_dynamic_settings.conf import settings


settings.FEATURE_ACTIVE  # True

Create / Update Triggers

To fire a callback method when a specific setting value updated or created, you can implement post_save_actions in BaseSetting inherited class

Following example shows how to implement post_save_actions method.

The callback method will be called with following kwargs:

key=instance.key
value=instance.value
created=created # is create operation

Note: post_save_actions returns an array, so you can add multiple callback methods. These callback methods will be called synchronously.

class PostUpdateTestConfiguration(BaseSetting):
    key = "X_FEATURE_POST_UPDATE"
    validators = [...]

    @classmethod
    def post_save_actions(cls):
        return [
            on_data_updated,
        ]

def on_data_updated(*args, **kwargs):
    pass

Testing Tools

override_settings()

You can override a setting for a test method or test class.

from dj_dynamic_settings.utils import override_settings
from django.test import TestCase

@override_settings(SOME_SETTING="some_setting")
class FeatureTestCase(TestCase):

    @override_settings(SOME_OTHER_SETTING="SOME_OTHER_SETTING")
    def test_feature(self):
        # Some stuff
        pass

    
    def test_feature_x(self):
        with override_settings(SOME_OTHER_SETTING="SOME_OTHER_SETTING"):
            # Some stuff
            pass

Download files

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

Source Distribution

dj_dynamic_settings-0.2.11.dev1.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dj_dynamic_settings-0.2.11.dev1-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file dj_dynamic_settings-0.2.11.dev1.tar.gz.

File metadata

File hashes

Hashes for dj_dynamic_settings-0.2.11.dev1.tar.gz
Algorithm Hash digest
SHA256 57b67ab1f9e19b0b96a0249fa9f63dc7912c5aa1c5264de9f9f4c9cdd9553184
MD5 e73afa67d6b5f09118d1b68dd4f00919
BLAKE2b-256 1bcfefbb006c483be74d547444e0dfcc21abf2e15aa9ba51e486a4ba50d10947

See more details on using hashes here.

File details

Details for the file dj_dynamic_settings-0.2.11.dev1-py3-none-any.whl.

File metadata

File hashes

Hashes for dj_dynamic_settings-0.2.11.dev1-py3-none-any.whl
Algorithm Hash digest
SHA256 ca516c1d3cdc34799e71cdb065b8f4f60373ac454880d5f6a4be03d4ee263eb8
MD5 365bef928d2eb1f9ebd80bdf8b96f072
BLAKE2b-256 a84510f541ad2269a0284b468daf9d87ab15ea83f44e4978420844cf484ba2dc

See more details on using hashes here.

Supported by

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