Skip to main content

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

This version
History Node

0.5.10

History Node

0.5.9

History Node

0.5.7

History Node

0.5.6

History Node

0.5.5

History Node

0.5.4

History Node

0.5.3

History Node

0.5.2

History Node

0.5.1

History Node

0.5.0

History Node

0.4.3

History Node

0.4.2

History Node

0.4.1

History Node

0.4.0

History Node

0.0.0

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
musette-0.5.10.tar.gz (18.3 kB) Copy SHA256 hash SHA256 Source None Nov 22, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page