Private
Public Access
1
0

Merge branch 'develop' into feature/restapi

This commit is contained in:
Sander Roosendaal
2016-12-18 17:02:11 +01:00
5 changed files with 68 additions and 58 deletions

View File

@@ -22,6 +22,7 @@ from rowingdata import rowingdata
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from rowers.models import Rower,Workout from rowers.models import Rower,Workout
import sys
from rowsandall_app.settings import C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET from rowsandall_app.settings import C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET
@@ -243,9 +244,16 @@ def do_refresh_token(refreshtoken):
headers=headers) headers=headers)
token_json = response.json() token_json = response.json()
thetoken = token_json['access_token'] try:
expires_in = token_json['expires_in'] thetoken = token_json['access_token']
refresh_token = token_json['refresh_token'] expires_in = token_json['expires_in']
refresh_token = token_json['refresh_token']
except:
with open("media/c2errors.log","a") as errorlog:
errorlog.write("Unexpected Error: "+str(sys.exc_info()[0]))
thetoken = None
expires_in = None
refresh_token = None
return [thetoken,expires_in,refresh_token] return [thetoken,expires_in,refresh_token]

View File

@@ -42,6 +42,7 @@ class DocumentsForm(forms.Form):
('ergdata' , 'ErgData CSV'), ('ergdata' , 'ErgData CSV'),
('ergstick' , 'ErgStick CSV'), ('ergstick' , 'ErgStick CSV'),
('painsleddesktop' , 'Painsled Desktop CSV'), ('painsleddesktop' , 'Painsled Desktop CSV'),
('zip','Zipped file'),
) )
title = forms.CharField(required=False) title = forms.CharField(required=False)
file = forms.FileField(required=True, file = forms.FileField(required=True,

View File

@@ -100,6 +100,14 @@ def make_new_workout_from_email(rr,f2,name,cntr=0):
workouttype = 'rower' workouttype = 'rower'
f2 = f2.name f2 = f2.name
fileformat = get_file_type('media/'+f2) fileformat = get_file_type('media/'+f2)
if len(fileformat)==3 and fileformat[0]=='zip':
f_to_be_deleted = f2
with zipfile.ZipFile(f2) as z:
f2 = z.extract(z.namelist()[0],path='media/')
fileformat = fileformat[2]
os.remove(f_to_be_deleted)
if fileformat == 'unknown': if fileformat == 'unknown':
if settings.DEBUG: if settings.DEBUG:
res = handle_sendemail_unrecognized.delay(f2, res = handle_sendemail_unrecognized.delay(f2,

View File

@@ -1,4 +1,5 @@
import time import time
import zipfile
import operator import operator
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.db.models import Q from django.db.models import Q
@@ -752,7 +753,11 @@ def c2_open(user):
# return HttpResponseRedirect("/rowers/me/c2authorize/") # return HttpResponseRedirect("/rowers/me/c2authorize/")
else: else:
if (timezone.now()>r.tokenexpirydate): if (timezone.now()>r.tokenexpirydate):
thetoken = c2stuff.rower_c2_token_refresh(user) res = c2stuff.rower_c2_token_refresh(user)
if res[0] != None:
thetoken = res[0]
else:
thetoken = r.c2token
else: else:
thetoken = r.c2token thetoken = r.c2token
@@ -971,8 +976,13 @@ def workout_c2_upload_view(request,id=0):
'user-agent': 'sanderroosendaal', 'user-agent': 'sanderroosendaal',
'Content-Type': 'application/json'} 'Content-Type': 'application/json'}
import urllib import urllib
url = "https://log.concept2.com/api/users/%s/results" % (c2userid) try:
response = requests.post(url,headers=headers,data=json.dumps(data)) url = "https://log.concept2.com/api/users/%s/results" % (c2userid)
response = requests.post(url,headers=headers,data=json.dumps(data))
except:
message = "Unexpected Error: "+str(sys.exc_info()[0])
with open("media/c2errors.log","a") as errorlog:
errorlog.write("Unexpected Error: "+str(sys.exc_info()[0]))
# check for duplicate error first # check for duplicate error first
if (response.status_code == 409 ): if (response.status_code == 409 ):
@@ -988,10 +998,15 @@ def workout_c2_upload_view(request,id=0):
url = "/rowers/workout/"+str(w.id)+"/export" url = "/rowers/workout/"+str(w.id)+"/export"
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
except: except:
message = "Something went wrong in workout_c2_upload_view. Response code 200/201 but C2 sync failed: "+response.text message = "Something went wrong in workout_c2_upload_view. Response code 200/201 but C2 sync failed: "+response.text
with open("media/c2errors.log","a") as errorlog:
errorlog.write("Unexpected Error: "+str(sys.exc_info()[0]))
else: else:
s = response s = response
message = "Something went wrong in workout_c2_upload_view. C2 sync failed." message = "Something went wrong in workout_c2_upload_view. C2 sync failed."
with open("media/c2errors.log","a") as errorlog:
errorlog.write("Unexpected Error: "+response.text())
else: else:
message = "You are not authorized to upload this workout" message = "You are not authorized to upload this workout"
@@ -1108,20 +1123,25 @@ def rower_sporttracks_authorize(request):
def rower_c2_token_refresh(request): def rower_c2_token_refresh(request):
r = Rower.objects.get(user=request.user) r = Rower.objects.get(user=request.user)
res = c2stuff.do_refresh_token(r.c2refreshtoken) res = c2stuff.do_refresh_token(r.c2refreshtoken)
access_token = res[0] if res[0] != None:
expires_in = res[1] access_token = res[0]
refresh_token = res[2] expires_in = res[1]
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in) refresh_token = res[2]
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
r = Rower.objects.get(user=request.user)
r.c2token = access_token
r.tokenexpirydate = expirydatetime
r.c2refreshtoken = refresh_token
r = Rower.objects.get(user=request.user) r.save()
r.c2token = access_token
r.tokenexpirydate = expirydatetime
r.c2refreshtoken = refresh_token
r.save() successmessage = "Tokens refreshed. Good to go"
message = ""
successmessage = "Tokens refreshed. Good to go" else:
return imports_view(request,successmessage=successmessage) successmessage = ""
message = "Something went wrong (refreshing tokens). Please reauthorize:"
return imports_view(request,successmessage=successmessage,message=message)
@login_required() @login_required()
def rower_sporttracks_token_refresh(request): def rower_sporttracks_token_refresh(request):
@@ -3503,13 +3523,6 @@ def c2listdebug_view(request,message=""):
return HttpResponseRedirect("/rowers/me/c2authorize/") return HttpResponseRedirect("/rowers/me/c2authorize/")
r = Rower.objects.get(user=request.user) r = Rower.objects.get(user=request.user)
#if (r.c2token == '') or (r.c2token is None):
#s = "Token doesn't exist. Need to authorize"
#return HttpResponseRedirect("/rowers/me/c2authorize/")
#elif (timezone.now()>r.tokenexpirydate):
#s = "Token expired. Needs to refresh."
#res = c2stuff.rower_c2_token_refresh(request.user)
res = c2stuff.get_c2_workout_list(request.user) res = c2stuff.get_c2_workout_list(request.user)
@@ -3552,15 +3565,6 @@ def workout_c2import_view(request,message=""):
except C2NoTokenError: except C2NoTokenError:
return HttpResponseRedirect("/rowers/me/c2authorize/") return HttpResponseRedirect("/rowers/me/c2authorize/")
#r = Rower.objects.get(user=request.user)
#if (r.c2token == '') or (r.c2token is None):
#s = "Token doesn't exist. Need to authorize"
#return HttpResponseRedirect("/rowers/me/c2authorize/")
#elif (timezone.now()>r.tokenexpirydate):
#s = "Token expired. Needs to refresh."
#res = c2stuff.rower_c2_token_refresh(request.user)
res = c2stuff.get_c2_workout_list(request.user) res = c2stuff.get_c2_workout_list(request.user)
if (res.status_code != 200): if (res.status_code != 200):
@@ -3621,6 +3625,11 @@ def workout_getsporttracksworkout_view(request,sporttracksid):
@login_required() @login_required()
def workout_getc2workout_view(request,c2id): def workout_getc2workout_view(request,c2id):
try:
thetoken = c2_open(request.user)
except C2NoTokenError:
return HttpResponseRedirect("/rowers/me/c2authorize/")
res = c2stuff.get_c2_workout(request.user,c2id) res = c2stuff.get_c2_workout(request.user,c2id)
if (res.status_code == 200): if (res.status_code == 200):
data = res.json()['data'] data = res.json()['data']
@@ -3690,6 +3699,12 @@ def workout_upload_view(request,message=""):
# new # new
fileformat = get_file_type(f2) fileformat = get_file_type(f2)
if len(fileformat)==3 and fileformat[0]=='zip':
f_to_be_deleted = f2
with zipfile.ZipFile(f2) as z:
f2 = z.extract(z.namelist()[0],path='media/')
fileformat = fileformat[2]
os.remove(f_to_be_deleted)
if fileformat == 'unknown': if fileformat == 'unknown':
message = "We couldn't recognize the file type" message = "We couldn't recognize the file type"
@@ -3917,16 +3932,6 @@ def workout_upload_view(request,message=""):
thetoken = c2_open(request.user) thetoken = c2_open(request.user)
except C2NoTokenError: except C2NoTokenError:
return HttpResponseRedirect("/rowers/me/c2authorize/") return HttpResponseRedirect("/rowers/me/c2authorize/")
#r = Rower.objects.get(user=request.user)
#if (r.c2token == '') or (r.c2token is None):
# s = "Token doesn't exist. Need to authorize"
#return HttpResponseRedirect("/rowers/me/c2authorize/")
#elif (timezone.now()>r.tokenexpirydate):
#s = "Token expired. Needs to refresh."
#res = c2stuff.rower_c2_token_refresh(request.user)
try: try:
c2userid = c2stuff.get_userid(thetoken) c2userid = c2stuff.get_userid(thetoken)
@@ -4150,9 +4155,6 @@ def workout_upload_view_debug(request,message=""):
i = GraphImage(workout=w, i = GraphImage(workout=w,
creationdatetime=timezone.now(), creationdatetime=timezone.now(),
filename=fullpathimagename) filename=fullpathimagename)
# i = GraphImage(workout=w,
# creationdatetime=datetime.datetime.now(),
# filename=fullpathimagename)
i.save() i.save()
# upload to C2 # upload to C2
@@ -4162,15 +4164,6 @@ def workout_upload_view_debug(request,message=""):
except C2NoTokenError: except C2NoTokenError:
return HttpResponseRedirect("/rowers/me/c2authorize/") return HttpResponseRedirect("/rowers/me/c2authorize/")
#r = Rower.objects.get(user=request.user)
#if (r.c2token == '') or (r.c2token is None):
# s = "Token doesn't exist. Need to authorize"
#return HttpResponseRedirect("/rowers/me/c2authorize/")
#elif (timezone.now()>r.tokenexpirydate):
#s = "Token expired. Needs to refresh."
#res = c2stuff.rower_c2_token_refresh(request.user)
try: try:
response = c2stuff.workout_c2_upload(request.user,w) response = c2stuff.workout_c2_upload(request.user,w)
if (response.status_code != 201): if (response.status_code != 201):

View File

@@ -48,7 +48,7 @@ def format_time(x,pos=None):
def validate_file_extension(value): def validate_file_extension(value):
import os import os
ext = os.path.splitext(value.name)[1] ext = os.path.splitext(value.name)[1]
valid_extensions = ['.tcx','.csv','.TCX','.CSV','.fit','.FIT'] valid_extensions = ['.tcx','.csv','.TCX','.CSV','.fit','.FIT','.zip','.ZIP']
if not ext in valid_extensions: if not ext in valid_extensions:
raise ValidationError(u'File not supported!') raise ValidationError(u'File not supported!')