Forked from
DM / dm-docs
261 commits behind, 543 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
uploadInfo.py 1.78 KiB
#!/usr/bin/env python
from dmObject import DmObject
from dm.common.utility.dictUtility import DictUtility
class UploadInfo(DmObject):
DEFAULT_KEY_LIST = [ 'id', 'experimentName', 'dataDirectory', 'status', 'nProcessedFiles', 'nFiles', 'percentageComplete', 'startTimestamp', 'endTimestamp' ]
def __init__(self, dict={}):
DmObject.__init__(self, dict)
self['fileDict'] = self.get('fileDict', {})
def updateStatus(self):
uploadStatus = self.get('status', 'running')
if uploadStatus == 'done':
return
fileDict = self.get('fileDict')
nFiles = len(fileDict)
nProcessedFiles = 0
for (filePath,uploadFileInfo) in fileDict.items():
if uploadFileInfo.get('processed'):
nProcessedFiles += 1
# need to handle 'failed' uploads
if nProcessedFiles == nFiles:
uploadStatus = 'done'
self['status'] = uploadStatus
self['nProcessedFiles'] = '%s' % (nProcessedFiles)
self['nFiles'] = '%s' % (nFiles)
percentageComplete = 100.0
if nFiles > 0:
percentageComplete = float(nProcessedFiles)/float(nFiles)*100.0
self['percentageComplete'] = '%.2f' % percentageComplete
def scrub(self):
# Remove redundant information
uploadInfo2 = DictUtility.deepCopy(self.data, excludeKeys='fileDict')
fileDict = self.get('fileDict', {})
fileDict2 = {}
for (filePath,fileInfo) in fileDict.items():
fileInfo2 = {}
for key in ['processed', 'lastUpdateTime']:
if fileInfo.has_key(key):
fileInfo2[key] = fileInfo[key]
fileDict2[filePath] = fileInfo2
uploadInfo2['fileDict'] = fileDict2
return UploadInfo(uploadInfo2)