Skip to main content

This project is used to configure Django projects using a Toml configuration file. This project chooses Toml over other configuration language becuase of it’s simplicity and small specification. It is easier to understand and looks very much like INI-style config. We couldn’t use INI-style because it is difficult to repsent data structures like dictionaries and lists, and there is no support for nesting.

Changelog

0.0.4

  • Add support for Substitution in maps and lists.

  • Fix loading settings where values are non-string which caused TypeError in v0.0.3.

0.0.3

  • Fix packaging for the new release.

0.0.2

  • Add support for variable substitution using ${VAR} syntax in values.

Usage

To use this in your Django project, Add the following to your settings.py file:

# settings.py
from django_settings_toml import load_settings

load_settings(__name__, ['/etc/project.toml', '~/.project.toml'])

Then, you can run your django project like this:

$ DJANGO_SETTINGS_MODULE=project.settings django-admin runserver

Variable Substitution

Values can refer to other keys defined in the same file using ${VAR} syntax. For example:

# /etc/project.toml

HOSTNAME = 'domain.local'

EMAIL1 = 'aperson@${HOSTNAME}'

EMAIL2 = 'bperson@${HOSTNAME}'

In the above example, the value of EMAIL1 = 'aperson@domain.local and similar for EMAIL2.

If they variables that are being referred to aren’t defined, the template is left as-is and doesn’t raise any errors. For example, in the above example, if HOSTNAME wasn’t defined, the value will be EMAIL1 = 'aperson@${HOSTNAME}.

Example Settings

# /etc/project.toml
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'change-this-on-your-production-server'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = false

ADMINS = [
['Mailman Suite Admin', 'root@localhost'],
]

# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_q',
'allauth',
]

MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
]

ROOT_URLCONF = 'project.urls'

WSGI_APPLICATION = 'project.wsgi.application'

HOSTNAME = 'project.local'

EMAIL_NAME = 'project1@${HOSTNAME}'

[DATABASES.default]
ENGINE = 'django.db.backends.sqlite3'
NAME = 'mailmansuite.db'

[LOGGING]
version = 1
disable_existing_loggers = false

[LOGGING.filters.require_debug_false]
'()' = 'django.utils.log.RequireDebugFalse'

[LOGGING.handlers.mail_admins]
level = 'ERROR'
filters = ['require_debug_false']
class =  'django.utils.log.AdminEmailHandler'

[LOGGING.handlers.file]
level = 'INFO'
class = 'logging.handlers.WatchedFileHandler'
filename =  'logs/mailmansuite.log'
formatter = 'verbose'

[LOGGING.loggers."django.request"]
handlers = ['mail_admins', 'file']
level = 'ERROR'
propagate = true

[LOGGING.formatters.verbose]
format = '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'

Gotchas

  • Please make sure that you have writtena valid Toml, you can use TOML Validator or tomlcheck tools to validate the toml file.

  • Please make sure that all smiple KEY = value pairs are in the root namespace (above any [section]) so that they don’t get swallowed under one of the maps or arrays. Previously, we have seen ImproperlyConfiguredError for missing keys that were actually defined in the toml file.

LICENSE

The contents of this project is licensed under Apache License 2.0. Please see the LICENSE file for a complete copy of license text.

Release files for django-settings-toml 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-settings-toml 0.0.4
File Size Uploaded
django-settings-toml-0.0.4.tar.gz 9.3 kB Details

Release files / django-settings-toml-0.0.4.tar.gz

Download URL django-settings-toml-0.0.4.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8ef1bda50e9c2733560b4a87d4a35e1f1aea8d42bef328ba9988b64da2749cf7
BLAKE2b-256 checksum
How to use checksums
2b43d7f3e1995e467f68560a86a059345f2d2a84bfc2358e5056c4c27f11ced4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.5.0.1 requests/2.20.1 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.2

Release history Release notifications | RSS feed

This release

0.0.4 This release

1 release file

0.0.3

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page