在项目中提供环境支持的配置的一个简单方法。
项目描述
Confucius
配置的更简单、更清晰的方法。
快速开始
from confucius import BaseConfig
class Config(BaseConfig)
HOST = '127.0.0.1'
PORT : int = 8000
DEBUG : bool = False
from myapp import Server
from config import Config
server = Server(Config.HOST, Config.PORT)
$ python app.py
- Starting server: 127.0.0.1:8000
$ PORT=80 python app.py
- Starting server: 127.0.0.1:80
$ DEBUG=y python app.py
- Starting debug server: 127.0.0.1:80
类型
BaseConfig子类的任何ANGRY_SNAKE_CASE属性都将被元类拦截,并使用os.getenv在环境中进行检查。
它们的类型将由类中的注解确定,或者回退到str。
方法将自动像property一样行为,具有对self的访问。
可以通过将其添加到__types__字典来覆盖类型转换的处理[如bool所做的那样]
class Config(BaseConfig):
__types__ = {
json: lambda v: json.loads(v) if isinstance(v, str) else v,
}
LOGGING : json = {'version': 1 ...}
在父Config类上定义的所有类型都将与此字典合并。
继承
类通常从它们的父类继承。如果属性的类型的改变,将引发一个AssertionError。
方法
全大写的方法将被调用,并且可以像往常一样访问self。
class Config(BaseConfig):
DB_ENGINE = 'postgresql'
DB_HOST = 'localhost'
DB_PORT : int = 5432
DB_USER = 'test_user'
DB_PASS = 'secret'
DB_NAME = 'test-db'
def CONNECTION_STRING(self):
return f'{self.DB_ENGINE}://{self.DB_USER}:{self.DB_PASS}@{self.DB_HOST}/{self.DB_NAME}'
在Django中使用
在你的settings.py中,放置你的设置类(或类),然后使用以下代码选择一个来使用
import os
MODE = os.getenv('DJANGO_MODE', 'Local')
globals().update(globals()[f'{ MODE.title() }Settings'].as_dict())
在Python 3.7中
在Python 3.7中,增加了一个新功能,允许你为模块定义__getattr__(参见PEP 562 <https://pythonlang.cn/dev/peps/pep-0562/>)。
BaseConfig元类提供了一个module_getattr_factory工厂方法来提供一个将查找Config对象的__getattr__。
from confucius import BaseConfig
class Config(BaseConfig):
DB_HOST = 'localhost'
DB_PORT = 5432
__getattr__ = Config.module_getattr_factory()
导入此模块后,尝试访问属性将正常解析,如果找不到,将调用__getattr__,就像在对象上一样。
项目详情
关闭
confucius-1.0.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eb2f920513a2a1876b7140c6e0d675b28606c517b42687725dd54a39f331d7db |
|
MD5 | c24e32db0b31e0ce9acc31f132e9af8d |
|
BLAKE2b-256 | 1447aa206dfe70a7f7f6d962cd504e6b67046f37df0b2b636b0d756acb3e735e |