Beispiel #1
0
    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()
Beispiel #2
0
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()
Beispiel #3
0
    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()
Beispiel #4
0
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()
Beispiel #6
0
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)