def test_upgrade_to_user_config(project, from_legacy_version): shutil.copyfile( get_default_config_path(version=from_legacy_version), get_legacy_json_config_file_path(project_dir=project.project_dir)) os.remove(project.config_file_path) logger = logging.getLogger("test.test_upgrade_to_user_config") upgrade_configs(project.project_dir, logger, FIRST_USER_CONFIG_VERSION) upgraded_project = Project( project_dir=project.project_dir, user_config_file_path=project.user_config_file_path) expected_user_config = Config( load_user_default_config(FIRST_USER_CONFIG_VERSION)) expected_user_config.unref() expected_project_config = Config( load_default_config(FIRST_USER_CONFIG_VERSION)) expected_project_config.unref() assert upgraded_project.legacy_config_path is None assert upgraded_project.config == expected_user_config assert upgraded_project.user_config == expected_user_config assert upgraded_project.project_config == expected_project_config
def upgrade_user_v6_to_v7(v6_user_config): """ Upgrade a v6 config file to a v7 config file. """ errors = get_validation_errors(v6_user_config, version=V6) if errors: raise ValueError( "Cannot upgrade invalid config. Please ensure that your current " "configuration file is valid:\n\n{0}".format( format_errors(errors), ) ) v6_default = load_user_default_config(version=V6) v7_default = load_user_default_config(version=V7) v6_default_config = Config(v6_default) v6_default_config.unref() v7_default_config = Config(v7_default) v7_default_config.unref() if v6_user_config == v6_default_config: return v7_default_config # V7 just moved to user config, no change in keys upgraded_v6_user_config = copy.deepcopy(v6_user_config) upgraded_v6_user_config['version'] = V7 return upgraded_v6_user_config
def upgrade_user_v7_to_v8(v7_user_config): """ Upgrade a v7 user config file to a v8 user config file. """ errors = get_validation_errors(v7_user_config, version=V7) if errors: raise ValueError( "Cannot upgrade invalid config. Please ensure that your current " "configuration file is valid:\n\n{0}".format( format_errors(errors), ) ) v7_default = load_user_default_config(version=V7) v7_default_config = Config(v7_default) if v7_user_config == v7_default_config: return {} # V8 just removes all of the `$ref` values from the config. upgraded_v7_user_config = Config(copy.deepcopy(v7_user_config)) upgraded_v7_user_config.unref() upgraded_v7_user_config['version'] = V8 return upgraded_v7_user_config
def upgrade_v7_to_v8(v7_config): """ Upgrade a v7 config file to a v8 config file. """ errors = get_validation_errors(v7_config, version=V7) if errors: raise ValueError( "Cannot upgrade invalid config. Please ensure that your current " "configuration file is valid:\n\n{0}".format( format_errors(errors), )) v7_default = load_default_config(version=V7) v7_default_config = Config(v7_default) v8_default = load_default_config(version=V8) v8_default_config = Config(v8_default) v8_default_config.unref() if v7_config == v7_default_config: return v8_default_config # V8 just removes all of the `$ref` values from the config. upgraded_v7_config = Config(copy.deepcopy(v7_config)) upgraded_v7_config.unref() upgraded_v7_config['version'] = V8 return upgraded_v7_config
def upgrade_user_v6_to_v7(v6_user_config): """ Upgrade a v6 config file to a v7 config file. """ errors = get_validation_errors(v6_user_config, version=V6) if errors: raise ValueError( "Cannot upgrade invalid config. Please ensure that your current " "configuration file is valid:\n\n{0}".format( format_errors(errors), )) v6_default = load_user_default_config(version=V6) v7_default = load_user_default_config(version=V7) v6_default_config = Config(v6_default) v6_default_config.unref() v7_default_config = Config(v7_default) v7_default_config.unref() if v6_user_config == v6_default_config: return v7_default_config # V7 just moved to user config, no change in keys upgraded_v6_user_config = copy.deepcopy(v6_user_config) upgraded_v6_user_config['version'] = V7 return upgraded_v6_user_config
def test_upgrade_to_user_config(project, from_legacy_version): shutil.copyfile( get_default_config_path(version=from_legacy_version), get_legacy_json_config_file_path(project_dir=project.project_dir) ) logger = logging.getLogger("test.test_upgrade_to_user_config") upgrade_configs(project.project_dir, logger, LATEST_VERSION) upgraded_project = Project( project_dir=project.project_dir, user_config_file_path=project.user_config_file_path ) expected_user_config = Config(load_user_default_config(LATEST_VERSION)) expected_user_config.unref() expected_project_config = Config(load_default_config(LATEST_VERSION)) expected_project_config.unref() legacy_config_path = get_legacy_json_config_file_path(project.project_dir) assert not os.path.exists(legacy_config_path) assert upgraded_project.user_config == expected_user_config assert upgraded_project.project_config == expected_project_config
def clean_config(self): items = self.project_config.items(flatten=True) default_config = Config(load_default_config(version=self.project_config['version'])) default_config.unref() default_project_keys = [x[0] for x in default_config.items(flatten=True)] for key, value in items: if self.user_config.get(key) == value and key not in default_project_keys: self.project_config.pop(key)
def user_config(self): if self._user_config_cache is None: user_config = Config( config=self._user_config, schema=self._config_schema, ) user_config.unref() self._user_config_cache = user_config self.merge_user_and_project_configs(user_config, self.project_config) return self._user_config_cache
def project_config(self): if self._project_config_cache is None: project_config = Config(config=self._project_config, parent=Config(self._user_config)) project_config.unref() self._project_config_cache = project_config # schema validation # partial project config must be merged to get the entire schema self.merge_user_and_project_configs(self.user_config, project_config) return self._project_config_cache
def project_config(self): if self._project_config_cache is None: project_config = Config( config=self._project_config, parent=Config(self._user_config) ) project_config.unref() self._project_config_cache = project_config # schema validation # partial project config must be merged to get the entire schema self.merge_user_and_project_configs(self.user_config, project_config) return self._project_config_cache
def clean_config(self): items = self.project_config.items(flatten=True) default_config = Config( load_default_config(version=self.project_config['version'])) default_config.unref() default_project_keys = [ x[0] for x in default_config.items(flatten=True) ] for key, value in items: if self.user_config.get( key) == value and key not in default_project_keys: self.project_config.pop(key)
def test_upgrade_to_user_config(project, from_legacy_version): shutil.copyfile( get_default_config_path(version=from_legacy_version), get_legacy_json_config_file_path(project_dir=project.project_dir)) logger = logging.getLogger("test.test_upgrade_to_user_config") upgrade_configs(project.project_dir, logger, LATEST_VERSION) upgraded_project = Project( project_dir=project.project_dir, user_config_file_path=project.user_config_file_path) expected_user_config = Config(load_user_default_config(LATEST_VERSION)) expected_user_config.unref() expected_project_config = Config(load_default_config(LATEST_VERSION)) expected_project_config.unref() legacy_config_path = get_legacy_json_config_file_path(project.project_dir) assert not os.path.exists(legacy_config_path) assert upgraded_project.user_config == expected_user_config assert upgraded_project.project_config == expected_project_config