| 76 | | |
| | 76 | class 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 | |
| | 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()")) |