from pyramid.view import view_config @view_config(route_name="gaugeoff_all", renderer="templates/gaugeoff_all.jinja2") @view_config(route_name="gaugeoff_all_json", renderer="prettyjson") def gaugeoff_all(request): gaugeoff_list = [] dateagg = list(request.db['gaugeOff'].aggregate( [ { '$project': { 'yearMonthDay': {'$dateToString': {'format': "%Y-%m-%d", 'date': "$timestamp"}}, 'tagname': 1, 'dailyTotal': 1, 'dailyAverage': 1, 'maxDailyValue': 1, 'minDailyValue': 1, 'currentValue': 1 } }, { '$group': { '_id': "$yearMonthDay", 'tags': {'$push': {'name': "$tagname"}}, 'totals': {'$push': {'total': "$dailyTotal"}}, 'averages': {'$push': {'average': "$dailyAverage"}}, 'max': {'$push': {'max': "$maxDailyValue"}}, 'min': {'$push': {'min': "$minDailyValue"}}, 'last': {'$push': {'last': "$currentValue"}} } } ])) for d in dateagg: newGO = {'date': datetime.strptime(d["_id"], '%Y-%m-%d'), 'tags': {}} for i in range(0, len(d['tags'])): newTagObj = { "max": d['max'][i]['max'], "min": d['min'][i]['min'], "last": d['last'][i]['last'], "total": d['totals'][i]['total'], "average": d['averages'][i]['average'], } newGO['tags'][d['tags'][i]['name']] = newTagObj gaugeoff_list.append(newGO) return {'navgroup': 'gaugeoff', 'data': gaugeoff_list}