Skip to content
Snippets Groups Projects
Commit 5471103c authored by sveseli's avatar sveseli
Browse files

add checksum and stat functionality

parent 6f339098
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python #!/usr/bin/env python
import copy import copy
import os
import time
from ftplib import FTP from ftplib import FTP
from dm.common.utility.timeUtility import TimeUtility
from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.loggingManager import LoggingManager
import urlparse import urlparse
...@@ -13,6 +16,7 @@ class FtpUtility: ...@@ -13,6 +16,7 @@ class FtpUtility:
self.username = username self.username = username
self.password = password self.password = password
self.ftpClient = None self.ftpClient = None
self.mlsdFileStatDict = {}
@classmethod @classmethod
def parseFtpUrl(cls, url, defaultHost=None, defaultPort=None): def parseFtpUrl(cls, url, defaultHost=None, defaultPort=None):
...@@ -64,6 +68,16 @@ class FtpUtility: ...@@ -64,6 +68,16 @@ class FtpUtility:
elif type == 'file': elif type == 'file':
self.mlsdFileDict[name] = parseDict self.mlsdFileDict[name] = parseDict
def __parseMlsdFileStat(self, line):
# ['Type=dir', 'Modify=20151018024430', 'Size=4096', 'Perm=el', 'UNIX.mode=0775', 'UNIX.owner=sveseli', 'UNIX.uid=500', 'UNIX.group=sveseli', 'UNIX.gid=500', 'Unique=fd00-c2e3e', ' dir2\r']
parts = line.split(';')
parseDict = {}
self.__parseKeyValue(parts[0], parseDict)
self.__parseKeyValue(parts[1], parseDict)
self.__parseKeyValue(parts[2], parseDict)
name = parts[-1].strip()
self.mlsdFileStatDict[name] = parseDict
def getFiles(self, dir, fileDict={}): def getFiles(self, dir, 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)
...@@ -79,10 +93,35 @@ class FtpUtility: ...@@ -79,10 +93,35 @@ class FtpUtility:
self.getFiles(dirPath,fileDict) self.getFiles(dirPath,fileDict)
return fileDict return fileDict
def getMd5Sum(self, filePath, fileInfo={}):
if not self.ftpClient:
self.ftpClient = self.getFtpClient(self.host, self.port, self.username, self.password)
md5Sum = self.ftpClient.sendcmd('CKSM MD5 0 -1 %s' % filePath).split()[-1]
fileInfo['md5Sum'] = md5Sum
return md5Sum
def statFile(self, filePath, fileInfo={}):
fileName = os.path.basename(filePath)
if not self.ftpClient:
self.ftpClient = self.getFtpClient(self.host, self.port, self.username, self.password)
# Need this to be class members for the callback function
self.ftpClient.retrlines('MLSD %s' % filePath, self.__parseMlsdFileStat)
fileStatDict = self.mlsdFileStatDict.get(fileName)
if fileStatDict:
fileInfo['fileSize'] = fileStatDict.get('Size')
modifyTime = fileStatDict.get('Modify')
modifyTime = time.mktime(time.strptime(modifyTime, '%Y%m%d%H%M%S'))
fileInfo['fileModificationTime'] = modifyTime
fileInfo['fileModificationTimeStamp'] = TimeUtility.formatLocalTimeStamp(modifyTime)
del self.mlsdFileStatDict[fileName]
return fileInfo
####################################################################### #######################################################################
# Testing. # Testing.
if __name__ == '__main__': if __name__ == '__main__':
ftpUtility = FtpUtility('dmstorage', 2811) ftpUtility = FtpUtility('s8dserv', 2811)
files=ftpUtility.getFiles('/opt/DM/data/ESAF/e1') files = ftpUtility.getFiles('/export/8-id-i/test')
print files print files
print ftpUtility.getMd5Sum('/export/8-id-i/test/testfile01')
print ftpUtility.statFile('/export/8-id-i/test/testfile01')
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