Source code for aiida.tools.importexport.migration.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               #
###########################################################################
"""Utility functions for migration of export-files."""

from aiida.tools.importexport.common import exceptions


[docs]def verify_metadata_version(metadata, version=None): """Utility function to verify that the metadata has the correct version number. If no version number is passed, it will just extract the version number and return it. :param metadata: the content of an export archive metadata.json file :param version: string version number that the metadata is expected to have """ try: metadata_version = metadata['export_version'] except KeyError: raise exceptions.ArchiveMigrationError("metadata is missing the 'export_version' key") if version is None: return metadata_version if metadata_version != version: raise exceptions.MigrationValidationError( 'expected export file with version {} but found version {}'.format(version, metadata_version) ) return None
[docs]def update_metadata(metadata, version): """Update the metadata with a new version number and a notification of the conversion that was executed. :param metadata: the content of an export archive metadata.json file :param version: string version number that the updated metadata should get """ from aiida import get_version old_version = metadata['export_version'] conversion_info = metadata.get('conversion_info', []) conversion_message = 'Converted from version {} to {} with AiiDA v{}'.format(old_version, version, get_version()) conversion_info.append(conversion_message) metadata['aiida_version'] = get_version() metadata['export_version'] = version metadata['conversion_info'] = conversion_info
[docs]def remove_fields(metadata, data, entities, fields): """Remove fields under entities from data.json and metadata.json. :param metadata: the content of an export archive metadata.json file :param data: the content of an export archive data.json file :param entities: list of ORM entities :param fields: list of fields to be removed from the export archive files """ # data.json for entity in entities: for content in data['export_data'].get(entity, {}).values(): for field in fields: content.pop(field, None) # metadata.json for entity in entities: for field in fields: metadata['all_fields_info'][entity].pop(field, None)