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..0e93b257 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 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"