基于django environ的os.environ代理

musette的Python项目详细描述


musette通过提供 os.environ允许:

  • 环境值的类型转换
  • 通过明文键值属性文件更新环境
  • 壳式插值

musettedjango-environ的一个直接分支,具有显著的变化。 尽管它是为django设置配置而设计的,但实际上并不是 需要Django自己。

原始模块(django-environ)是:

基本用法

from musette import environ

environ.read('env.properties')

DEBUG = environ.bool("DEBUG")

django设置

这是安装musette之前的设置.py文件:

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',
        }
    }
}

之后:

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')
}

属性文件

属性或“env”文件是包含一个或多个 key:=值key=value行,其中值可以是可选的 通过shell样式变量参考其他环境值:

that := something
this := ${that}

如何安装

$ pip install musette

如何使用

有一个Environment类和该类的方便实例 调用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默认情况下为^{tt2}提供有效的代理$ 数据字典,但您可以传入任何其他dict:

>>> from musette import Environment
>>> _environ = {}
>>> env = Environment(_environ, DEBUG=True)
>>> _environ['DEBUG']
True

如果既不传入配置dict,也不传入任何模式值,则 您可以使用environ实例:

>>> import os
>>> from musette import environ
>>> set(os.environ.keys()) == set(environ.keys())
True

支持的类型

  • str
  • 布尔
  • 内景
  • 浮动
  • json
  • 列表(foo=a,b,c)
  • dict(bar=key=val;foo=bar)
  • 网址
  • 数据库URL
    • PostgreSQL:^{TT9}$,^{TT10}$,^{TT11}$或^{TT12}$
    • 邮政编码:^{TT13}$
    • mysql:mysql://mysql2://
    • 用于geodjango的mysql:mysqlgis://
    • sqlite:sqlite://
    • Geodjango的含Spatialite的Sqlite:^{TT18}$
    • LDAP:^{TT19}$
  • 缓存URL
    • 数据库:dbcache://
    • 虚拟:dummycache://
    • 文件:filecache://
    • 内存:locmemcache://
    • memcached:memcache://
    • python内存:pymemcache://
    • redis:rediscache://
  • 搜索URL
    • 弹性搜索:^{TT27}$
    • 溶液:solr://
    • 呼:whoosh://
    • 简单缓存:simple://
  • 电子邮件地址
    • SMTP:^{TT31}$
    • smtps:smtps://
    • 控制台邮件:consolemail://
    • 文件邮件:filemail://
    • locmem邮件:memorymail://
    • 虚拟邮件:dummymail://

测试

$ git clone git@github.com:averagehuman/musette.git
$ cd musette
$ python setup.py test

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java LinkedHashMap搜索   java将类及其所有依赖项移动到另一个项目   java doGet和doPost之间有什么区别?   java统计实体JPA的所有特定属性   Neo4j服务器的java推荐设置   java我可以设置GAE的dev_appserver,以便在更改时自动重新加载上下文。类文件?   mysql我试图使用java记录保存项目,但该程序似乎无法连接到数据库   java PDA在挂起模式下失去与ServerSocket的TCP连接   当应用spring安全性时,java找不到jsp视图   javascript如何通过Web视图从React组件的构造函数执行Java函数   java为什么在一个线程迭代(使用迭代器)而另一个线程修改同一个非线程安全ArrayList副本时没有ConcurrentModificationException   java调试与Eclipse JD行不匹配   java文本字段,用于在JavaFX聊天应用程序中输入文本和插入图像