diff --git a/rowers/underarmourstuff.py b/rowers/underarmourstuff.py index b58c7ec1..6dfbbc97 100644 --- a/rowers/underarmourstuff.py +++ b/rowers/underarmourstuff.py @@ -28,7 +28,7 @@ from django.contrib.auth.decorators import login_required # from .models import Profile from rowingdata import rowingdata import pandas as pd -from rowers.models import Rower,Workout +from rowers.models import Rower,Workout,checkworkoutuser from rowsandall_app.settings import ( C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, @@ -88,6 +88,20 @@ def custom_exception_handler(exc,message): return res +# Checks if user has UnderArmour token, renews them if they are expired +def underarmour_open(user): + r = Rower.objects.get(user=user) + if (r.underarmourtoken == '') or (r.underarmourtoken is None): + s = "Token doesn't exist. Need to authorize" + raise UnderArmourNoTokenError("User has no token") + else: + if (timezone.now()>r.underarmourtokenexpirydate): + thetoken = underarmourstuff.rower_underarmour_token_refresh(user) + else: + thetoken = r.underarmourtoken + + return thetoken + # Refresh ST token using refresh token def do_refresh_token(refreshtoken,access_token): client_auth = requests.auth.HTTPBasicAuth(UNDERARMOUR_CLIENT_KEY, UNDERARMOUR_CLIENT_SECRET) @@ -385,3 +399,55 @@ def get_userid(access_token): res = 0 return res + +def workout_ua_upload(user,w): + message = "" + uaid = 0 + + r = w.user + + thetoken = underarmour_open(r.user) + + # ready to upload. Hurray + + if (checkworkoutuser(user,w)): + data = createunderarmourworkoutdata(w) +# return HttpResponse(json.dumps(data)) + if not data: + message = "Data error" + uaid = 0 + return message, uaid + + authorizationstring = str('Bearer ' + thetoken) + headers = {'Authorization': authorizationstring, + 'Api-Key': UNDERARMOUR_CLIENT_KEY, + 'user-agent': 'sanderroosendaal', + 'Content-Type': 'application/json', + } + + url = "https://api.ua.com/v7.1/workout/" + response = requests.post(url,headers=headers,data=json.dumps(data)) + + # check for duplicate error first + if (response.status_code == 409 ): + message = "Duplicate error" + w.uploadedtounderarmour = -1 + uaid = -1 + w.save() + elif (response.status_code == 201 or response.status_code==200): + uaid = getidfromresponse(response) + w.uploadedtounderarmour = uaid + w.save() + return '',uaid + else: + s = response + message = "Something went wrong in workout_underarmour_upload_view: %s - %s" % (s.reason,s.text) + uaid = 0 + return message, uaid + + else: + message = "You are not authorized to upload this workout" + uaid = 0 + return message, uaid + + return message, uaid diff --git a/rowers/views.py b/rowers/views.py index 1a5cb1c8..9350fe7b 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -60,6 +60,7 @@ import stravastuff from stravastuff import StravaNoTokenError import sporttracksstuff import underarmourstuff +from underarmourstuff import UnderArmourNoTokenError,underarmour_open import tpstuff import runkeeperstuff import ownapistuff @@ -1035,19 +1036,6 @@ def add_workout_from_underarmourdata(user,importid,data): -# Checks if user has UnderArmour token, renews them if they are expired -def underarmour_open(user): - r = Rower.objects.get(user=user) - if (r.underarmourtoken == '') or (r.underarmourtoken is None): - s = "Token doesn't exist. Need to authorize" - raise UnderarmourNoTokenError("User has no token") - else: - if (timezone.now()>r.underarmourtokenexpirydate): - thetoken = underarmourstuff.rower_underarmour_token_refresh(user) - else: - thetoken = r.underarmourtoken - - return thetoken # Checks if user has UnderArmour token, renews them if they are expired def tp_open(user): @@ -1441,7 +1429,7 @@ def workout_underarmour_upload_view(request,id=0): try: thetoken = underarmour_open(r.user) - except UnderarmourNoTokenError: + except UnderArmourNoTokenError: return HttpResponseRedirect("/rowers/me/underarmourauthorize/") # ready to upload. Hurray @@ -5895,6 +5883,14 @@ def workout_upload_view(request,message="", ) except RunKeeperNoTokenError: pass + + if (upload_to_ua): + try: + uamessage,uaid = underarmourstuff.workout_ua_upload( + request.user,w + ) + except UnderArmourNoTokenError: + pass if message: url = reverse(workout_edit_view, diff --git a/rowsandall_app/.#settings.py b/rowsandall_app/.#settings.py new file mode 100644 index 00000000..ae8299c2 --- /dev/null +++ b/rowsandall_app/.#settings.py @@ -0,0 +1 @@ +E408191@CZ27LT9RCGN72.33704:1494265730 \ No newline at end of file diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 0bf59f32..48486dcd 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -241,7 +241,8 @@ RUNKEEPER_REDIRECT_URI = CFG['runkeeper_callback'] UNDERARMOUR_CLIENT_ID = CFG['underarmour_client_name'] UNDERARMOUR_CLIENT_SECRET = CFG['underarmour_client_secret'] UNDERARMOUR_CLIENT_KEY = CFG['underarmour_client_key'] -UNDERARMOUR_REDIRECT_URI = "http://rowsandall.com/underarmour_callback" +UNDERARMOUR_REDIRECT_URI = CFG['underarmour_callback'] +#UNDERARMOUR_REDIRECT_URI = "http://rowsandall.com/underarmour_callback" #UNDERARMOUR_REDIRECT_URI = "http://localhost:8000/underarmour_callback" # TrainingPeaks