diff --git a/rowers/runkeeperstuff.py b/rowers/runkeeperstuff.py index 4b2b3322..3e047be4 100644 --- a/rowers/runkeeperstuff.py +++ b/rowers/runkeeperstuff.py @@ -7,6 +7,12 @@ from __future__ import unicode_literals, absolute_import from rowers.imports import * import re +import django_rq +queue = django_rq.get_queue('default') +queuelow = django_rq.get_queue('low') +queuehigh = django_rq.get_queue('low') +from rowers.utils import myqueue + from rowers.rower_rules import is_workout_user from rowsandall_app.settings import ( @@ -276,7 +282,7 @@ def default(o): if isinstance(o, numpy.int64): return int(o) raise TypeError -def workout_runkeeper_upload(user,w): +def workout_runkeeper_upload(user,w,asynchron=False): message = "Uploading to Runkeeper" rkid = 0 @@ -301,6 +307,10 @@ def workout_runkeeper_upload(user,w): 'Content-Length':'nnn'} url = "https://api.runkeeper.com/fitnessActivities" + if asynchron: + job = myqueue(queue,handle_runkeeper_sync, + w.id,url,headers,json.dumps(data,default=default)) + return "Asynchronous sync",0 response = requests.post(url,headers=headers,data=json.dumps(data,default=default)) # check for duplicate error first diff --git a/rowers/sporttracksstuff.py b/rowers/sporttracksstuff.py index 9f3210a9..2facc764 100644 --- a/rowers/sporttracksstuff.py +++ b/rowers/sporttracksstuff.py @@ -8,6 +8,12 @@ from __future__ import unicode_literals, absolute_import import numpy +import django_rq +queue = django_rq.get_queue('default') +queuelow = django_rq.get_queue('low') +queuehigh = django_rq.get_queue('low') +from rowers.utils import myqueue + from rowers.imports import * import re from rowsandall_app.settings import ( @@ -280,7 +286,8 @@ def workout_sporttracks_upload(user,w,asynchron=False): url = "https://api.sporttracks.mobi/api/v2/fitnessActivities.json" if asynchron: - job = myqueue(w.id,url,headers,json.dumps(data,default=default)) + job = myqueue(queue,handle_sporttracks_sync, + w.id,url,headers,json.dumps(data,default=default)) return "Asynchronous sync",0 response = requests.post(url,headers=headers,data=json.dumps(data,default=default)) diff --git a/rowers/tasks.py b/rowers/tasks.py index 6a46da89..0a0c1354 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -151,6 +151,21 @@ def handle_sporttracks_sync(workoutid,url,headers,data,debug=False,**kwargs): res = update_workout_field_sql(workoutid,'uploadedtosporttracks',id,debug=debug) +app.task +def handle_runkeeper_sync(workoutid,url,headers,data,debug=False,**kwargs): + response = requests.post(url,headers=headers,data=data) + if response.status_code not in [200,201]: + return 0 + + t = response.json() + uri = t['uris'][0] + regex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities/(\d+)\.json$' + m = re.compile(regex).match(uri).group(1) + + id = int(m) + + res = update_workout_field_sql(workoutid,'uploadedtorunkeeper',id,debug=debug) + @app.task @@ -2177,7 +2192,7 @@ def handle_sendemail_message(email,fromemail,rowername,message,teamname,managern fullemail = email subject = 'New message from team ' + teamname - from_email = fromemail + from_email = 'Rowsandall ' d = { 'rowername':rowername, diff --git a/rowers/teams.py b/rowers/teams.py index aa1c8903..1e591e3c 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -42,7 +42,7 @@ from rowers.tasks import ( handle_sendemail_message, ) -from rowers.models import ValidationError +from rowers.models import ValidationError, PlannedSession # Low level functions - to be called by higher level methods @@ -133,6 +133,11 @@ def add_member(id,rower): res = handle_add_workouts_team(ws,t) + # code to add plannedsessions + plannedsessions = PlannedSession.objects.filter(team=t,enddate__gte=timezone.now().date()) + for ps in plannedsessions: + res = ps.rower.add(rower) + # set_teamplanexpires(rower) return (id,'Member added') diff --git a/rowers/uploads.py b/rowers/uploads.py index 0d4f3c29..7992b0c1 100644 --- a/rowers/uploads.py +++ b/rowers/uploads.py @@ -555,7 +555,7 @@ def do_sync(w,options, quick=False): if ('upload_to_RunKeeper' in options and options['upload_to_RunKeeper']) or (w.user.runkeeper_auto_export and ispromember(w.user.user)): try: message,id = runkeeperstuff.workout_runkeeper_upload( - w.user.user,w + w.user.user,w,asynchron=True, ) except NoTokenError: message = "Please connect to Runkeeper first"