Skip to main content

musette

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

Metadata

Release files for musette 0.5.10

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

Source distribution (sdist)

Source distribution for musette 0.5.10
File Size Uploaded Provenance Actions
musette-0.5.10.tar.gz 18.3 kB Without provenance Details for musette-0.5.10.tar.gz

Release files / musette-0.5.10.tar.gz

Download URL musette-0.5.10.tar.gz
Size 18.3 kB
Tags Source
SHA-256 checksum
How to use checksums
daaa7c3ff773ab3427273ac1d03bc4ce2f8454caae59970a0653713c333b0a12
BLAKE2b-256 checksum
How to use checksums
579e20e51469db65fa24170893e499c7d230ac7244f44fa3f0cc8df4eb148527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for musette 0.5.10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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