Source code for aiida.orm.data.remote

# -*- coding: utf-8 -*-
from aiida.orm import Data


__copyright__ = u"Copyright (c), This file is part of the AiiDA platform. For further information please visit http://www.aiida.net/. All rights reserved."
__license__ = "MIT license, see LICENSE.txt file."
__version__ = "0.7.0"
__authors__ = "The AiiDA team."


[docs]class RemoteData(Data): """ Store a link to a file or folder on a remote machine. Remember to pass a computer! """ def get_dbcomputer(self): return self.dbnode.dbcomputer def get_remote_path(self): return self.get_attr('remote_path') def set_remote_path(self, val): self._set_attr('remote_path', val)
[docs] def add_path(self, src_abs, dst_filename=None): """ Disable adding files or directories to a RemoteData """ from aiida.common.exceptions import ModificationNotAllowed raise ModificationNotAllowed("Cannot add files or directories to a RemoteData object")
[docs] def is_empty(self): """ Check if remote folder is empty """ from aiida.execmanager import get_authinfo authinfo = get_authinfo(computer=self.get_computer(), aiidauser=self.get_user()) t = authinfo.get_transport() with t: try: t.chdir(self.get_remote_path()) except IOError as e: if e.errno == 2: # directory not existing return True # is indeed empty, i.e. unusable return not t.listdir()
def _clean(self): """ Remove all content of the remote folder on the remote computer """ from aiida.execmanager import get_authinfo import os authinfo = get_authinfo(computer=self.get_computer(), aiidauser=self.get_user()) t = authinfo.get_transport() remote_dir = self.get_remote_path() pre, post = os.path.split(remote_dir) with t: try: t.chdir(pre) t.rmtree(post) except IOError as e: if e.errno == 2: # directory not existing pass def _validate(self): from aiida.common.exceptions import ValidationError super(RemoteData, self)._validate() try: self.get_remote_path() except AttributeError: raise ValidationError("attribute 'remote_path' not set.") computer = self.get_computer() if computer is None: raise ValidationError("Remote computer not set.")