#!/usr/bin/env python

import abc
class FileProcessor:

    DEFAULT_NUMBER_OF_RETRIES = 0
    DEFAULT_RETRY_WAIT_PERIOD_IN_SECONDS = 60

    def __init__(self):
        self.configDict = {}

    @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 setNumberOfRetries(self, nRetries):
        self.configDict['numberOfRetries'] = nRetries

    def getNumberOfRetries(self):
        return self.configDict.get('numberOfRetries', self.DEFAULT_NUMBER_OF_RETRIES)

    def setRetryWaitPeriodInSeconds(self, waitPeriod):
        self.configDict['retryWaitPeriodInSeconds'] = waitPeriod

    def getRetryWaitPeriodInSeconds(self):
        return self.configDict.get('retryWaitPeriodInSeconds', self.DEFAULT_RETRY_WAIT_PERIOD_IN_SECONDS)