def generate_indicators(self): self.filepaths = {} for name, (projconfig, batchname, visname, datasourcename, year) in self.indicators.items(): op = OpusProject() op.open(os.path.join(PROJECTCONFIGBASE, projconfig)) bp = BatchProcessor(op) visualizationsconf = get_batch_configuration(project=op, batch_name=batchname, vis_name=visname) bp.set_data(visualizations=visualizationsconf, source_data_name=datasourcename, years=[year, year]) bp.run() visualizations = bp.get_visualizations() # visualizations in batch assert len(visualizations) == 1 vistype, visualizations = visualizations[0] # indicators in visualization assert len(visualizations) == 1 self.filepaths[name] = visualizations[0].get_file_path()
def run(xml_configuration, indicator_batch, run_name, cache_directory, years): from opus_gui.results_manager.run.batch_processor import BatchProcessor project = OpusProject() project.open(xml_configuration) bp = BatchProcessor(project) visualizations = get_batch_configuration(project = project, batch_name = indicator_batch) bp.set_data(visualizations=visualizations, source_data_name = run_name, cache_directory = cache_directory, years = eval(years), ) bp.errorCallback = lambda x: x ## bp.finishedCallback = lambda x: x ## hack to work around BatchProcessor bp.run()
def generate_indicators(self): self.filepaths = {} for name, (projconfig, batchname, visname, datasourcename, year) in self.indicators.items(): op = OpusProject() op.open(os.path.join(PROJECTCONFIGBASE, projconfig)) bp = BatchProcessor(op) visualizationsconf = get_batch_configuration(project = op, batch_name = batchname, vis_name = visname) bp.set_data(visualizations = visualizationsconf, source_data_name = datasourcename, years = [year,year]) bp.run() visualizations = bp.get_visualizations() # visualizations in batch assert len(visualizations) == 1 vistype, visualizations = visualizations[0] # indicators in visualization assert len(visualizations) == 1 self.filepaths[name] = visualizations[0].get_file_path()
class RunModelThread(QThread): def __init__(self, mainwindow, modelguielement, batch_name = None, run_name = None): QThread.__init__(self, mainwindow) self.modelguielement = modelguielement self.modelguielement.model.run_name = run_name self.batch_name = batch_name self.run_name = run_name self.project = get_mainwindow_instance().project self.restart = False self.run_id = None self.config = None self.restart_year = None def run(self): self.modelguielement.model.progressCallback = self.progressCallback self.modelguielement.model.startedCallback = self.startedCallback self.modelguielement.model.finishedCallback = self.finishedCallback self.modelguielement.model.errorCallback = self.errorCallback if self.run_name.strip() != '': self.modelguielement.model.run_name = self.run_name if not self.restart: self.modelguielement.model.run() else: self.modelguielement.model.restart_run(self.run_id, self.config, self.restart_year, end_year=self.end_year, run_name=self.run_name) def pause(self): return self.modelguielement.model.pause() def resume(self): return self.modelguielement.model.resume() def cancel(self): return self.modelguielement.model.cancel() def setup_restart_run(self, run_id, config, restart_year, end_year=None, run_name=None): self.restart = True self.run_id = run_id self.config = config self.restart_year = restart_year self.end_year = end_year if run_name is not None: self.run_name = run_name def progressCallback(self,percent): print "Ping From Model" self.emit(SIGNAL("runPing(PyQt_PyObject)"),percent) def startedCallback(self, run_id, run_name, scenario_name, run_resources, status): cache_directory = os.path.normpath(run_resources['cache_directory']) start_year, end_year = run_resources['years'] baseyear = run_resources['base_year'] add_simulation_run(self.project, cache_directory = cache_directory, scenario_name = scenario_name, run_name = run_name, start_year = baseyear, end_year = end_year, run_id = run_id, status = status) def finishedCallback(self, success, run_name): if success: print "Success returned from Model" if self.modelguielement.model.cancelled: self.modelguielement.model.run_manager.cancel_run() else: if self.batch_name is not None: self.runIndicatorBatch() else: print "Error returned from Model" sync_available_runs(self.project) self.modelguielement.model.run_manager.close() self.emit(SIGNAL("runFinished(PyQt_PyObject)"),success) def get_run_name(self): return self.modelguielement.model.run_name def get_years(self): return self.modelguielement.model.config['years'] def runIndicatorBatch(self): visualizations = get_batch_configuration( project = self.project, batch_name = self.batch_name) start, end = self.get_years() self.batch_processor = BatchProcessor(project = self.project) self.batch_processor.errorCallback = self.errorCallback self.batch_processor.finishedCallback = self.indicatorBatchFinishedCallback self.batch_processor.set_data( visualizations = visualizations, source_data_name = self.get_run_name(), years = range(start, end + 1)) self.batch_processor.run() def indicatorBatchFinishedCallback(self, success): return def errorCallback(self,errorMessage): self.emit(SIGNAL("runError(PyQt_PyObject)"),errorMessage)
try: import wingdbstub except: pass option_group = MakeIndicatorsOptionGroup() parser = option_group.parser (options, args) = parser.parse_args() if not (options.xml_configuration and options.indicator_batch and ( options.cache_directory or options.run_name) and options.years ): parser.print_help() sys.exit(0) from opus_gui.results_manager.run.batch_processor import BatchProcessor project = OpusProject() project.open(options.xml_configuration) bp = BatchProcessor(project) visualizations = get_batch_configuration(project = project, batch_name = options.indicator_batch) bp.set_data(visualizations=visualizations, source_data_name = options.run_name, cache_directory = options.cache_directory, years = eval(options.years), ) bp.errorCallback = lambda x: x ## bp.finishedCallback = lambda x: x ## hack to work around BatchProcessor bp.run()
class RunModelThread(QThread): def __init__(self, mainwindow, modelguielement, batch_name=None, run_name=None): QThread.__init__(self, mainwindow) self.modelguielement = modelguielement self.modelguielement.model.run_name = run_name self.batch_name = batch_name self.run_name = run_name self.project = get_mainwindow_instance().project def run(self): self.modelguielement.model.progressCallback = self.progressCallback self.modelguielement.model.startedCallback = self.startedCallback self.modelguielement.model.finishedCallback = self.finishedCallback self.modelguielement.model.errorCallback = self.errorCallback if self.run_name.strip() != '': self.modelguielement.model.run_name = self.run_name self.modelguielement.model.run() def pause(self): return self.modelguielement.model.pause() def resume(self): return self.modelguielement.model.resume() def cancel(self): return self.modelguielement.model.cancel() def progressCallback(self, percent): print "Ping From Model" self.emit(SIGNAL("runPing(PyQt_PyObject)"), percent) def startedCallback(self, run_id, run_name, scenario_name, run_resources): cache_directory = os.path.normpath(run_resources['cache_directory']) start_year, end_year = run_resources['years'] baseyear = run_resources['base_year'] add_simulation_run(self.project, cache_directory=cache_directory, scenario_name=scenario_name, run_name=run_name, start_year=baseyear, end_year=end_year, run_id=run_id) def finishedCallback(self, success, run_name): if success: print "Success returned from Model" if self.modelguielement.model.cancelled: self.modelguielement.model.run_manager.cancel_run() else: if self.batch_name is not None: self.runIndicatorBatch() else: print "Error returned from Model" delete_simulation_run(self.project, run_name=run_name) self.modelguielement.model.run_manager.close() self.emit(SIGNAL("runFinished(PyQt_PyObject)"), success) def get_run_name(self): return self.modelguielement.model.run_name def get_years(self): return self.modelguielement.model.config['years'] def runIndicatorBatch(self): visualizations = get_batch_configuration(project=self.project, batch_name=self.batch_name) start, end = self.get_years() self.batch_processor = BatchProcessor(project=self.project) self.batch_processor.errorCallback = self.errorCallback self.batch_processor.finishedCallback = self.indicatorBatchFinishedCallback self.batch_processor.set_data(visualizations=visualizations, source_data_name=self.get_run_name(), years=range(start, end + 1)) self.batch_processor.run() def indicatorBatchFinishedCallback(self, success): return def errorCallback(self, errorMessage): self.emit(SIGNAL("runError(PyQt_PyObject)"), errorMessage)