Source code for aiida.orm.data.remote

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


__copyright__ = u"Copyright (c), 2015, ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (Theory and Simulation of Materials (THEOS) and National Centre for Computational Design and Discovery of Novel Materials (NCCR MARVEL)), Switzerland and ROBERT BOSCH LLC, USA. All rights reserved."
__license__ = "MIT license, see LICENSE.txt file"
__version__ = "0.4.1"
__contributors__ = "Andrea Cepellotti, Giovanni Pizzi, Nicolas Mounet"

[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.")