124 mandatoryArgs = [], optionalArgs = []):
125 self.inputParamName = inputParamName
126 self.outputParamName = outputParamName
127 self.mandatoryArgs = mandatoryArgs
128 if inputParamName not in mandatoryArgs:
129 mandatoryArgs.append(inputParamName)
130 if outputParamName not in mandatoryArgs:
131 mandatoryArgs.append(outputParamName)
132 self.optionalArgs = optionalArgs
133 self.runner = None
134 self.templateOutputName = templateOutputName
135 self.jobDirOutputName = jobDirOutputName
136 self.outputList = [ ]
137 self.reportName = 'jobReport.json'
138 self.prodDir = '.'
139 self.prodTaskDb = ''
140
141
142 parser = OptionParser(usage="%prog --argJSON=<JSON file>")
143 parser.add_option('-a', '--argJSON', dest='argJSON', help='Local file with JSON-serialized dictionary of key/value pairs')
144 (options,args) = parser.parse_args()
145 if len(args) != 0:
146 self.report('WRONGARGSNUMBER_ERROR','Wrong number of command line arguments')
147 parser.error('wrong number of command line arguments')
148 if not options.argJSON:
149 self.report('NOARGDICT_ERROR','Must use --argJSON to specify argdict.json file')
150 parser.error('option --argJSON is mandatory')
151 try:
152 self.argdictFileName = options.argJSON
153 self.argdict = readJSON(options.argJSON)
154 except Exception as e:
155 self.report('ARGDICTNOTREADABLE_ERROR','File %s with JSON-serialized argdict cannot be read' % options.argJSON)
156 print ('ERROR: file %s with JSON-serialized argdict cannot be read' % options.argJSON)
157 print ('DEBUG: Exception =',e)
158 sys.exit(1)
159
160
161 print ('\nInput argdict (%s):\n' % options.argJSON)
162 print (pprint.pformat(self.argdict))
163 print ('\n')
164
165
166 missingArgs = [ x for x in mandatoryArgs if x not in self.argdict ]
167 if missingArgs:
168 self.report('MISSINGPARAM_ERROR','Mandatory parameter(s) missing from argdict: '+str(missingArgs))
169 print ('ERROR: mandatory parameter(s) missing from argdict:', missingArgs)
170 sys.exit(1)
171
172
173
174 self.inputds, self.inputfiles = parseQualifiedFileNames(self.argdict[inputParamName])
175 if not self.inputfiles:
176 self.report('NOINPUTFILE_ERROR','No input file specified (only dataset name?)')
177 print ('ERROR: no input file specified')
178 sys.exit(1)
179 self.outputfile = getFileName(self.argdict[outputParamName])
180
181 self.outputds = getDataSetName(self.argdict[outputParamName])
182 if not self.outputds:
183 self.report('NODATASET_ERROR','No dataset given in parameter '+outputParamName)
184 print ('ERROR: No dataset given in parameter',outputParamName)
185 sys.exit(1)
186 splitDSName = self.outputds.
split(
'.')
187 if len(splitDSName)<5:
188 self.report('DATASETNAME_ERROR',"Output dataset name %s doesn't conform to standard naming convention" % self.outputds)
189 print ("ERROR: Output dataset name %s doesn't conform to standard naming convention" % self.outputds)
190 sys.exit(1)
191 self.dataset = '.'.join(splitDSName[:-3])
192 self.taskname = '.'.join(splitDSName[-2:])
193 self.jobname = os.path.basename(self.outputfile)
194 if '_attempt' in self.argdict:
195 self.jobname = self.jobname + '.v%s' % self.argdict['_attempt']
196
std::vector< std::string > split(const std::string &s, const std::string &t=":")