def parse_config(config_path=None): """Parse known UA config file Attempt to find configuration in cwd and fallback to DEFAULT_CONFIG_FILE. Any missing configuration keys will be set to CONFIG_DEFAULTS. Values are overridden by any environment variable with prefix 'UA_'. @param config_path: Fullpath to ua configfile. If unspecified, use DEFAULT_CONFIG_FILE. @return: Dict of configuration values. """ if not config_path: config_path = DEFAULT_CONFIG_FILE cfg = copy.copy(CONFIG_DEFAULTS) local_cfg = os.path.join(os.getcwd(), os.path.basename(config_path)) if os.path.exists(local_cfg): config_path = local_cfg if os.environ.get('UA_CONFIG_FILE'): config_path = os.environ.get('UA_CONFIG_FILE') LOG.debug('Using UA client configuration file at %s', config_path) if os.path.exists(config_path): cfg.update(yaml.safe_load(util.load_file(config_path))) env_keys = {} for key, value in os.environ.items(): key = key.lower() if key.startswith('ua_'): env_keys[key[3:]] = value # Strip leading UA_ cfg.update(env_keys) cfg['log_level'] = cfg['log_level'].upper() cfg['data_dir'] = os.path.expanduser(cfg['data_dir']) errors = [] for cfg_key in ('contract_url', 'sso_auth_url'): if not util.is_service_url(cfg[cfg_key]): errors.append('Invalid url in config. %s: %s' % (cfg_key, cfg[cfg_key])) if errors: raise exceptions.UserFacingError('\n'.join(errors)) return cfg
def parse_config(config_path=None): """Parse known UA config file Attempt to find configuration in cwd and fallback to DEFAULT_CONFIG_FILE. Any missing configuration keys will be set to CONFIG_DEFAULTS. Values are overridden by any environment variable with prefix 'UA_'. @param config_path: Fullpath to ua configfile. If unspecified, use DEFAULT_CONFIG_FILE. @return: Dict of configuration values. """ if not config_path: config_path = DEFAULT_CONFIG_FILE cfg = copy.copy(CONFIG_DEFAULTS) local_cfg = os.path.join(os.getcwd(), os.path.basename(config_path)) if os.path.exists(local_cfg): config_path = local_cfg if os.environ.get("UA_CONFIG_FILE"): config_path = os.environ.get("UA_CONFIG_FILE") LOG.debug("Using UA client configuration file at %s", config_path) if os.path.exists(config_path): cfg.update(yaml.safe_load(util.load_file(config_path))) env_keys = {} for key, value in os.environ.items(): key = key.lower() if key.startswith("ua_"): env_keys[key[3:]] = value # Strip leading UA_ cfg.update(env_keys) cfg["log_level"] = cfg["log_level"].upper() cfg["data_dir"] = os.path.expanduser(cfg["data_dir"]) if not util.is_service_url(cfg["contract_url"]): raise exceptions.UserFacingError( "Invalid url in config. contract_url: {}".format( cfg["contract_url"] ) ) return cfg
def test_is_valid_url(self, url, is_valid): ret = util.is_service_url(url) assert is_valid is ret