def createWorkArea(logger, workingArea = '.', requestName = ''): """ _createWorkArea_ creates the working directory with the needed sub-folders in case it already exists it raises an exception """ if workingArea is None or workingArea == '.' : workingArea = os.getenv('CRAB_WORKING_AREA', '.') if not os.path.isabs(workingArea): workingArea = os.path.abspath(workingArea) ## create the working area if it is not there if not os.path.exists(workingArea): os.makedirs(workingArea) requestName = getRequestName(requestName) fullpath = os.path.join(workingArea, requestName) ## checking if there is no a duplicate if os.path.exists(fullpath): raise ConfigException("Working area '%s' already exists \nPlease change the requestName in the config file" % fullpath) ## creating the work area os.mkdir(fullpath) os.mkdir(os.path.join(fullpath, 'results')) os.mkdir(os.path.join(fullpath, 'inputs')) ## define the log file logfile = changeFileLogger(logger, workingpath = fullpath) return fullpath, requestName, logfile
def __init__(self, config, userConfig=None, logger=None): global configurationCache self.config = config self.logger = logger self.fullConfig = None self.outputFile = None #TODO: Deal with user parameters (pycfg_params) if userConfig: cfgBaseName = os.path.basename(userConfig).replace(".py", "") cfgDirName = os.path.dirname(os.path.abspath(userConfig)) if not os.path.isfile(userConfig): msg = "Cannot find file %s in %s" % (userConfig, os.getcwd()) raise ConfigException(msg) self.logger.debug("Importing CMSSW config %s" % userConfig) pyCfgParams = getattr(self.config.JobType, 'pyCfgParams', []) originalArgv = sys.argv sys.argv = [userConfig] if pyCfgParams: sys.argv.extend(pyCfgParams) self.logger.debug("Extended parameters are %s" % pyCfgParams) file, pathname, description = imp.find_module( cfgBaseName, [cfgDirName]) cacheLine = (tuple(sys.path), tuple(pathname), tuple(sys.argv)) if cacheLine in configurationCache: self.fullConfig = configurationCache[cacheLine] file.close() else: sys.path.append(os.getcwd()) try: self.fullConfig = imp.load_module(cfgBaseName, file, pathname, description) finally: file.close() configurationCache[cacheLine] = self.fullConfig sys.argv = originalArgv self.tweakJson = makeTweak(self.fullConfig.process).jsonise()