def _process(self): if self._processed: return ds = self.report.datasource # record is a DatasourceRow instance for datasourcerow in ds: if callable(self.group_by): group_name = self.group_by(datasourcerow._original) elif isinstance(self.group_by, basestring): try: col = self.report.get_column_by_name(self.group_by) group_name = col.get_value(datasourcerow._original, self.report.datasource).value except KeyError: group_name = get_attr(datasourcerow._original, self.group_by) else: group_name = get_attr(datasourcerow._original, self.group_by) #datasourcerow._sort_func = self.report._order_columns orderedrow = DatasourceRow([ (name, datasourcerow[name]) for name in self.report.display_order() ]) orderedrow._original = datasourcerow._original self._dict[group_name].append(orderedrow) self._processed = True
def register(self, report_class): model = get_attr(report_class, 'datasource.model', None) if model is None: logger.error("Unable to monitor {0}".format(report_class)) elif model not in self.monitors: self.monitors.append(model) monitor_model(model) self.reports.append(_Entry(fqn(report_class), report_class))
def items(self): self._process() # order internal group elements for group_name, rows in self._dict.items(): rows.sort(key=lambda x: get_attr(x._original, self.internal_order)) #returns groups ordered sorted_groups = zip(self._dict.keys(), self._dict.values()) sorted_groups.sort(key=lambda x: smart_unicode(x[0])) return sorted_groups
def _process(self): if self._processed: return ds = self.report.datasource # record is a DatasourceRow instance for datasourcerow in ds: if callable(self.group_by): group_name = self.group_by(datasourcerow._original) elif isinstance(self.group_by, basestring): try: col = self.report.get_column_by_name(self.group_by) group_name = col.get_value(datasourcerow._original, self.report.datasource).value except KeyError: group_name = get_attr(datasourcerow._original, self.group_by) else: group_name = get_attr(datasourcerow._original, self.group_by) #datasourcerow._sort_func = self.report._order_columns orderedrow = DatasourceRow([(name, datasourcerow[name]) for name in self.report.display_order()]) orderedrow._original = datasourcerow._original self._dict[group_name].append(orderedrow) self._processed = True
def _get_value_from_attr(self, obj, attr_name, datasource): try: notfound = object() attr = get_attr(obj, attr_name, notfound) if attr is notfound: attr = getattr(datasource, attr_name, None) if attr: if callable(attr): return attr(obj) else: return attr else: if callable(attr): return attr() return attr except Exception as e: logger.exception(e) raise ValueError("Unable to get value from `%s`: `%s` `%s`" % (attr_name, type(e), e)) raise ValueError(attr_name)