Show
Ignore:
Timestamp:
05/12/08 03:03:33 (3 months ago)
Author:
travis
Message:

(travis) implementing indicator group functionality

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/opus_gui/results/opus_result_generator.py

    r3194 r3328  
    7474 
    7575 
    76  
     76class OpusIndicatorGroupProcessor(object): 
     77    def __init__(self,  
     78                 xml_path,  
     79                 domDocument, 
     80                 model, 
     81                 kwargs = None): 
     82           
     83        self.generator = OpusResultGenerator( 
     84           xml_path = xml_path, 
     85           domDocument = domDocument, 
     86           model = model                                             
     87        ) 
     88           
     89        self.visualizer = OpusResultVisualizer( 
     90           xml_path = xml_path, 
     91           domDocument = domDocument, 
     92           indicator_type = None, 
     93           indicators = None, 
     94           kwargs = kwargs                      
     95        ) 
     96        self.finishedCallback = None 
     97        self.errorCallback = None 
     98             
     99    def set_data(self,                   
     100                 indicator_defs,  
     101                 source_data_name, 
     102                 years): 
     103         
     104        self.indicator_defs = indicator_defs 
     105        self.years = years 
     106        self.source_data_name = source_data_name         
     107         
     108    def run(self): 
     109        succeeded = False 
     110         
     111        try: 
     112            self.visualizations = [] 
     113            for (visualization_type, dataset_name), indicators in self.indicator_defs.items(): 
     114                indicator_results = [] 
     115                for indicator_name in indicators: 
     116                    try: 
     117                        self.generator.set_data(self.source_data_name,  
     118                                                indicator_name,  
     119                                                dataset_name,  
     120                                                self.years) 
     121                        self.generator.run() 
     122                        indicator = {'indicator_name':indicator_name,#self.generator.last_added_indicator_result_name, 
     123                                     'dataset_name':dataset_name, 
     124                                     'source_data_name':self.source_data_name, 
     125                                     'years':self.years} 
     126                        indicator_results.append(indicator) 
     127                         
     128                    except: 
     129                        print 'could not generate indicator %s'%indicator_name 
     130                self.visualizer.indicator_type = visualization_type 
     131                self.visualizer.indicators = indicator_results 
     132                try: 
     133                    import pydevd;pydevd.settrace() 
     134                except: 
     135                    pass 
     136                self.visualizer.run() 
     137                self.visualizations.append((visualization_type, self.visualizer.get_visualizations())) 
     138             
     139            succeeded = True 
     140        except: 
     141            succeeded = False 
     142            errorInfo = formatExceptionInfo() 
     143            errorString = "Unexpected Error From Model :: " + str(errorInfo) 
     144            print errorInfo 
     145            self.errorCallback(errorString) 
     146 
     147        self.finishedCallback(succeeded) 
     148     
     149    def get_visualizations(self):  
     150        return self.visualizations 
     151     
    77152class OpusResultVisualizer(object): 
    78153    def __init__(self,  
     
    101176            try: 
    102177                # find the directory containing the eugene xml configurations 
    103                 fileNameInfo = QFileInfo(self.xml_path) 
    104                 fileNameAbsolute = fileNameInfo.absoluteFilePath().trimmed() 
    105                 self._visualize(configuration_path = fileNameAbsolute) 
     178                self._visualize() 
    106179                succeeded = True 
    107180            except: 
     
    110183                errorString = "Unexpected Error From Model :: " + str(errorInfo) 
    111184                print errorInfo 
    112                 self.errorCallback(errorString) 
    113  
    114             self.finishedCallback(succeeded) 
     185                if self.errorCallback is not None: 
     186                    self.errorCallback(errorString) 
     187            if self.finishedCallback is not None: 
     188                self.finishedCallback(succeeded) 
    115189        else: 
    116190            pass 
     
    118192 
    119193         
    120     def _visualize(self, configuration_path): 
     194    def _visualize(self): 
    121195        indicators_to_visualize = {} 
    122196        interface = IndicatorFrameworkInterface(domDocument = self.domDocument) 
     
    207281class OpusResultGenerator(object): 
    208282     
    209     def __init__(self, xml_path, domDocument): 
     283    def __init__(self, xml_path, domDocument, model): 
    210284        self.xml_path = xml_path 
    211285        self.finishedCallback = None 
     
    215289        self.firstRead = True 
    216290        self.domDocument = domDocument 
     291        self.model = model 
    217292     
    218293    def set_data(self, 
     
    231306            succeeded = False 
    232307            try: 
    233                 # find the directory containing the eugene xml configurations 
    234                 fileNameInfo = QFileInfo(self.xml_path) 
    235                 fileNameAbsolute = fileNameInfo.absoluteFilePath().trimmed() 
    236                 configuration_path = fileNameAbsolute 
    237308                try: 
    238309                    import pydevd;pydevd.settrace() 
     
    240311                    pass 
    241312                 
    242                 self._generate_results(configuration_path = configuration_path) 
     313                self._generate_results() 
    243314                succeeded = True 
    244315            except Exception, e: 
     
    255326                ) 
    256327                print errorString 
    257                 self.errorCallback(errorString) 
    258  
    259             self.finishedCallback(succeeded) 
     328                if self.errorCallback is not None: 
     329                    self.errorCallback(errorString) 
     330            if self.finishedCallback is not None: 
     331                self.finishedCallback(succeeded) 
    260332        else: 
    261333            pass 
    262334 
    263     def _generate_results(self, configuration_path): 
     335    def _generate_results(self): 
    264336#        try: 
    265337#            import pydevd;pydevd.settrace() 
     
    281353        computed_indicator = maker.create(indicator = indicator,  
    282354                                          source_data = source_data) 
     355        self.update_results_xml() 
     356 
     357    def update_results_xml(self): 
     358        print "update results" 
     359        model = self.model 
     360        document = self.domDocument 
     361         
     362        name = '%s.%s.%s'%(self.indicator_name,  
     363            self.dataset_name,  
     364            self.source_data_name) 
     365         
     366        self.last_added_indicator_result_name = name 
     367         
     368        newNode = model.create_node(document = document,  
     369                                    name = name,  
     370                                    type = 'indicator_result',  
     371                                    value = '') 
     372        source_data_node = model.create_node(document = document,  
     373                                    name = 'source_data',  
     374                                    type = 'string',  
     375                                    value = self.source_data_name) 
     376        indicator_node = model.create_node(document = document,  
     377                                    name = 'indicator_name',  
     378                                    type = 'string',  
     379                                    value = self.indicator_name)         
     380        dataset_node = model.create_node(document = document,  
     381                                    name = 'dataset_name',  
     382                                    type = 'string',  
     383                                    value = self.dataset_name) 
     384        year_node = model.create_node(document = document,  
     385                                    name = 'available_years',  
     386                                    type = 'string',  
     387                                    value = ', '.join([repr(year) for year in self.years]))                 
     388        parent = model.index(0,0,QModelIndex()).parent() 
     389        index = model.findElementIndexByName("Results", parent)[0] 
     390        if index.isValid(): 
     391            model.insertRow(0, 
     392                            index, 
     393                            newNode) 
     394        else: 
     395            print "No valid node was found..." 
     396         
     397        child_index = model.findElementIndexByName(name, parent)[0] 
     398        if child_index.isValid(): 
     399            for node in [dataset_node, indicator_node, source_data_node, year_node]: 
     400                model.insertRow(0, 
     401                                child_index, 
     402                                node) 
     403        else: 
     404            print "No valid node was found..." 
     405         
     406        model.emit(SIGNAL("layoutChanged()")) 
    283407                 
    284408    def _get_current_log(self, key):