__init__.py 2.12 KB
"""
配置分为两部分:
1. 通用配置(common), 如token过期时间,不能发在源代码中, 存放在src/settings下,
2. 私密配置(secret),如帐号、密码, 不能放在源代码中
"""
import os
import sys

from django.core.management.color import color_style

from simple_config import Config, ConfigAttribute, converter

from . import _default_config

_SERVER_TYPE_LST = ['DEV', 'SIT', 'PRD']


def service_is_online(server_type):
    return server_type == 'PRD'


class ProjectConfig(Config):
    DEBUG = ConfigAttribute('DEBUG', get_converter=converter.boolean)
    SERVICE_IS_ONLINE = ConfigAttribute(
        'SERVER_TYPE', get_converter=service_is_online)
    ALLOWED_HOSTS = ConfigAttribute(
        'ALLOWED_HOSTS', get_converter=converter.Csv())
    # ETCD_PORT = ConfigAttribute('ETCD_PORT', get_converter=int)

    def load_config(self):
        # 加载默认配置
        self.from_object(_default_config)
        self.load_secret_config()
        self.load_common_config()

    def load_common_config(self):
        """加载配置文件
        """
        self.from_env_var('SERVER_TYPE')
        assert self.SERVER_TYPE in _SERVER_TYPE_LST
        config_file = self.get_common_config_filename(self.COMMON_CONF_DIR,
                                                      self.SERVER_TYPE)
        if self.SERVER_TYPE == 'DEV' and not os.path.exists(config_file):
            msg = '[SERVER_TYPE: %s] config_file: %s does not exist' % (
                self.SERVER_TYPE, config_file)
            config_file = self.get_common_config_filename(
                self.COMMON_CONF_DIR, 'SIT')
            msg = '%s, try to use %s as alternative\n' % (msg, config_file)
            style = color_style()
            sys.stdout.write(style.NOTICE(msg))
        self.from_ini(config_file)

    def load_secret_config(self):
        """加载私密配置
        """
        self.from_ini(self.SECRET_CONF_FILE)

    @staticmethod
    def get_common_config_filename(conf_dir, server_type):
        return os.path.join(conf_dir, '%s.ini' % server_type.lower())


config = ProjectConfig()
config.load_config()

sys.modules[__name__] = config