def setup_columns(self): """ Work out our columns by finding those that aren't geo columns. """ self.columns = OrderedDict() self.columns['total'] = {'name': 'Total', 'indent': 0} for col in (c.name for c in self.table.columns if c.name not in ['geo_code', 'geo_level']): self.columns[col] = { 'name': capitalize(col.replace('_', ' ')), 'indent': 1 }
def setup_columns(self): """ Work out our columns by finding those that aren't geo columns. """ self.columns = OrderedDict() indent = 0 if self.total_column: indent = 1 for col in (c.name for c in self.model.columns if c.name not in ['geo_code', 'geo_level']): self.columns[col] = { 'name': capitalize(col.replace('_', ' ')), 'indent': 0 if col == self.total_column else indent }
def permute(indent, field_values, rows): field = self.fields[indent - 1] last = indent == len(self.fields) for val, rows in groupby(rows, lambda r: getattr(r, field)): # this is used to calculate the column id new_values = field_values + [val] col_id = self.column_id(new_values) self.columns[col_id] = { 'name': capitalize(val) + ('' if last else ':'), 'indent': 0 if col_id == self.total_column else indent, } if not last: permute(indent + 1, new_values, rows)
def get_data_object(obj): """ Recurse down the list of fields and return the final resting place for data for this stat. """ data = root_data for i, field in enumerate(fields): key = getattr(obj, field) if only and key not in only.get(field, {}): return key, None if exclude and key in exclude.get(field, {}): return key, None if recode and field in recode: recoder = recode[field] if isinstance(recoder, dict): key = recoder.get(key, key) else: key = recoder(field, key) else: key = capitalize(key) # enforce key ordering if not data and field in key_order: for fld in key_order[field]: data[fld] = OrderedDict() # ensure it's there if key not in data: data[key] = OrderedDict() data = data[key] # default values for intermediate fields if data and i < n_fields-1: data['metadata'] = {'name': key} # data is now the dict where the end value is going to go if not data: data['name'] = key data['numerators'] = {'this': 0.0} return key, data
def get_data_object(obj): """ Recurse down the list of fields and return the final resting place for data for this stat. """ data = root_data for i, field in enumerate(fields): key = getattr(obj, field) if only and field in only and key not in only.get(field, {}): return key, None if exclude and key in exclude.get(field, {}): return key, None if recode and field in recode: recoder = recode[field] if isinstance(recoder, dict): key = recoder.get(key, key) else: key = recoder(field, key) else: key = capitalize(key) # enforce key ordering if not data and field in key_order: for fld in key_order[field]: data[fld] = OrderedDict() # ensure it's there if key not in data: data[key] = OrderedDict() data = data[key] # default values for intermediate fields if data is not None and i < n_fields - 1: data['metadata'] = {'name': key} # data is now the dict where the end value is going to go if not data: data['name'] = key data['numerators'] = {'this': 0.0} return key, data