#!/usr/bin/env python import abc class FileProcessor: DEFAULT_NUMBER_OF_RETRIES = 0 DEFAULT_RETRY_WAIT_PERIOD_IN_SECONDS = 60 def __init__(self, dependsOn=[]): self.configDict = {} self.processorName = self.__class__.__name__ self.dependsOn = dependsOn self.statUtility = None @abc.abstractmethod def processDirectory(self, directoryInfo): return NotImplemented @abc.abstractmethod def processFile(self, fileInfo): return NotImplemented def replaceTemplates(self, inputString, fileInfo): experimentName = fileInfo.get('experimentName', '') outputString = inputString.replace('EXPERIMENT_NAME', experimentName) return outputString def checkUploadFilesForProcessing(self, filePathsDict, uploadInfo): return {} def configure(self): # Use this method for processor configuration pass def setConfigKeyValue(self, key, value): self.configDict[key] = value def getConfigKeyValue(self, key): return self.configDict.get(key) def setNumberOfRetriesIfNotSet(self, nRetries): if not self.configDict.has_key('numberOfRetries'): self.configDict['numberOfRetries'] = nRetries def setNumberOfRetries(self, nRetries): self.configDict['numberOfRetries'] = nRetries def getNumberOfRetries(self): return self.configDict.get('numberOfRetries', self.DEFAULT_NUMBER_OF_RETRIES) def setRetryWaitPeriodInSecondsIfNotSet(self, waitPeriod): if not self.configDict.has_key('retryWaitPeriodInSeconds'): self.configDict['retryWaitPeriodInSeconds'] = waitPeriod def setRetryWaitPeriodInSeconds(self, waitPeriod): self.configDict['retryWaitPeriodInSeconds'] = waitPeriod def getRetryWaitPeriodInSeconds(self): return self.configDict.get('retryWaitPeriodInSeconds', self.DEFAULT_RETRY_WAIT_PERIOD_IN_SECONDS) def setSkipOnFailure(self, skipOnFailure): self.configDict['skipOnFailure'] = skipOnFailure def getSkipOnFailure(self): return self.configDict.get('skipOnFailure', False)