102 lines
2.8 KiB
Python
102 lines
2.8 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
|
|
from rowers.types import otwtypes
|
|
|
|
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=otwtypes,
|
|
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')
|
|
|
|
from django.shortcuts import redirect
|
|
|
|
|
|
allowed_paths = [
|
|
'/rowers/me/delete',
|
|
'/',
|
|
'/logout',
|
|
'/logout/',
|
|
'/rowers/me/gdpr-optin/',
|
|
'/rowers/me/gdpr-optin-confirm/',
|
|
'/rowers/me/gdpr-optin',
|
|
'/rowers/me/gdpr-optin-confirm'
|
|
'/rowers/exportallworkouts/',
|
|
'/rowers/exportallworkouts',
|
|
]
|
|
|
|
class GDPRMiddleWare(object):
|
|
def process_request(self, request):
|
|
if request.user.is_authenticated() and request.path not in allowed_paths:
|
|
r = getrower(request.user)
|
|
nexturl = request.path
|
|
if 'optin' in nexturl:
|
|
nexturl = '/rowers/list-workouts'
|
|
if not r.gdproptin:
|
|
return redirect(
|
|
'/rowers/me/gdpr-optin/?next=%s' % nexturl
|
|
)
|