#!/usr/bin/env python import os from fileTransferPlugin import FileTransferPlugin from dm.common.utility.ftpUtility import FtpUtility class GridftpFileTransferPlugin(FileTransferPlugin): DEFAULT_COMMAND = 'globus-url-copy -c -cd -r -vb -tcp-bs 512K -p 1 -sync -sync-level 2' DEFAULT_PORT = 2811 def __init__(self, src=None, dest=None, command=DEFAULT_COMMAND): FileTransferPlugin.__init__(self, command, src, dest) def getSrcUrl(self, filePath, dataDirectory): (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) if scheme: srcUrl = '%s://%s:%s/%s' % (scheme, host, port, filePath) elif self.src is None: srcUrl = 'file://%s' % filePath else: srcUrl = '%s/%s' % (self.src,filePath) return srcUrl def getDestUrl(self, filePath, dataDirectory, storageHost, storageDirectory): (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) dirName = os.path.dirname(os.path.relpath(filePath, dirPath)).strip() fileName = os.path.basename(filePath) destUrl = 'sshftp://%s/%s/%s/%s' % (storageHost, storageDirectory, dirName, fileName) return destUrl ####################################################################### # Testing. if __name__ == '__main__': ft = GridftpFileTransferPlugin('/tmp/xyz', '/tmp/xyz2') ft.start() print 'StdOut: ', ft.getStdOut() print 'StdErr: ', ft.getStdErr() print 'Exit Status: ', ft.getExitStatus()