Skip to content
Snippets Groups Projects
Commit 98eca8bf authored by sveseli's avatar sveseli
Browse files

latest set of fixes for ftp

parents 396d2118 d98298f4
No related branches found
No related tags found
No related merge requests found
...@@ -31,7 +31,7 @@ execute() { ...@@ -31,7 +31,7 @@ execute() {
if [ ! -d $DM_SUPPORT_DIR ]; then if [ ! -d $DM_SUPPORT_DIR ]; then
echo "Creating new DM support directory $DM_SUPPORT_DIR." echo "Creating new DM support directory $DM_SUPPORT_DIR."
cd `dirname $DM_SUPPORT_DIR` cd `dirname $DM_SUPPORT_DIR`
execute svn export $DM_SVN_URL/support support execute svn co $DM_SVN_URL/support
fi fi
cd $DM_SUPPORT_DIR cd $DM_SUPPORT_DIR
execute svn update execute svn update
......
...@@ -78,19 +78,19 @@ class FtpUtility: ...@@ -78,19 +78,19 @@ class FtpUtility:
name = parts[-1].strip() name = parts[-1].strip()
self.mlsdFileStatDict[name] = parseDict self.mlsdFileStatDict[name] = parseDict
def getFiles(self, dir, fileDict={}): def getFiles(self, dirPath, fileDict={}):
if not self.ftpClient: if not self.ftpClient:
self.ftpClient = self.getFtpClient(self.host, self.port, self.username, self.password) self.ftpClient = self.getFtpClient(self.host, self.port, self.username, self.password)
# Need these to be class members for the callback function # Need these to be class members for the callback function
self.mlsdFileDict = {} self.mlsdFileDict = {}
self.mlsdDirList = [] self.mlsdDirList = []
self.ftpClient.retrlines('MLSD %s' % dir, self.__parseMlsdOutput) self.ftpClient.retrlines('MLSD %s' % dirPath, self.__parseMlsdOutput)
for (fileName,fileInfo) in self.mlsdFileDict.items(): for (fileName,fileInfo) in self.mlsdFileDict.items():
filePath = '%s/%s' % (dir, fileName) filePath = '%s/%s' % (dirPath, fileName)
fileDict[filePath] = fileInfo fileDict[filePath] = fileInfo
for d in copy.copy(self.mlsdDirList): for d in copy.copy(self.mlsdDirList):
dirPath = '%s/%s' % (dir,d) dirPath2 = '%s/%s' % (dirPath,d)
self.getFiles(dirPath,fileDict) self.getFiles(dirPath2,fileDict)
return fileDict return fileDict
def getMd5Sum(self, filePath, fileInfo={}): def getMd5Sum(self, filePath, fileInfo={}):
......
#!/usr/bin/env python
import copy
import stat
import pysftp
from dm.common.utility.loggingManager import LoggingManager
import urlparse
class SftpUtility:
DEFAULT_PORT = 22
def __init__(self, host, port=DEFAULT_PORT, username=None, password=None):
self.host = host
self.port = port
self.username = username
self.password = password
self.sftpClient = None
@classmethod
def parseFtpUrl(cls, url, defaultHost=None, defaultPort=None):
host = defaultHost
port = defaultPort
scheme = None
dirPath = url
if url.startswith('ftp://'):
parseResult = urlparse.urlparse(url)
scheme = parseResult.scheme
netlocTokens = parseResult.netloc.split(':')
host = netlocTokens[0]
if len(netlocTokens) > 1:
port = int(netlocTokens[1])
dirPath = parseResult.path
return (scheme, host, port, dirPath)
@classmethod
def getSftpClient(cls, host, port=DEFAULT_PORT, username=None, password=None):
sftp = pysftp.Connection(host, username=username, password=password, port=port)
return sftp
@classmethod
def getLogger(cls):
logger = LoggingManager.getInstance().getLogger(cls.__name__)
return logger
def __parseKeyValue(cls, keyValue, outputDict={}):
key,value = keyValue.split('=')
value = value.strip()
outputDict[key] = value
return outputDict
def getFiles(self, dirPath, fileDict={}):
if not self.sftpClient:
self.sftpClient = self.getSftpClient(self.host, self.port, self.username, self.password)
# Need these to be class members for the callback function
attrs = self.sftpClient.listdir_attr(dirPath)
mode = attrs[0].st_mode
for attr in attrs:
fileName = attr.filename
mode = attr.st_mode
fullPath = '%s/%s' % (dirPath, fileName)
if stat.S_ISDIR(mode):
self.getFiles(fullPath, fileDict)
elif stat.S_ISREG(mode):
fileInfo = {'filePath' : fullPath, 'fileSize' : attr.st_size, }
fileDict[fullPath] = fileInfo
return fileDict
#######################################################################
# Testing.
if __name__ == '__main__':
sftpUtility = SftpUtility('dmstorage', username='dm')
files = sftpUtility.getFiles('/opt/DM/data/ESAF/e1')
print files
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