"""
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