diff --git a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py index acd76c7ba5df5ab4cf6911764fc1cd1dade63132..d9c224422032c8af231c2aed125f778df9905eee 100755 --- a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py +++ b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py @@ -28,6 +28,16 @@ class GridftpFileTransferPlugin(FileTransferPlugin): self.directoryTransferCommand = directoryTransferCommand self.pluginMustProcessFiles = pluginMustProcessFiles + def replaceSpecialCharacters(self, url): + replacementMap = { + '#' : '%23', + ' ' : '%20', + '~' : '%7E', + } + for (original, replacement) in replacementMap.items(): + url = url.replace(original,replacement) + return url + def getSrcUrl(self, filePath, dataDirectory): (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) if scheme: @@ -36,7 +46,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin): srcUrl = 'file://%s' % filePath else: srcUrl = '%s/%s' % (self.src,filePath) - return srcUrl + return self.replaceSpecialCharacters(srcUrl) def getDestUrl(self, filePath, dataDirectory, storageHost, storageDirectory): (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) @@ -46,7 +56,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin): destUrl = '%s/%s/%s' % (self.dest, dirName, fileName) else: destUrl = 'sshftp://%s/%s/%s/%s' % (storageHost, storageDirectory, dirName, fileName) - return destUrl + return self.replaceSpecialCharacters(destUrl) def checkUploadFilesForProcessing(self, filePathsDict, uploadInfo): if not self.pluginMustProcessFiles: