From 511a10a8e207617268ed08c874e03d86fd367ca2 Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Sun, 21 Feb 2016 04:19:15 +0000
Subject: [PATCH] fix for change directory bug

---
 .../dm/common/processing/plugins/fileTransferPlugin.py       | 5 ++---
 .../common/processing/plugins/gridftpFileTransferPlugin.py   | 2 +-
 .../dm/common/processing/plugins/rsyncFileTransferPlugin.py  | 3 +--
 .../plugins/rsyncWithChecksumAndDeleteFileTransferPlugin.py  | 4 +---
 src/python/dm/common/utility/dmSubprocess.py                 | 4 ++--
 .../daq_web_service/service/impl/dmFileSystemEventHandler.py | 4 ++--
 6 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/src/python/dm/common/processing/plugins/fileTransferPlugin.py b/src/python/dm/common/processing/plugins/fileTransferPlugin.py
index e1f20e5a..80df827e 100755
--- a/src/python/dm/common/processing/plugins/fileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/fileTransferPlugin.py
@@ -35,7 +35,6 @@ class FileTransferPlugin(FileProcessor):
 
     def getSrcUrl(self, filePath, dataDirectory):
         # Use relative path with respect to data directory as a source
-        os.chdir(dataDirectory)
         srcUrl = os.path.relpath(filePath, dataDirectory)
         return srcUrl
     
@@ -55,7 +54,7 @@ class FileTransferPlugin(FileProcessor):
     def setDest(self, dest):
         self.dest = dest
 
-    def start(self, src=None, dest=None, fileInfo={}):
+    def start(self, src=None, dest=None, fileInfo={}, cwd=None):
         # Use preconfigured source if provided source is None
         fileSrc = src
         if src is None:
@@ -76,7 +75,7 @@ class FileTransferPlugin(FileProcessor):
         fileDest = self.replaceTemplates(fileDest, fileInfo)
         if not fileSrc or not fileDest:
             raise InvalidRequest('Both source and destination must be non-empty strings.')
-        self.subprocess = DmSubprocess.getSubprocess(self.getFullCommand(fileSrc, fileDest))
+        self.subprocess = DmSubprocess.getSubprocess(self.getFullCommand(fileSrc, fileDest), cwd=cwd)
         return self.subprocess.run()
 
     def wait(self):
diff --git a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
index c9c3f324..b07cc504 100755
--- a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
@@ -107,7 +107,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
 
         # Transfer file
         self.logger.debug('Starting transfer: %s -> %s' % (srcUrl, destUrl))
-        self.start(srcUrl, destUrl, fileInfo)
+        self.start(src=srcUrl, dest=destUrl, fileInfo=fileInfo, cwd=dataDirectory)
 
         # Get remote checksum
         if self.remoteMd5Sum:
diff --git a/src/python/dm/common/processing/plugins/rsyncFileTransferPlugin.py b/src/python/dm/common/processing/plugins/rsyncFileTransferPlugin.py
index 4535418c..5f50169d 100755
--- a/src/python/dm/common/processing/plugins/rsyncFileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/rsyncFileTransferPlugin.py
@@ -54,7 +54,6 @@ class RsyncFileTransferPlugin(FileTransferPlugin):
         storageDirectory = fileInfo.get('storageDirectory')
         destUrl = self.getDestUrl(filePath, dataDirectory, storageHost, storageDirectory)
         # Use relative path with respect to data directory as a source
-        os.chdir(dataDirectory)
         srcUrl = self.getSrcUrl(filePath, dataDirectory)
 
         # Calculate checksum
@@ -66,7 +65,7 @@ class RsyncFileTransferPlugin(FileTransferPlugin):
 
         # Transfer file
         self.logger.debug('Starting transfer: %s' % fileInfo)
-        self.start(srcUrl, destUrl, fileInfo)
+        self.start(src=srcUrl, dest=destUrl, fileInfo=fileInfo, cwd=dataDirectory)
 
         # Get remote checksum
         if self.remoteMd5Sum:
diff --git a/src/python/dm/common/processing/plugins/rsyncWithChecksumAndDeleteFileTransferPlugin.py b/src/python/dm/common/processing/plugins/rsyncWithChecksumAndDeleteFileTransferPlugin.py
index 55cfef1b..855d8f39 100755
--- a/src/python/dm/common/processing/plugins/rsyncWithChecksumAndDeleteFileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/rsyncWithChecksumAndDeleteFileTransferPlugin.py
@@ -26,7 +26,6 @@ class RsyncWithChecksumAndDeleteFileTransferPlugin(FileTransferPlugin):
         storageDirectory = fileInfo.get('storageDirectory')
         destUrl = self.getDestUrl(filePath, dataDirectory, storageHost, storageDirectory)
         # Use relative path with respect to data directory as a source
-        os.chdir(dataDirectory)
         srcUrl = self.getSrcUrl(filePath, dataDirectory)
 
         # Calculate checksum
@@ -35,8 +34,7 @@ class RsyncWithChecksumAndDeleteFileTransferPlugin(FileTransferPlugin):
         self.logger.debug('File info before transfer: %s' % fileInfo)
 
         # Transfer file
-        self.start(srcUrl, destUrl, fileInfo)
-
+        self.start(src=srcUrl, dest=destUrl, fileInfo=fileInfo, cwd=dataDirectory)
         # Get remote checksum
         fileInfo2 = {}
         fileInfo2['experimentFilePath'] = experimentFilePath
diff --git a/src/python/dm/common/utility/dmSubprocess.py b/src/python/dm/common/utility/dmSubprocess.py
index 5a4d3986..7d4e5d93 100755
--- a/src/python/dm/common/utility/dmSubprocess.py
+++ b/src/python/dm/common/utility/dmSubprocess.py
@@ -17,11 +17,11 @@ class DmSubprocess(subprocess.Popen):
 
     # Get subprocess instance.
     @classmethod
-    def getSubprocess(cls, command):
+    def getSubprocess(cls, command, cwd=None):
         close_fds = True
         if platform.system() != 'Windows':
             close_fds = False
-        p = DmSubprocess(command, close_fds=close_fds)
+        p = DmSubprocess(command, close_fds=close_fds, cwd=cwd)
         return p
 
     # Execute command
diff --git a/src/python/dm/daq_web_service/service/impl/dmFileSystemEventHandler.py b/src/python/dm/daq_web_service/service/impl/dmFileSystemEventHandler.py
index dc9f033a..f0dfa13b 100755
--- a/src/python/dm/daq_web_service/service/impl/dmFileSystemEventHandler.py
+++ b/src/python/dm/daq_web_service/service/impl/dmFileSystemEventHandler.py
@@ -43,8 +43,8 @@ class DmFileSystemEventHandler(FileSystemEventHandler):
     def processEvent(self, event):
         if event.is_directory:
             try:
-                files = glob.glob(os.path.join(event.src_path,'*.*'))
-                self.logger.debug('Processing directory event: %s , src path: %s ,  latest files: %s' % (event.__dict__, event.src_path, files))
+                files = glob.glob(os.path.join(event.src_path,'*'))
+                self.logger.debug('Processing directory event: %s , src path: %s' % (event.__dict__, event.src_path))
                 if len(files) > 0:
                     filePath = max(files, key=os.path.getctime)
                     self.logger.debug('Latest file: %s' % (filePath))
-- 
GitLab