Skip to main content

Pydantic Settings for Django

Project description

pydjantic

Build Status codecov pypi versions license Code style: black

Use Pydantic Settings for your Django app.

Introduction

If you are tired of the mess in your Django Settings - I feel your pain:

  • Long as Dostoevsky's "Crime and punishment" settings.py file
  • from production import * anti-pattern
  • try: <import> except: ImportError anti-pattern
  • base.py, production.py, local.py, domain.py - bunch of modules that override each other
  • django-environ library, that did even worse...

Pydjantic offers to divide the settings only by their domain:

from typing import List

from pydantic import BaseSettings, Field
from pydantic.fields import Undefined
from pydjantic import to_django

class GeneralSettings(BaseSettings):
    SECRET_KEY: str = Field(default=Undefined, env='DJANGO_SECRET_KEY')
    DEBUG: bool = Field(default=False, env='DEBUG')
    INSTALLED_APPS: List[str] = [
        'django.contrib.admin',
        'django.contrib.auth',
    ]
    LANGUAGE_CODE: str = 'en-us'
    USE_TZ: bool = True


class StaticSettings(BaseSettings):
    STATIC_URL: str = '/static/'
    STATIC_ROOT: str = 'staticfiles'


class SentrySettings(BaseSettings):
    SENTRY_DSN: str = Field(default=Undefined, env='SENTRY_DSN')


class ProjectSettings(GeneralSettings, StaticSettings, SentrySettings):
    pass


to_django(ProjectSettings())

You can create as many classes/modules as you want, to achieve perfect settings management.

Just create final ProjectSettings class, that inherits from these domains, and provide its instance to to_django function. That's all, your django settings will work as expected.

Installation

Install using pip install -U pydantic or poetry add pydjantic.

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

pydjantic-0.2.0.tar.gz (3.8 kB view hashes)

Uploaded Source

Built Distribution

pydjantic-0.2.0-py3-none-any.whl (4.4 kB view hashes)

Uploaded Python 3

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