Skip to content
Snippets Groups Projects
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)