Skip to content
Snippets Groups Projects
Commit 5b57c724 authored by sveseli's avatar sveseli
Browse files

merge from 0.13

parent fc83654b
No related branches found
No related tags found
No related merge requests found
...@@ -28,6 +28,16 @@ class GridftpFileTransferPlugin(FileTransferPlugin): ...@@ -28,6 +28,16 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
self.directoryTransferCommand = directoryTransferCommand self.directoryTransferCommand = directoryTransferCommand
self.pluginMustProcessFiles = pluginMustProcessFiles 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): def getSrcUrl(self, filePath, dataDirectory):
(scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT)
if scheme: if scheme:
...@@ -36,7 +46,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin): ...@@ -36,7 +46,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
srcUrl = 'file://%s' % filePath srcUrl = 'file://%s' % filePath
else: else:
srcUrl = '%s/%s' % (self.src,filePath) srcUrl = '%s/%s' % (self.src,filePath)
return srcUrl return self.replaceSpecialCharacters(srcUrl)
def getDestUrl(self, filePath, dataDirectory, storageHost, storageDirectory): def getDestUrl(self, filePath, dataDirectory, storageHost, storageDirectory):
(scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT)
...@@ -46,7 +56,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin): ...@@ -46,7 +56,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
destUrl = '%s/%s/%s' % (self.dest, dirName, fileName) destUrl = '%s/%s/%s' % (self.dest, dirName, fileName)
else: else:
destUrl = 'sshftp://%s/%s/%s/%s' % (storageHost, storageDirectory, dirName, fileName) destUrl = 'sshftp://%s/%s/%s/%s' % (storageHost, storageDirectory, dirName, fileName)
return destUrl return self.replaceSpecialCharacters(destUrl)
def checkUploadFilesForProcessing(self, filePathsDict, uploadInfo): def checkUploadFilesForProcessing(self, filePathsDict, uploadInfo):
if not self.pluginMustProcessFiles: if not self.pluginMustProcessFiles:
...@@ -105,7 +115,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin): ...@@ -105,7 +115,7 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
# Calculate checksum # Calculate checksum
statUtility = self.statUtility statUtility = self.statUtility
if not statUtility: if not statUtility:
(scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT) (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(srcUrl, defaultPort=self.DEFAULT_PORT)
statUtility = FtpUtility(host, port) statUtility = FtpUtility(host, port)
if not fileInfo.get('fileSize'): if not fileInfo.get('fileSize'):
statUtility.statFile(filePath, fileInfo) statUtility.statFile(filePath, fileInfo)
......
...@@ -167,11 +167,12 @@ class FtpUtility: ...@@ -167,11 +167,12 @@ class FtpUtility:
if __name__ == '__main__': if __name__ == '__main__':
print "Round 1: " print "Round 1: "
ftpUtility = FtpUtility('s7dserv', 2811) ftpUtility = FtpUtility('s33dserv', 2811)
#files = ftpUtility.getFiles2('/export/7IDSprayimage/Cummins/Data') #files = ftpUtility.getFiles2('/export/7IDSprayimage/Cummins/Data')
files = ftpUtility.getFiles2('/export/dm/test') files = ftpUtility.getFiles2('/export/dm/test')
print files print files
files = ftpUtility.getFiles('/export/dm/test') files = ftpUtility.getFiles('/export/dm/test')
print ftpUtility.parseFtpUrl('/export/dm/test')
print files print files
#files = ftpUtility.getFiles('/export/7IDSprayimage/Cummins/Data') #files = ftpUtility.getFiles('/export/7IDSprayimage/Cummins/Data')
#files = ftpUtility.getFiles2('/export/8-id-i/test', replacementDirPath='/data/testing/8-id-i') #files = ftpUtility.getFiles2('/export/8-id-i/test', replacementDirPath='/data/testing/8-id-i')
...@@ -187,7 +188,7 @@ if __name__ == '__main__': ...@@ -187,7 +188,7 @@ if __name__ == '__main__':
#print "Round 2: " #print "Round 2: "
#ftpUtility = FtpUtility('s7dserv', 2811) #ftpUtility = FtpUtility('s7dserv', 2811)
#files = ftpUtility.getFiles2('/export/7IDSprayimage/Cummins/Data') #files = ftpUtility.getFiles2('/export/7IDSprayimage/Cummins/Data')
#print ftpUtility.getMd5Sum('/export/8-id-i/test/testfile01') print ftpUtility.getMd5Sum('/export/dm/test/testfile01')
#print ftpUtility.statFile('/export/8-id-i/test/testfile01') #print ftpUtility.statFile('/export/8-id-i/test/testfile01')
#ftpUtility = FtpUtility('xstor-devel', 22) #ftpUtility = FtpUtility('xstor-devel', 22)
#files = ftpUtility.getFiles2('/data/testing') #files = ftpUtility.getFiles2('/data/testing')
......
...@@ -6,6 +6,7 @@ import stat ...@@ -6,6 +6,7 @@ import stat
import pysftp import pysftp
from dm.common.utility.timeUtility import TimeUtility from dm.common.utility.timeUtility import TimeUtility
from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.loggingManager import LoggingManager
from dm.common.exceptions.commandFailed import CommandFailed
import urlparse import urlparse
class SftpUtility: class SftpUtility:
...@@ -90,8 +91,15 @@ class SftpUtility: ...@@ -90,8 +91,15 @@ class SftpUtility:
if not self.sftpClient: if not self.sftpClient:
self.sftpClient = self.getSftpClient(self.host, self.port, self.username, self.password, self.privateKey) self.sftpClient = self.getSftpClient(self.host, self.port, self.username, self.password, self.privateKey)
try: try:
md5Sum = self.sftpClient.execute('md5sum "%s"' % filePath)[0].split()[0] #md5Sum = self.sftpClient.execute('md5sum "%s"' % filePath)[0].split()[0]
output = self.sftpClient.execute('md5sum "%s"' % filePath)[0].strip()
if not output.endswith(filePath):
raise CommandFailed(output)
md5Sum = output.split()[0]
fileInfo['md5Sum'] = md5Sum fileInfo['md5Sum'] = md5Sum
except CommandFailed, ex:
self.getLogger().error('Could not get md5sum for file %s: %s' % (filePath,ex))
raise
except Exception, ex: except Exception, ex:
self.getLogger().error('Could not get md5sum for file %s: %s' % (filePath,ex)) self.getLogger().error('Could not get md5sum for file %s: %s' % (filePath,ex))
self.closeConnection() self.closeConnection()
...@@ -137,9 +145,10 @@ class SftpUtility: ...@@ -137,9 +145,10 @@ class SftpUtility:
if __name__ == '__main__': if __name__ == '__main__':
#sftpUtility = SftpUtility('s1dserv', username='dmadmin', password='theKey12') #sftpUtility = SftpUtility('s1dserv', username='dmadmin', password='theKey12')
sftpUtility = SftpUtility('s1dserv',privateKey='/home/beams/DMADMIN/.ssh/id_dsa') sftpUtility = SftpUtility('s1dserv',privateKey='/home/beams/DMADMIN/.ssh/id_dsa')
files = sftpUtility.getFiles('/export/dm/test') #files = sftpUtility.getFiles('/export/dm/test')
print files #print files
print sftpUtility.getMd5Sum('/export/dm/test/testfile01') print sftpUtility.getMd5Sum('/export/dm/test/testfile03(2nd).txt')
print 'Closing connection' print sftpUtility.getMd5Sum('/export/dm/test/testfile 04.txt')
sftpUtility.closeConnection() #print 'Closing connection'
print sftpUtility.statFile('/export/dm/test/testfile01') #sftpUtility.closeConnection()
#print sftpUtility.statFile('/export/dm/test/testfile01')
...@@ -84,7 +84,7 @@ class ExperimentSessionController(DmSessionController): ...@@ -84,7 +84,7 @@ class ExperimentSessionController(DmSessionController):
raise InvalidRequest('Missing data directory.') raise InvalidRequest('Missing data directory.')
dataDirectory = Encoder.decode(dataDirectory) dataDirectory = Encoder.decode(dataDirectory)
if not dataDirectory.startswith('/') and not dataDirectory.count('://'): if not dataDirectory.startswith('/') and not dataDirectory.count('://'):
raise InvalidRequest('Data directory must be an absolute path.') raise InvalidRequest('Data directory must be an absolute path: %s' % dataDirectory)
daqInfo = {} daqInfo = {}
encodedDaqInfo = kwargs.get('daqInfo') encodedDaqInfo = kwargs.get('daqInfo')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment