Source code for CIME.Servers.gftp

"""
GridFTP Server class.  Interact with a server using GridFTP protocol
"""
# pylint: disable=super-init-not-called
from CIME.XML.standard_module_setup import *
from CIME.Servers.generic_server import GenericServer
from CIME.utils import run_cmd

logger = logging.getLogger(__name__)


[docs] class GridFTP(GenericServer): def __init__(self, address, user="", passwd=""): self._root_address = address
[docs] def fileexists(self, rel_path): stat, out, err = run_cmd( "globus-url-copy -list {}".format( os.path.join(self._root_address, os.path.dirname(rel_path)) + os.sep ) ) if stat or os.path.basename(rel_path) not in out: logging.warning( "FAIL: File {} not found.\nstat={} error={}".format(rel_path, stat, err) ) return False return True
[docs] def getfile(self, rel_path, full_path): stat, _, err = run_cmd( "globus-url-copy -v {} file://{}".format( os.path.join(self._root_address, rel_path), full_path ) ) if stat != 0: logging.warning( "FAIL: GridFTP repo '{}' does not have file '{}' error={}\n".format( self._root_address, rel_path, err ) ) return False return True
[docs] def getdirectory(self, rel_path, full_path): stat, _, err = run_cmd( "globus-url-copy -v -r {}{} file://{}{}".format( os.path.join(self._root_address, rel_path), os.sep, full_path, os.sep ) ) if stat != 0: logging.warning( "FAIL: GridFTP repo '{}' does not have directory '{}' error={}\n".format( self._root_address, rel_path, err ) ) return False return True