Пример #1
0
        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
Пример #2
0
        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
Пример #3
0
    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
            }
Пример #4
0
    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,
            }
Пример #5
0
    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
            }
Пример #6
0
            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)
Пример #7
0
            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)
Пример #8
0
    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
Пример #9
0
    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