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 recode and field in recode: key = get_recoded_key(recode, field, key) else: key = capitalize(key) # enforce key ordering the first time we see this field if (not data or data.keys() == ['metadata']) 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 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 recode and field in recode: key = get_recoded_key(recode, field, key) else: key = capitalize(key) # enforce key ordering the first time we see this field if (not data or data.keys() == ["metadata"]) 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 data
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 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 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.__table__.columns if c.name not in ['geo_code', 'geo_level', 'geo_version']): 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) 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 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 columns(self, db_table=None, year=None, release=None): """ Work out our columns by finding those that aren't geo columns. """ db_table = db_table or self.get_db_table(year=year, release=release) columns = OrderedDict() indent = 0 if self.total_column: indent = 1 for col in (c.name for c in db_table.model.__table__.columns if c.name not in ['geo_code', 'geo_level', 'geo_version']): columns[col] = { 'name': capitalize(col.replace('_', ' ')), 'indent': 0 if col == self.total_column else indent } # TODO: cache it? return columns