def get_diff(self, end, param, number, unit): params = {} if unit.startswith("day"): params['days'] = number if unit.startswith("week"): params['weeks'] = number if unit.startswith("month"): params['days'] = number*30 if unit.startswith("year"): params['days'] = number*365 start = end - datetime.timedelta(**params) start_val = approximate_user_data_for_date(self.user.userdata_set.all(),param,start) end_val = approximate_user_data_for_date(self.user.userdata_set.all(),param,end) if end_val and start_val: return end_val - start_val else: return None
def get_user_data(self,day=today()): """ By default returns today's user data. If other date is set in day parameter tries to return that day user data. If no user data is created for this date it returns a new object, if no other user_data is in the db it sets weight and waist to 0, else it sets weigth and waist to values from the latest user_data """ try: data = self.user.userdata_set.get(date=day) return data except UserData.DoesNotExist: # get the latest data approximated_weight = approximate_user_data_for_date(self.user.userdata_set.all(),"weight",day) if not approximated_weight: approximated_weight = 0 return UserData(user=self.user, weight=approximated_weight, waist=0, date=day)
def test_approximate_user_data_for_day(self): ''' Sprawdzamy czy approximate_user_data zwraca poprawne wartosci dla konkretnych dni ''' date_to = datetime.date(day=14,month=1,year=2009) date_from = date_to - datetime.timedelta(days=23) udl = [] for i in [1,2,3,4,11,12,13,14,20,21,22,23,24,25,26]: udl.append(UserData( weight=0 if i in [1,2,24,25,26] else 90 - i*0.5, date=date_from+datetime.timedelta(days=i)) ) self.assertEqual(88.5,approximate_user_data_for_date(udl, 'weight', datetime.date(day=23,month=12,year=2008)))