def _get_config(config_file): try: with open(config_file, 'r') as f: config = yaml.load(f)[get_current_profile()] # no config file, or no config for this profile except (OSError, IOError, KeyError): return DEFAULT_CONFIG # validate configuration for key in config: if key not in DEFAULT_CONFIG: raise ValueError( "Configuration error: Invalid key '{}' in cache_config.yml".format(key) ) # add defaults where config is missing for key, default_config in DEFAULT_CONFIG.items(): config[key] = config.get(key, default_config) # load classes try: for key in [config_keys.enabled, config_keys.disabled]: config[key] = [load_class(c) for c in config[key]] except (ImportError, ClassNotFoundException) as err: raise_from( ConfigurationError("Unknown class given in 'cache_config.yml': '{}'".format(err)), err ) return config
def check_schema_version(): """ Check if the version stored in the database is the same of the version of the code. :note: if the DbSetting table does not exist, this function does not fail. The reason is to avoid to have problems before running the first migrate call. :note: if no version is found, the version is set to the version of the code. This is useful to have the code automatically set the DB version at the first code execution. :raise ConfigurationError: if the two schema versions do not match. Otherwise, just return. """ import os import aiida.backends.djsite.db.models from aiida.backends.utils import get_current_profile from django.db import connection from aiida.common.exceptions import ConfigurationError # Do not do anything if the table does not exist yet if 'db_dbsetting' not in connection.introspection.table_names(): return code_schema_version = aiida.backends.djsite.db.models.SCHEMA_VERSION db_schema_version = get_db_schema_version() if db_schema_version is None: # No code schema defined yet, I set it to the code version set_db_schema_version(code_schema_version) db_schema_version = get_db_schema_version() filepath_utils = os.path.abspath(__file__) filepath_manage = os.path.join(os.path.dirname(filepath_utils), 'manage.py') if code_schema_version != db_schema_version: raise ConfigurationError( "The code schema version is {}, but the version stored in the " "database (DbSetting table) is {}, stopping.\n" "To migrate the database to the current version, run the following commands:" "\n verdi daemon stop\n python {} --aiida-profile={} migrate". format(code_schema_version, db_schema_version, filepath_manage, get_current_profile()))
def setUp(self): """ Write a temporary config file, and load the configuration. """ self.config_reference = { get_current_profile(): { 'default': True, 'enabled': [], 'disabled': [ 'aiida.orm.calculation.job.simpleplugins.templatereplacer.TemplatereplacerCalculation' ] } } with tempfile.NamedTemporaryFile() as tf, open(tf.name, 'w') as of: yaml.dump(self.config_reference, of) configure(config_file=tf.name)