Source code for aiida.orm.data.folder

# -*- 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               #
###########################################################################
import os

from aiida.orm import Data
from aiida.common.exceptions import ModificationNotAllowed



[docs]class FolderData(Data): """ Stores a folder with subfolders and files. No special attributes are set. """
[docs] def replace_with_folder(self, folder, overwrite=True): """ Replace the data with another folder, always copying and not moving the original files. Args: folder: the folder to copy from overwrite: if to overwrite the current content or not """ if not os.path.isabs(folder): raise ValueError("folder must be an absolute path") # TODO: implement the logic on the folder? Or set a 'locked' flag on folders? if not self.is_stored: self._get_folder_pathsubfolder.replace_with_folder(folder, move=False, overwrite=overwrite) else: raise ModificationNotAllowed("You cannot change the files after the node has been stored")
[docs] def get_file_content(self, path): """ Return the content of a path stored inside the folder as a string. :raise NotExistent: if the path does not exist. """ from aiida.common.exceptions import NotExistent try: with open(self._get_folder_pathsubfolder.get_abs_path( path, check_existence=True)) as f: return f.read() except (OSError, IOError): raise NotExistent("Error reading the file '{}' inside node with " "pk= {}, it probably does not exist?".format(path, self.pk))