os.environ proxy based on django-environ
Project description
musette enables application configuration by providing a proxy to os.environ which allows:
type-casting of environment values
updating the environment via plaintext key-value properties files
shell-style interpolation
musette is a direct fork of django-environ with significant changes. Although it is intended for Django settings configuration it does not actually require Django itself.
The original module (django-environ) was a merge of:
Basic usage
from musette import environ environ.read('env.properties') DEBUG = environ.bool("DEBUG")
Django Settings
This is your settings.py file before you have installed musette:
DEBUG = True TEMPLATE_DEBUG = DEBUG DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'database', 'USER': 'user', 'PASSWORD': 'githubbedpassword', 'HOST': '127.0.0.1', 'PORT': '8458', } 'extra': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'database.sqlite' } } SECRET_KEY = 'notsecret' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '127.0.0.1:11211', '127.0.0.1:11212', '127.0.0.1:11213', ] }, 'redis': { 'BACKEND': 'redis_cache.cache.RedisCache', 'LOCATION': '127.0.0.1:6379:1', 'OPTIONS': { 'CLIENT_CLASS': 'redis_cache.client.DefaultClient', 'PASSWORD': 'redis-githubbed-password', } } }
After:
from musette import Environment env = Environment(DEBUG=(bool, False),) env.read('env.properties') DEBUG = env('DEBUG') # False if not in os.environ TEMPLATE_DEBUG = DEBUG DATABASES = { 'default': env.db(), 'extra': env.db('SQLITE_URL', default='sqlite:////tmp/my-tmp-sqlite.db') } SECRET_KEY = env('SECRET_KEY') CACHES = { 'default': env.cache(), 'redis': env.cache('REDIS_URL') }
Properties Files
A properties or “env” file is plain text file containing one or more key := value or key = value lines, where values may optionally refer to other environment values via shell-style variables:
that := something this := ${that}
How to install
$ pip install musette
How to use
There is an Environment class and a convenient instance of that class called environ:
>>> from musette import Environment >>> env = Environment( DEBUG=(bool, False), ) >>> env('DEBUG') False >>> env('DEBUG', default=True) True >>> open('.myenv', 'a').write('DEBUG=on\n') >>> env.read('.myenv') >>> env('DEBUG') True >>> open('.myenv', 'a').write('INT_VAR=1010\n') >>> env.read('.myenv') >>> env.int('INT_VAR'), env.str('INT_VAR') 1010, '1010' >>> open('.myenv', 'a').write('DATABASE_URL=sqlite:///my-local-sqlite.db\n') >>> env.read('.myenv') >>> env.db() {'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'my-local-sqlite.db', 'HOST': '', 'USER': '', 'PASSWORD': '', 'PORT': ''}
Environment by default provides an effective proxy to the os.environ data dictionary, but you can pass in any other dict instead:
>>> from musette import Environment >>> _environ = {} >>> env = Environment(_environ, DEBUG=True) >>> _environ['DEBUG'] True
If you are neither passing in a configuration dict or any schema values then you can just use the environ instance:
>>> import os >>> from musette import environ >>> set(os.environ.keys()) == set(environ.keys()) True
Supported Types
str
bool
int
float
json
list (FOO=a,b,c)
dict (BAR=key=val;foo=bar)
url
- db_url
PostgreSQL: postgres://, pgsql://, psql:// or postgresql://
PostGIS: postgis://
MySQL: mysql:// or mysql2://
MySQL for GeoDjango: mysqlgis://
SQLITE: sqlite://
SQLITE with SPATIALITE for GeoDjango: spatialite://
LDAP: ldap://
- cache_url
Database: dbcache://
Dummy: dummycache://
File: filecache://
Memory: locmemcache://
Memcached: memcache://
Python memory: pymemcache://
Redis: rediscache://
- search_url
ElasticSearch: elasticsearch://
Solr: solr://
Whoosh: whoosh://
Simple cache: simple://
- email_url
SMTP: smtp://
SMTPS: smtps://
Console mail: consolemail://
File mail: filemail://
LocMem mail: memorymail://
Dummy mail: dummymail://
Tests
$ git clone git@github.com:averagehuman/musette.git $ cd musette $ python setup.py test
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file musette-0.5.10.tar.gz
.
File metadata
- Download URL: musette-0.5.10.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | daaa7c3ff773ab3427273ac1d03bc4ce2f8454caae59970a0653713c333b0a12 |
|
MD5 | 37c57f8805a7a123087d7441bdce4c47 |
|
BLAKE2b-256 | 579e20e51469db65fa24170893e499c7d230ac7244f44fa3f0cc8df4eb148527 |