diff --git a/src/python/dm/common/plugins/__init__.py b/src/python/dm/common/plugins/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/python/dm/common/plugins/fileProcessorInterface.py b/src/python/dm/common/plugins/fileProcessorInterface.py new file mode 100755 index 0000000000000000000000000000000000000000..03546ebd084e378b0ee126750b5fa388b3d82191 --- /dev/null +++ b/src/python/dm/common/plugins/fileProcessorInterface.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +import abc +class FileProcessorInterface: + + @abc.abstractmethod + def processFile(self, srcPath): + return NotImplemented + diff --git a/src/python/dm/common/plugins/fileTransferPlugin.py b/src/python/dm/common/plugins/fileTransferPlugin.py new file mode 100755 index 0000000000000000000000000000000000000000..969fd6d2306bd809d32c432d2c3ef125a9ca3436 --- /dev/null +++ b/src/python/dm/common/plugins/fileTransferPlugin.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +from dm.common.utility.loggingManager import LoggingManager +from dm.common.utility.dmSubprocess import DmSubprocess +from dm.common.exceptions.invalidArgument import InvalidArgument +from dm.common.exceptions.invalidRequest import InvalidRequest +from fileProcessorInterface import FileProcessorInterface + +class FileTransferPlugin(FileProcessorInterface): + + def __init__(self, command, src=None, dest=None): + self.src = src + self.dest = dest + self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) + if command is None or not len(command): + raise InvalidArgument('File transfer command must be non-empty string.') + self.command = command + self.subprocess = None + + def processFile(self, src): + self.start(src) + + def getFullCommand(self): + return '%s %s %s' % (self.command, self.src, self.dest) + + def setSrc(self, src): + self.src = src + + def setDest(self, dest): + self.dest = dest + + def start(self, src=None): + if src is not None: + self.src = src + if not self.src or not self.dest: + raise InvalidRequest('Both source and destination must be non-empty strings.') + self.subprocess = DmSubprocess.getSubprocess(self.getFullCommand()) + return self.subprocess.run() + + def wait(self): + if self.subprocess: + return self.subprocess.wait() + return None + + def poll(self): + if self.subprocess: + return self.subprocess.poll() + return None + + def getStdOut(self): + if self.subprocess: + return self.subprocess.getStdOut() + return None + + + def getStdErr(self): + if self.subprocess: + return self.subprocess.getStdErr() + return None + + def getExitStatus(self): + if self.subprocess: + return self.subprocess.getExitStatus() + return None + + def reset(self): + self.subprocess = None + +####################################################################### +# Testing. +if __name__ == '__main__': + ft = FileTransfer('rsync -arv', '/tmp/xyz', '/tmp/xyz2') + ft.start() + print 'StdOut: ', ft.getStdOut() + print 'StdErr: ', ft.getStdErr() + print 'Exit Status: ', ft.getExitStatus() diff --git a/src/python/dm/common/plugins/rsyncFileTransferPlugin.py b/src/python/dm/common/plugins/rsyncFileTransferPlugin.py new file mode 100755 index 0000000000000000000000000000000000000000..16b10a76549c8cc4aff946daa0675af01a02ab00 --- /dev/null +++ b/src/python/dm/common/plugins/rsyncFileTransferPlugin.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from fileTransferPlugin import FileTransferPlugin +class RsyncFileTransferPlugin(FileTransferPlugin): + + COMMAND = 'rsync -arvlP' + + def __init__(self, src=None, dest=None): + FileTransferPlugin.__init__(self, self.COMMAND, src, dest) + +####################################################################### +# Testing. +if __name__ == '__main__': + ft = RsyncFileTransferPlugin('/tmp/xyz', '/tmp/xyz2') + ft.start() + print 'StdOut: ', ft.getStdOut() + print 'StdErr: ', ft.getStdErr() + print 'Exit Status: ', ft.getExitStatus()