跳转到主要内容

在项目中提供环境支持的配置的一个简单方法。

项目描述

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 (3.4 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面