Skip to content

Commit

Permalink
group by charts json
Browse files Browse the repository at this point in the history
  • Loading branch information
dpgaspar committed May 30, 2014
1 parent 8a8e74d commit a1a0eb0
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
21 changes: 21 additions & 0 deletions examples/quickcharts2/app/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,27 @@
from models import CountryStats, Country, PoliticalType
from app import appbuilder, db
from flask_appbuilder.models.group import aggregate_count, aggregate_sum
import random


def fill_data():
countries = ['Portugal', 'Germany', 'Spain', 'France', 'USA', 'China','Russia','Japan']
politicals = ['Democratic', 'Authorative']

for country in countries:
c = Country(name=country)
db.session.add(c)
db.session.commit()
for political in politicals:
c = PoliticalType(name=political)
db.session.add(c)
db.session.commit()
for x in range(1,100):
cs = CountryStats()
cs.population = random.randint(1, 1000000)
cs.unemployed = random.randint(1, 100)
cs.college = random.randint(1, 100)


class CountryStatsModelView(ModelView):
datamodel = SQLAModel(CountryStats)
Expand Down
3 changes: 2 additions & 1 deletion flask_appbuilder/charts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,9 @@ def chart(self):
joined_filters = self._filters.get_joined_filters(self._base_filters)

count, lst = self.datamodel.query(filters=joined_filters)
log.debug("Group Data1 {0}".format(lst))
data = group.apply(lst)
log.debug("GROUP: {0}".format(group.apply(lst)))
log.debug("GROUP JSON: {0}".format(group.to_json(data)))


class ChartView(BaseSimpleGroupByChartView):
Expand Down
29 changes: 28 additions & 1 deletion flask_appbuilder/models/group.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
from __future__ import unicode_literals
import datetime
import calendar
import logging
from itertools import groupby
from operator import itemgetter, attrgetter
from flask_appbuilder._compat import as_unicode


log = logging.getLogger(__name__)

Expand Down Expand Up @@ -124,7 +127,7 @@ class GroupBys(object):
group_bys_cols = None
# ['<COLNAME>',<FUNC>, ....]
aggr_by_cols = None
# [(<AGGR FUNC>),'<COLNAME>',...]
# [(<AGGR FUNC>,'<COLNAME>'),...]

def __init__(self, group_by_cols, aggr_by_cols):
self.group_bys_cols = group_by_cols
Expand All @@ -144,3 +147,27 @@ def apply(self, data):
result_item.append(aggr_by_col[0](items, aggr_by_col[1]))
result.append(result_item)
return result

def to_json(self, data, labels={}):
json_data = dict()
json_data['cols'] = []
for group_col in self.group_bys_cols:
json_data['cols'].append( {'id': group_col,
# 'label': as_unicode(labels[group_col]),
'type': 'string'})
for aggr_col in self.aggr_by_cols:
json_data['cols'].append({'id': aggr_col[1],
# 'label': as_unicode(labels[aggr_col[1]]),
'type': 'number'})
json_data['rows'] = []
for item in data:
row = {'c': []}
for group_col_data in item[0]:
row['c'].append({'v': group_col_data})
for col_data in item[1:]:
if isinstance(col_data, datetime.date):
row['c'].append({'v': (str(col_data))})
else:
row['c'].append({'v': col_data})
json_data['rows'].append(row)
return json_data

0 comments on commit a1a0eb0

Please sign in to comment.