Private
Public Access
1
0
Files
rowsandall/rowers/middleware.py
2018-02-27 16:15:00 +01:00

76 lines
2.0 KiB
Python

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).order_by("-date")
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 = ms[0].date.strftime('%Y-%m-%d')
#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')