Source code for aiida.common.additions.config_migrations._utils

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
"""Defines the migrations on the config.json file."""

from aiida.common.exceptions import ConfigurationVersionError
from ._migrations import (
    _MIGRATION_LOOKUP, CURRENT_CONFIG_VERSION, OLDEST_COMPATIBLE_CONFIG_VERSION
)

VERSION_KEY = 'CONFIG_VERSION'
CURRENT_KEY = 'CURRENT'
OLDEST_KEY = 'OLDEST_COMPATIBLE'

__all__ = ['check_and_migrate_config', 'add_config_version']

[docs]def add_config_version( config, current_version=CURRENT_CONFIG_VERSION, oldest_version=OLDEST_COMPATIBLE_CONFIG_VERSION ): """Injects the current and oldest compatible version numbers into the config.""" config[VERSION_KEY] = {CURRENT_KEY: current_version, OLDEST_KEY: oldest_version}
[docs]def check_and_migrate_config(config, store=True): """ Checks if the config needs to be migrated, and performs the migration if needed. """ if config_needs_migrating(config): config = migrate_config(config) from aiida.common.setup import store_config if store: store_config(config) return config
def config_needs_migrating(config): """Checks if the config needs to be migrated.""" current, oldest = _get_config_version(config) if oldest > CURRENT_CONFIG_VERSION: raise ConfigurationVersionError("The configuration in 'config.json' is generated by a newer version of AiiDA, and not compatible with the current version.") return CURRENT_CONFIG_VERSION > current def _get_config_version(config): """Gets the current and oldest compatible versions from the config.""" try: versions = config[VERSION_KEY] current = versions[CURRENT_KEY] oldest = versions[OLDEST_KEY] except KeyError: current = 0 oldest = 0 return current, oldest def migrate_config(config): """Runs the migration functions to update the config to the current version.""" current, _ = _get_config_version(config) while current < CURRENT_CONFIG_VERSION: config = _MIGRATION_LOOKUP[current].apply(config) current, _ = _get_config_version(config) return config