def receive(self, msg): contents = ""; msgbody = msg.bodies('text/plain'); if hasattr(msg, 'attachments'): contents = msg.attachments[0][1].decode(); else: for header, body in msgbody: contents = body.decode(); lines = contents.split("\n"); # find most recent entry in db so we can ignore # all data that is older than it in the email query = sleepinstance.all(); query.order("-starttime"); newestentry = query.get(); isFirst = True; for line in lines: if isFirst: isFirst = False; continue; if not line: continue; sleepObj = self.getSleepInstance(line); # only add newer entries if (not newestentry) or sleepObj.starttime > newestentry.starttime: sleepObj.put();
def getDataByDate(self, groupByType): query = sleepinstance.all(); query.order("starttime"); dateToData = {}; sleepToDate = 0; numNights = 0; nightDates = []; for result in query.run(): resdate = self.getDateForStart(result.starttime); nightDate = date(day=resdate.day, month=resdate.month, year=resdate.year); if groupByType == GroupByType.WEEK: resdate = self.getWeekMid(resdate) if groupByType == GroupByType.MONTH: resdate = self.getMonthMid(resdate) if groupByType == GroupByType.YEAR: resdate = self.getYearMid(resdate) sleepToDate = sleepToDate + result.minutes; mins = result.minutes; nightsInGroup = 0; if resdate in dateToData: mins = mins + dateToData[resdate].minutes; nightsInGroup = dateToData[resdate].numNights; if not nightDate in nightDates: numNights = numNights + 1; nightsInGroup += 1 nightDates.append(nightDate); debt = numNights * 8 *60 - sleepToDate; avgsl = sleepToDate / numNights avgGroup = avgsl if groupByType == GroupByType.WEEK: avgsl= avgsl * 7; elif groupByType == GroupByType.MONTH: avgsl = avgsl * 30.5 elif groupByType == GroupByType.YEAR: avgsl = avgsl * 365 nightData = DataForDate(date = resdate, minutes = mins, avgForGroup = int(mins / nightsInGroup), avgToDate = int(avgsl), groupAvgToDate = int(avgGroup), numNights = nightsInGroup, sleepDebtToDate = debt); dateToData[resdate] = nightData; return dateToData;