from django.utils import timezone from rowers.models import Workout, PowerTimeFitnessMetric, Rower import datetime from utils import myqueue import django_rq queue = django_rq.get_queue('default') from rowers.tasks import handle_updatefitnessmetric def getrower(user): try: r = Rower.objects.get(user=user) except Rower.DoesNotExist: r = Rower(user=user) r.save() return r def do_update(user,mode='rower',days=42): r = getrower(user) startdate = timezone.now()-datetime.timedelta(days=days) # test if not something already done now_date = timezone.now().strftime('%Y-%m-%d') ms = PowerTimeFitnessMetric.objects.filter( user=user, workoutmode=mode) if len(ms) == 0: max_workout_id = 0 last_update_date = '1972-01-01' else: max_workout_id = max([m.last_workout for m in ms]) last_update_date = max([m.date.strftime('%Y-%m-%d') for m in ms]) if mode == 'rower': workouts = Workout.objects.filter( user=r, workouttype__in=['rower','dynamic','slides'], startdatetime__gte=startdate) else: workouts = Workout.objects.filter( user=r, workouttype__in=['water','coastal'], startdatetime__gte=startdate) theids = [int(w.id) for w in workouts] try: max_id = max(theids) except ValueError: max_id = 0 if last_update_date < now_date and max_workout_id < max_id: job = myqueue(queue, handle_updatefitnessmetric, user.id,mode,theids, ) return 1 class PowerTimeFitnessMetricMiddleWare(object): def process_request(self, request): # Code to be executed before the view is called if request.user.is_authenticated(): result = do_update(request.user,mode='rower') result = do_update(request.user,mode='water')