Example #1
0
 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();
Example #2
0
  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;