""" 配置分为两部分: 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 = ['UAT', '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