more pep
This commit is contained in:
@@ -3282,7 +3282,8 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, defaulttim
|
|||||||
weightcategory = 'lwt'
|
weightcategory = 'lwt'
|
||||||
|
|
||||||
# Create CSV file name and save data to CSV file
|
# Create CSV file name and save data to CSV file
|
||||||
csvfilename = 'media/Import_'+str(c2id)+'.csv.gz'
|
csvfilename = 'media/{code}_{c2id}.csv'.format(
|
||||||
|
code=uuid4().hex[:16], c2id=c2id)
|
||||||
|
|
||||||
startdatetime, starttime, workoutdate, duration, starttimeunix, timezone = utils.get_startdatetime_from_c2data(
|
startdatetime, starttime, workoutdate, duration, starttimeunix, timezone = utils.get_startdatetime_from_c2data(
|
||||||
data)
|
data)
|
||||||
|
|||||||
@@ -955,7 +955,6 @@ def previousworkout(workout,user):
|
|||||||
except ValueError: # pragma: no cover
|
except ValueError: # pragma: no cover
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
if ws:
|
if ws:
|
||||||
return encoder.encode_hex(ws[0].id)
|
return encoder.encode_hex(ws[0].id)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from rowers.views.statements import *
|
|||||||
|
|
||||||
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
||||||
def workout_tcxemail_view(request, id=0):
|
def workout_tcxemail_view(request, id=0):
|
||||||
r = getrower(request.user)
|
|
||||||
w = get_workout(id)
|
w = get_workout(id)
|
||||||
|
|
||||||
row = rdata(csvfile=w.csvfilename)
|
row = rdata(csvfile=w.csvfilename)
|
||||||
@@ -125,7 +124,7 @@ def plannedsessions_coach_icsemail_view(request, userid=0):
|
|||||||
with open(fname2, 'wb') as fop:
|
with open(fname2, 'wb') as fop:
|
||||||
fop.write(icalstring)
|
fop.write(icalstring)
|
||||||
|
|
||||||
job = myqueue(queue, handle_sendemail_ical,
|
_ = myqueue(queue, handle_sendemail_ical,
|
||||||
rower.user.first_name,
|
rower.user.first_name,
|
||||||
rower.user.last_name,
|
rower.user.last_name,
|
||||||
rower.user.email,
|
rower.user.email,
|
||||||
@@ -165,7 +164,6 @@ def course_kmldownload_view(request, id=0):
|
|||||||
# Export workout to GPX and send to user's email address
|
# Export workout to GPX and send to user's email address
|
||||||
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
||||||
def workout_gpxemail_view(request, id=0):
|
def workout_gpxemail_view(request, id=0):
|
||||||
r = getrower(request.user)
|
|
||||||
w = get_workout(id)
|
w = get_workout(id)
|
||||||
|
|
||||||
row = rdata(csvfile=w.csvfilename)
|
row = rdata(csvfile=w.csvfilename)
|
||||||
@@ -211,7 +209,7 @@ def workouts_summaries_email_view(request):
|
|||||||
df = dataprep.workout_summary_to_df(
|
df = dataprep.workout_summary_to_df(
|
||||||
r, startdate=startdate, enddate=enddate)
|
r, startdate=startdate, enddate=enddate)
|
||||||
df.to_csv(filename, encoding='utf-8')
|
df.to_csv(filename, encoding='utf-8')
|
||||||
res = myqueue(queuehigh, handle_sendemailsummary,
|
_ = myqueue(queuehigh, handle_sendemailsummary,
|
||||||
r.user.first_name,
|
r.user.first_name,
|
||||||
r.user.last_name,
|
r.user.last_name,
|
||||||
r.user.email,
|
r.user.email,
|
||||||
@@ -232,8 +230,6 @@ def workouts_summaries_email_view(request):
|
|||||||
# Get Workout CSV file and send it to user's email address
|
# Get Workout CSV file and send it to user's email address
|
||||||
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
||||||
def workout_csvemail_view(request, id=0):
|
def workout_csvemail_view(request, id=0):
|
||||||
r = getrower(request.user)
|
|
||||||
|
|
||||||
w = get_workout(id)
|
w = get_workout(id)
|
||||||
|
|
||||||
rowdata = rdata(csvfile=w.csvfilename)
|
rowdata = rdata(csvfile=w.csvfilename)
|
||||||
@@ -261,12 +257,10 @@ def workout_csvemail_view(request, id=0):
|
|||||||
@login_required()
|
@login_required()
|
||||||
@permission_required('rower.is_staff', fn=get_user_by_userid, raise_exception=True)
|
@permission_required('rower.is_staff', fn=get_user_by_userid, raise_exception=True)
|
||||||
def workout_csvtoadmin_view(request, id=0): # pragma: no cover
|
def workout_csvtoadmin_view(request, id=0): # pragma: no cover
|
||||||
message = ""
|
|
||||||
r = getrower(request.user)
|
|
||||||
w = get_workout(id)
|
w = get_workout(id)
|
||||||
|
|
||||||
csvfile = w.csvfilename
|
csvfile = w.csvfilename
|
||||||
res = myqueue(queuehigh,
|
_ = myqueue(queuehigh,
|
||||||
handle_sendemailcsv,
|
handle_sendemailcsv,
|
||||||
'Sander',
|
'Sander',
|
||||||
'Roosendaal',
|
'Roosendaal',
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ def workout_tp_upload_view(request, id=0):
|
|||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
res = -1
|
res = -1
|
||||||
try:
|
try:
|
||||||
thetoken = tp_open(r.user)
|
_ = tp_open(r.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/tpauthorize/")
|
return HttpResponseRedirect("/rowers/me/tpauthorize/")
|
||||||
|
|
||||||
@@ -69,7 +69,6 @@ def workout_tp_upload_view(request, id=0):
|
|||||||
# abundance of error logging here because there were/are some bugs
|
# abundance of error logging here because there were/are some bugs
|
||||||
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
|
||||||
def workout_strava_upload_view(request, id=0):
|
def workout_strava_upload_view(request, id=0):
|
||||||
message = ""
|
|
||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
w = get_workout_by_opaqueid(request, id)
|
w = get_workout_by_opaqueid(request, id)
|
||||||
result = -1
|
result = -1
|
||||||
@@ -166,7 +165,7 @@ def rower_c2_authorize(request): # pragma: no cover
|
|||||||
# Generate a random string for the state parameter
|
# Generate a random string for the state parameter
|
||||||
# Save it for use later to prevent xsrf attacks
|
# Save it for use later to prevent xsrf attacks
|
||||||
|
|
||||||
state = str(uuid4())
|
# state = str(uuid4())
|
||||||
scope = "user:read,results:write"
|
scope = "user:read,results:write"
|
||||||
params = {"client_id": C2_CLIENT_ID,
|
params = {"client_id": C2_CLIENT_ID,
|
||||||
"response_type": "code",
|
"response_type": "code",
|
||||||
@@ -195,7 +194,7 @@ def rower_strava_authorize(request): # pragma: no cover
|
|||||||
# Generate a random string for the state parameter
|
# Generate a random string for the state parameter
|
||||||
# Save it for use later to prevent xsrf attacks
|
# Save it for use later to prevent xsrf attacks
|
||||||
|
|
||||||
state = str(uuid4())
|
# state = str(uuid4())
|
||||||
|
|
||||||
params = {"client_id": STRAVA_CLIENT_ID,
|
params = {"client_id": STRAVA_CLIENT_ID,
|
||||||
"response_type": "code",
|
"response_type": "code",
|
||||||
@@ -255,7 +254,7 @@ def rower_rp3_authorize(request): # pragma: no cover
|
|||||||
# Generate a random string for the state parameter
|
# Generate a random string for the state parameter
|
||||||
# Save it for use later to prevent xsrf attacks
|
# Save it for use later to prevent xsrf attacks
|
||||||
|
|
||||||
state = str(uuid4())
|
# state = str(uuid4())
|
||||||
params = {"client_id": RP3_CLIENT_KEY,
|
params = {"client_id": RP3_CLIENT_KEY,
|
||||||
"response_type": "code",
|
"response_type": "code",
|
||||||
"redirect_uri": RP3_REDIRECT_URI,
|
"redirect_uri": RP3_REDIRECT_URI,
|
||||||
@@ -273,7 +272,7 @@ def rower_tp_authorize(request): # pragma: no cover
|
|||||||
# Generate a random string for the state parameter
|
# Generate a random string for the state parameter
|
||||||
# Save it for use later to prevent xsrf attacks
|
# Save it for use later to prevent xsrf attacks
|
||||||
|
|
||||||
state = str(uuid4())
|
# state = str(uuid4())
|
||||||
params = {"client_id": TP_CLIENT_KEY,
|
params = {"client_id": TP_CLIENT_KEY,
|
||||||
"response_type": "code",
|
"response_type": "code",
|
||||||
"redirect_uri": TP_REDIRECT_URI,
|
"redirect_uri": TP_REDIRECT_URI,
|
||||||
@@ -291,7 +290,7 @@ def rower_c2_token_refresh(request):
|
|||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
res = c2stuff.do_refresh_token(r.c2refreshtoken)
|
res = c2stuff.do_refresh_token(r.c2refreshtoken)
|
||||||
|
|
||||||
if res[0] != None:
|
if res[0] is not None:
|
||||||
access_token = res[0]
|
access_token = res[0]
|
||||||
expires_in = res[1]
|
expires_in = res[1]
|
||||||
refresh_token = res[2]
|
refresh_token = res[2]
|
||||||
@@ -465,15 +464,6 @@ def rower_process_polarcallback(request):
|
|||||||
if user_id2 != user_id: # pragma: no cover
|
if user_id2 != user_id: # pragma: no cover
|
||||||
messages.error(request, 'Polar User ID error')
|
messages.error(request, 'Polar User ID error')
|
||||||
|
|
||||||
#expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
|
|
||||||
|
|
||||||
#r = getrower(request.user)
|
|
||||||
#r.polartoken = access_token
|
|
||||||
#r.polartokenexpirydate = expirydatetime
|
|
||||||
#r.polaruserid = user_id
|
|
||||||
|
|
||||||
# r.save()
|
|
||||||
|
|
||||||
if user_id2 == user_id:
|
if user_id2 == user_id:
|
||||||
successmessage = "Tokens stored. Good to go. Please check your import/export settings"
|
successmessage = "Tokens stored. Good to go. Please check your import/export settings"
|
||||||
messages.info(request, successmessage)
|
messages.info(request, successmessage)
|
||||||
@@ -565,7 +555,7 @@ def workout_getnkworkout_all(request, startdatestring='', enddatestring=''):
|
|||||||
after = str(int(after.timestamp()*1000))
|
after = str(int(after.timestamp()*1000))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
thetoken = nk_open(request.user)
|
_ = nk_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("rower_nk_authorize")
|
return HttpResponseRedirect("rower_nk_authorize")
|
||||||
|
|
||||||
@@ -601,7 +591,7 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
|
|||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
thetoken = nk_open(request.user)
|
_ = nk_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/nkauthorize/")
|
return HttpResponseRedirect("/rowers/me/nkauthorize/")
|
||||||
|
|
||||||
@@ -664,17 +654,6 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
knownnkids = uniqify(knownnkids+tombstones+parkedids)
|
knownnkids = uniqify(knownnkids+tombstones+parkedids)
|
||||||
newids = [nkid for nkid in nkids if not nkid in knownnkids]
|
|
||||||
|
|
||||||
nkdata = [{
|
|
||||||
'id': int(item['id']),
|
|
||||||
'elapsed_time':item['elapsedTime'],
|
|
||||||
'start_date':arrow.get(item['startTime']),
|
|
||||||
} for item in res.json()]
|
|
||||||
|
|
||||||
# for item in res.json():
|
|
||||||
# print(item['startTime'],arrow.get(item['startTime']),item['name'])
|
|
||||||
|
|
||||||
workouts = []
|
workouts = []
|
||||||
|
|
||||||
for item in res.json():
|
for item in res.json():
|
||||||
@@ -689,7 +668,6 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
|
|||||||
seconds=int(float(item['elapsedTime'])/1000.)))
|
seconds=int(float(item['elapsedTime'])/1000.)))
|
||||||
s = arrow.get(item['startTime'], tzinfo=r.defaulttimezone).format(
|
s = arrow.get(item['startTime'], tzinfo=r.defaulttimezone).format(
|
||||||
arrow.FORMAT_RFC850)
|
arrow.FORMAT_RFC850)
|
||||||
#s = arrow.get(item['startTime']).to(r.defaulttimezone).isoformat()
|
|
||||||
keys = ['id', 'distance', 'duration', 'starttime', 'name', 'new']
|
keys = ['id', 'distance', 'duration', 'starttime', 'name', 'new']
|
||||||
values = [i, d, ttot, s, n, nnn]
|
values = [i, d, ttot, s, n, nnn]
|
||||||
rs = dict(zip(keys, values))
|
rs = dict(zip(keys, values))
|
||||||
@@ -708,9 +686,7 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
|
|||||||
alldata[item['id']] = item
|
alldata[item['id']] = item
|
||||||
counter = 0
|
counter = 0
|
||||||
for nkid in nkids:
|
for nkid in nkids:
|
||||||
csvfilename = 'media/{code}_{nkid}.csv'.format(
|
_ = myqueue(
|
||||||
code=uuid4().hex[:16], nkid=nkid)
|
|
||||||
result = myqueue(
|
|
||||||
queue,
|
queue,
|
||||||
handle_nk_async_workout,
|
handle_nk_async_workout,
|
||||||
alldata,
|
alldata,
|
||||||
@@ -722,7 +698,9 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
|
|||||||
)
|
)
|
||||||
counter = counter+1
|
counter = counter+1
|
||||||
messages.info(
|
messages.info(
|
||||||
request, 'Your NK logbook workouts will be imported in the background. It may take a few minutes before it appears.')
|
request,
|
||||||
|
'Your NK logbook workouts will be imported in the background.'
|
||||||
|
' It may take a few minutes before it appears.')
|
||||||
url = reverse('workouts_view')
|
url = reverse('workouts_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -761,7 +739,7 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
|
|||||||
def rower_process_stravacallback(request):
|
def rower_process_stravacallback(request):
|
||||||
try:
|
try:
|
||||||
code = request.GET['code']
|
code = request.GET['code']
|
||||||
scope = request.GET['scope']
|
_ = request.GET['scope']
|
||||||
except MultiValueDictKeyError: # pragma: no cover
|
except MultiValueDictKeyError: # pragma: no cover
|
||||||
try:
|
try:
|
||||||
message = request.GET['error']
|
message = request.GET['error']
|
||||||
@@ -788,7 +766,7 @@ def rower_process_stravacallback(request):
|
|||||||
r.stravarefreshtoken = refresh_token
|
r.stravarefreshtoken = refresh_token
|
||||||
|
|
||||||
r.save()
|
r.save()
|
||||||
id = stravastuff.set_strava_athlete_id(r.user)
|
_ = stravastuff.set_strava_athlete_id(r.user)
|
||||||
|
|
||||||
successmessage = "Tokens stored. Good to go. Please check your import/export settings"
|
successmessage = "Tokens stored. Good to go. Please check your import/export settings"
|
||||||
messages.info(request, successmessage)
|
messages.info(request, successmessage)
|
||||||
@@ -911,9 +889,7 @@ def rower_process_testcallback(request): # pragma: no cover
|
|||||||
res = ownapistuff.get_token(code)
|
res = ownapistuff.get_token(code)
|
||||||
|
|
||||||
access_token = res[0]
|
access_token = res[0]
|
||||||
expires_in = res[1]
|
|
||||||
refresh_token = res[2]
|
refresh_token = res[2]
|
||||||
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
|
|
||||||
|
|
||||||
text = "Access Token:\n"
|
text = "Access Token:\n"
|
||||||
text += access_token
|
text += access_token
|
||||||
@@ -930,7 +906,7 @@ def workout_rp3import_view(request, userid=0):
|
|||||||
r = getrequestrower(request, userid=userid)
|
r = getrequestrower(request, userid=userid)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
thetoken = rp3stuff.rp3_open(request.user)
|
_ = rp3stuff.rp3_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
url = reverse('rower_rp3_authorize')
|
url = reverse('rower_rp3_authorize')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
@@ -950,17 +926,10 @@ def workout_rp3import_view(request, userid=0):
|
|||||||
|
|
||||||
workouts_list = pd.json_normalize(res.json()['data']['workouts'])
|
workouts_list = pd.json_normalize(res.json()['data']['workouts'])
|
||||||
|
|
||||||
try:
|
|
||||||
rp3ids = workouts_list['id'].values
|
|
||||||
except KeyError: # pragma: no cover
|
|
||||||
rp3ids = []
|
|
||||||
|
|
||||||
knownrp3ids = uniqify([
|
knownrp3ids = uniqify([
|
||||||
w.uploadedtorp3 for w in Workout.objects.filter(user=r)
|
w.uploadedtorp3 for w in Workout.objects.filter(user=r)
|
||||||
])
|
])
|
||||||
|
|
||||||
newids = [rp3id for rp3id in rp3ids if not rp3id in knownrp3ids]
|
|
||||||
|
|
||||||
workouts = []
|
workouts = []
|
||||||
|
|
||||||
for key, data in workouts_list.iterrows():
|
for key, data in workouts_list.iterrows():
|
||||||
@@ -1022,7 +991,7 @@ def workout_stravaimport_view(request, message="", userid=0):
|
|||||||
# if r.user != request.user:
|
# if r.user != request.user:
|
||||||
# messages.info(request,"You cannot import other people's workouts from Strava")
|
# messages.info(request,"You cannot import other people's workouts from Strava")
|
||||||
try:
|
try:
|
||||||
thetoken = strava_open(request.user)
|
_ = strava_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
|
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
|
||||||
|
|
||||||
@@ -1069,8 +1038,6 @@ def workout_stravaimport_view(request, message="", userid=0):
|
|||||||
knownstravaids = uniqify([
|
knownstravaids = uniqify([
|
||||||
w.uploadedtostrava for w in Workout.objects.filter(user=r)
|
w.uploadedtostrava for w in Workout.objects.filter(user=r)
|
||||||
])
|
])
|
||||||
newids = [
|
|
||||||
stravaid for stravaid in stravaids if not stravaid in knownstravaids]
|
|
||||||
|
|
||||||
for item in res.json():
|
for item in res.json():
|
||||||
d = int(float(item['distance']))
|
d = int(float(item['distance']))
|
||||||
@@ -1101,7 +1068,7 @@ def workout_stravaimport_view(request, message="", userid=0):
|
|||||||
for stravaid in stravaids:
|
for stravaid in stravaids:
|
||||||
csvfilename = 'media/{code}_{stravaid}.csv'.format(
|
csvfilename = 'media/{code}_{stravaid}.csv'.format(
|
||||||
code=uuid4().hex[:16], stravaid=stravaid)
|
code=uuid4().hex[:16], stravaid=stravaid)
|
||||||
result = myqueue(
|
_ = myqueue(
|
||||||
queue,
|
queue,
|
||||||
fetch_strava_workout,
|
fetch_strava_workout,
|
||||||
rower.stravatoken,
|
rower.stravatoken,
|
||||||
@@ -1111,8 +1078,9 @@ def workout_stravaimport_view(request, message="", userid=0):
|
|||||||
rower.user.id
|
rower.user.id
|
||||||
)
|
)
|
||||||
# done, redirect to workouts list
|
# done, redirect to workouts list
|
||||||
messages.info(request, 'Your Strava workouts will be imported in the background. It may take a few minutes before it appears.'.format(
|
messages.info(request,
|
||||||
stravaid=stravaid))
|
'Your Strava workouts will be imported in the background.'
|
||||||
|
' It may take a few minutes before it appears.')
|
||||||
url = reverse('workouts_view')
|
url = reverse('workouts_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
@@ -1166,15 +1134,11 @@ def strava_webhook_view(request):
|
|||||||
|
|
||||||
# POST - does nothing so far
|
# POST - does nothing so far
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
aspect_type = data['aspect_type']
|
|
||||||
object_type = data['object_type']
|
|
||||||
strava_owner = data['owner_id']
|
|
||||||
starttimeunix = data['event_time']
|
|
||||||
try:
|
try:
|
||||||
aspect_type = data['aspect_type']
|
aspect_type = data['aspect_type']
|
||||||
object_type = data['object_type']
|
object_type = data['object_type']
|
||||||
strava_owner = data['owner_id']
|
strava_owner = data['owner_id']
|
||||||
starttimeunix = data['event_time']
|
_ = data['event_time']
|
||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
|
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
|
||||||
with open('strava_webhooks.log', 'a') as f:
|
with open('strava_webhooks.log', 'a') as f:
|
||||||
@@ -1322,14 +1286,10 @@ def garmin_summaries_view(request): # pragma: no cover
|
|||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def garmin_newfiles_ping(request): # pragma: no cover
|
def garmin_newfiles_ping(request): # pragma: no cover
|
||||||
t = time.localtime()
|
|
||||||
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
|
|
||||||
|
|
||||||
if request.method != 'POST':
|
if request.method != 'POST':
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
files = data['activityFiles']
|
|
||||||
for file in data['activityFiles']:
|
for file in data['activityFiles']:
|
||||||
try:
|
try:
|
||||||
garmintoken = file['userAccessToken']
|
garmintoken = file['userAccessToken']
|
||||||
@@ -1338,8 +1298,7 @@ def garmin_newfiles_ping(request): # pragma: no cover
|
|||||||
callbackURL = file['callbackURL']
|
callbackURL = file['callbackURL']
|
||||||
starttime = file['startTimeInSeconds']
|
starttime = file['startTimeInSeconds']
|
||||||
fileType = file['fileType']
|
fileType = file['fileType']
|
||||||
job = garmin_stuff.get_garmin_file(
|
_ = garmin_stuff.get_garmin_file(r, callbackURL, starttime, fileType)
|
||||||
r, callbackURL, starttime, fileType)
|
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -1375,12 +1334,9 @@ def garmin_details_view(request):
|
|||||||
if request.method != 'POST': # pragma: no cover
|
if request.method != 'POST': # pragma: no cover
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
t = time.localtime()
|
|
||||||
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
|
|
||||||
|
|
||||||
# POST request
|
# POST request
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
result = garmin_stuff.garmin_workouts_from_details(data)
|
_ = garmin_stuff.garmin_workouts_from_details(data)
|
||||||
|
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
@@ -1477,11 +1433,9 @@ def workout_sporttracksimport_view(request, message="", userid=0):
|
|||||||
|
|
||||||
workouts = []
|
workouts = []
|
||||||
|
|
||||||
stids = [int(getidfromuri(item['uri'])) for item in res.json()['items']]
|
|
||||||
knownstids = uniqify([
|
knownstids = uniqify([
|
||||||
w.uploadedtosporttracks for w in Workout.objects.filter(user=r)
|
w.uploadedtosporttracks for w in Workout.objects.filter(user=r)
|
||||||
])
|
])
|
||||||
newids = [stid for stid in stids if not stid in knownstids]
|
|
||||||
for item in res.json()['items']:
|
for item in res.json()['items']:
|
||||||
d = int(float(item['total_distance']))
|
d = int(float(item['total_distance']))
|
||||||
i = int(getidfromuri(item['uri']))
|
i = int(getidfromuri(item['uri']))
|
||||||
@@ -1528,7 +1482,7 @@ def workout_sporttracksimport_view(request, message="", userid=0):
|
|||||||
@login_required()
|
@login_required()
|
||||||
def c2listdebug_view(request, page=1, message=""): # pragma: no cover
|
def c2listdebug_view(request, page=1, message=""): # pragma: no cover
|
||||||
try:
|
try:
|
||||||
thetoken = c2_open(request.user)
|
_ = c2_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
||||||
|
|
||||||
@@ -1573,7 +1527,7 @@ def c2listdebug_view(request, page=1, message=""): # pragma: no cover
|
|||||||
@login_required()
|
@login_required()
|
||||||
def workout_getc2workout_all(request, page=1, message=""): # pragma: no cover
|
def workout_getc2workout_all(request, page=1, message=""): # pragma: no cover
|
||||||
try:
|
try:
|
||||||
thetoken = c2_open(request.user)
|
_ = c2_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
||||||
|
|
||||||
@@ -1594,7 +1548,7 @@ def workout_getc2workout_all(request, page=1, message=""): # pragma: no cover
|
|||||||
@login_required()
|
@login_required()
|
||||||
def workout_getrp3workout_all(request): # pragma: no cover
|
def workout_getrp3workout_all(request): # pragma: no cover
|
||||||
try:
|
try:
|
||||||
thetoken = rp3_open(request.user)
|
_ = rp3_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/rp3authorize/")
|
return HttpResponseRedirect("/rowers/me/rp3authorize/")
|
||||||
|
|
||||||
@@ -1628,7 +1582,7 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
|
|||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
thetoken = c2_open(request.user)
|
_ = c2_open(request.user)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
||||||
|
|
||||||
@@ -1657,8 +1611,6 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
knownc2ids = uniqify(knownc2ids+tombstones+parkedids)
|
knownc2ids = uniqify(knownc2ids+tombstones+parkedids)
|
||||||
|
|
||||||
newids = [c2id for c2id in c2ids if not c2id in knownc2ids]
|
|
||||||
for item in res.json()['data']:
|
for item in res.json()['data']:
|
||||||
d = item['distance']
|
d = item['distance']
|
||||||
i = item['id']
|
i = item['id']
|
||||||
@@ -1688,9 +1640,7 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
|
|||||||
alldata[item['id']] = item
|
alldata[item['id']] = item
|
||||||
counter = 0
|
counter = 0
|
||||||
for c2id in c2ids:
|
for c2id in c2ids:
|
||||||
csvfilename = 'media/{code}_{c2id}.csv'.format(
|
_ = myqueue(
|
||||||
code=uuid4().hex[:16], c2id=c2id)
|
|
||||||
result = myqueue(
|
|
||||||
queue,
|
queue,
|
||||||
handle_c2_async_workout,
|
handle_c2_async_workout,
|
||||||
alldata,
|
alldata,
|
||||||
@@ -1703,7 +1653,9 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
|
|||||||
counter = counter+1
|
counter = counter+1
|
||||||
# done, redirect to workouts list
|
# done, redirect to workouts list
|
||||||
messages.info(
|
messages.info(
|
||||||
request, 'Your Concept2 workouts will be imported in the background. It may take a few minutes before it appears.'.format(c2id=c2id))
|
request,
|
||||||
|
'Your Concept2 workouts will be imported in the background.'
|
||||||
|
' It may take a few minutes before it appears.')
|
||||||
url = reverse('workouts_view')
|
url = reverse('workouts_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
@@ -1784,7 +1736,7 @@ def workout_getrp3importview(request, externalid):
|
|||||||
token = rp3stuff.rp3_open(r.user)
|
token = rp3stuff.rp3_open(r.user)
|
||||||
startdatetime = request.GET.get('startdatetime')
|
startdatetime = request.GET.get('startdatetime')
|
||||||
|
|
||||||
job = myqueue(queuehigh,
|
_ = myqueue(queuehigh,
|
||||||
handle_rp3_async_workout,
|
handle_rp3_async_workout,
|
||||||
r.user.id,
|
r.user.id,
|
||||||
token,
|
token,
|
||||||
@@ -1793,8 +1745,6 @@ def workout_getrp3importview(request, externalid):
|
|||||||
20,
|
20,
|
||||||
)
|
)
|
||||||
|
|
||||||
#id = rp3stuff.get_rp3_workout(r.user,externalid,startdatetime=startdatetime)
|
|
||||||
|
|
||||||
messages.info(request, 'The workout will be imported in the background')
|
messages.info(request, 'The workout will be imported in the background')
|
||||||
|
|
||||||
url = reverse('workout_rp3import_view')
|
url = reverse('workout_rp3import_view')
|
||||||
@@ -1844,7 +1794,7 @@ def workout_getsporttracksworkout_all(request):
|
|||||||
knownstids = uniqify([
|
knownstids = uniqify([
|
||||||
w.uploadedtosporttracks for w in Workout.objects.filter(user=r)
|
w.uploadedtosporttracks for w in Workout.objects.filter(user=r)
|
||||||
])
|
])
|
||||||
newids = [stid for stid in stids if not stid in knownstids]
|
newids = [stid for stid in stids if stid not in knownstids]
|
||||||
for sporttracksid in newids:
|
for sporttracksid in newids:
|
||||||
id = sporttracksstuff.get_workout(
|
id = sporttracksstuff.get_workout(
|
||||||
request.user, sporttracksid)
|
request.user, sporttracksid)
|
||||||
@@ -1873,21 +1823,11 @@ def workout_getstravaworkout_next(request): # pragma: no cover
|
|||||||
if (res.status_code != 200):
|
if (res.status_code != 200):
|
||||||
return 0
|
return 0
|
||||||
else:
|
else:
|
||||||
stravaids = [int(item['id']) for item in res.json()]
|
|
||||||
|
|
||||||
alldata = {}
|
alldata = {}
|
||||||
for item in res.json():
|
for item in res.json():
|
||||||
alldata[item['id']] = item
|
alldata[item['id']] = item
|
||||||
|
|
||||||
knownstravaids = uniqify([
|
_ = stravastuff.create_async_workout(
|
||||||
w.uploadedtostrava for w in Workout.objects.filter(user=r)
|
|
||||||
])
|
|
||||||
newids = [
|
|
||||||
stravaid for stravaid in stravaids if not stravaid in knownstravaids]
|
|
||||||
|
|
||||||
theid = newids[0]
|
|
||||||
|
|
||||||
workoutid = stravastuff.create_async_workout(
|
|
||||||
alldata, r.user, stravaid, debug=True)
|
alldata, r.user, stravaid, debug=True)
|
||||||
|
|
||||||
url = reverse('workouts_view')
|
url = reverse('workouts_view')
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ from rq.job import Job
|
|||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def download_fit(request, filename=''):
|
def download_fit(request, filename=''):
|
||||||
r = getrower(request.user)
|
|
||||||
|
|
||||||
pss = PlannedSession.objects.filter(fitfile=filename)
|
pss = PlannedSession.objects.filter(fitfile=filename)
|
||||||
|
|
||||||
if len(pss) != 1: # pragma: no cover
|
if len(pss) != 1: # pragma: no cover
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ from rq.registry import StartedJobRegistry
|
|||||||
from rq.exceptions import NoSuchJobError
|
from rq.exceptions import NoSuchJobError
|
||||||
import threading
|
import threading
|
||||||
import redis
|
import redis
|
||||||
import time
|
|
||||||
import colorsys
|
import colorsys
|
||||||
|
|
||||||
import zipfile
|
import zipfile
|
||||||
@@ -143,7 +142,6 @@ from rowers.models import (
|
|||||||
PlannedSession, DeactivateUserForm, DeleteUserForm,
|
PlannedSession, DeactivateUserForm, DeleteUserForm,
|
||||||
TrainingPlan, TrainingPlanForm, TrainingTarget, TrainingTargetForm,
|
TrainingPlan, TrainingPlanForm, TrainingTarget, TrainingTargetForm,
|
||||||
TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle,
|
TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle,
|
||||||
TrainingTarget, TrainingTargetForm,
|
|
||||||
TrainingMacroCycleForm, createmacrofillers,
|
TrainingMacroCycleForm, createmacrofillers,
|
||||||
createmicrofillers, createmesofillers,
|
createmicrofillers, createmesofillers,
|
||||||
microcyclecheckdates, mesocyclecheckdates, macrocyclecheckdates,
|
microcyclecheckdates, mesocyclecheckdates, macrocyclecheckdates,
|
||||||
@@ -221,7 +219,6 @@ from rowsandall_app.settings import (
|
|||||||
NK_REDIRECT_URI, NK_CLIENT_ID, NK_CLIENT_SECRET
|
NK_REDIRECT_URI, NK_CLIENT_ID, NK_CLIENT_SECRET
|
||||||
)
|
)
|
||||||
|
|
||||||
#from rowers.tasks_standalone import addcomment2
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from async_messages import messages as a_messages
|
from async_messages import messages as a_messages
|
||||||
|
|
||||||
@@ -261,7 +258,7 @@ from rowers.tasks import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from scipy.signal import savgol_filter
|
from scipy.signal import savgol_filter
|
||||||
#from django.shortcuts import render_to_response
|
|
||||||
try:
|
try:
|
||||||
from Cookie import SimpleCookie
|
from Cookie import SimpleCookie
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
@@ -505,7 +502,7 @@ def getrequestrower(request, rowerid=0, userid=0, notpermanent=False):
|
|||||||
# if userid == 0:
|
# if userid == 0:
|
||||||
# userid = request.user.id
|
# userid = request.user.id
|
||||||
|
|
||||||
if notpermanent == False:
|
if notpermanent is False:
|
||||||
if rowerid == 0 and 'rowerid' in request.session:
|
if rowerid == 0 and 'rowerid' in request.session:
|
||||||
rowerid = request.session['rowerid']
|
rowerid = request.session['rowerid']
|
||||||
|
|
||||||
@@ -537,7 +534,7 @@ def getrequestrower(request, rowerid=0, userid=0, notpermanent=False):
|
|||||||
request.session['rowerid'] = request.user.rower.id
|
request.session['rowerid'] = request.user.rower.id
|
||||||
raise PermissionDenied("You have no access to this user")
|
raise PermissionDenied("You have no access to this user")
|
||||||
|
|
||||||
if notpermanent == False:
|
if notpermanent is False:
|
||||||
request.session['rowerid'] = r.id
|
request.session['rowerid'] = r.id
|
||||||
|
|
||||||
request.session['rowerid'] = r.id
|
request.session['rowerid'] = r.id
|
||||||
@@ -551,7 +548,7 @@ def getrequestrowercoachee(request, rowerid=0, userid=0, notpermanent=False):
|
|||||||
# if userid == 0:
|
# if userid == 0:
|
||||||
# userid = request.user.id
|
# userid = request.user.id
|
||||||
|
|
||||||
if notpermanent == False:
|
if notpermanent is False:
|
||||||
if rowerid == 0 and 'rowerid' in request.session:
|
if rowerid == 0 and 'rowerid' in request.session:
|
||||||
rowerid = request.session['rowerid']
|
rowerid = request.session['rowerid']
|
||||||
|
|
||||||
@@ -583,7 +580,7 @@ def getrequestrowercoachee(request, rowerid=0, userid=0, notpermanent=False):
|
|||||||
request.session['rowerid'] = request.user.rower.id
|
request.session['rowerid'] = request.user.rower.id
|
||||||
raise PermissionDenied("You have no access to this user")
|
raise PermissionDenied("You have no access to this user")
|
||||||
|
|
||||||
if notpermanent == False:
|
if notpermanent is False:
|
||||||
request.session['rowerid'] = r.id
|
request.session['rowerid'] = r.id
|
||||||
|
|
||||||
request.session['rowerid'] = r.id
|
request.session['rowerid'] = r.id
|
||||||
@@ -595,7 +592,7 @@ def getrequestplanrower(request, rowerid=0, userid=0, notpermanent=False):
|
|||||||
userid = int(userid)
|
userid = int(userid)
|
||||||
rowerid = int(rowerid)
|
rowerid = int(rowerid)
|
||||||
|
|
||||||
if notpermanent == False:
|
if notpermanent is False:
|
||||||
if rowerid == 0 and 'rowerid' in request.session:
|
if rowerid == 0 and 'rowerid' in request.session:
|
||||||
rowerid = request.session['rowerid']
|
rowerid = request.session['rowerid']
|
||||||
|
|
||||||
@@ -625,7 +622,7 @@ def getrequestplanrower(request, rowerid=0, userid=0, notpermanent=False):
|
|||||||
request.session['rowerid'] = r.id
|
request.session['rowerid'] = r.id
|
||||||
raise PermissionDenied("You have no access to this user")
|
raise PermissionDenied("You have no access to this user")
|
||||||
|
|
||||||
if notpermanent == False:
|
if notpermanent is False:
|
||||||
request.session['rowerid'] = r.id
|
request.session['rowerid'] = r.id
|
||||||
|
|
||||||
return r
|
return r
|
||||||
@@ -671,7 +668,6 @@ def get_workoutuser(id, request):
|
|||||||
|
|
||||||
|
|
||||||
def getvalue(data): # pragma: no cover
|
def getvalue(data): # pragma: no cover
|
||||||
perc = 0
|
|
||||||
total = 1
|
total = 1
|
||||||
done = 0
|
done = 0
|
||||||
id = 0
|
id = 0
|
||||||
@@ -738,12 +734,11 @@ except ImportError: # pragma: no cover
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from rest_framework import status, permissions, generics
|
from rest_framework import permissions, generics
|
||||||
except ImportError: # pragma: no cover
|
except ImportError: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
#LOCALTIMEZONE = tz('Etc/UTC')
|
|
||||||
USER_LANGUAGE = 'en-US'
|
USER_LANGUAGE = 'en-US'
|
||||||
|
|
||||||
|
|
||||||
@@ -1043,16 +1038,6 @@ def get_thumbnails(request, id):
|
|||||||
row = get_workout_by_opaqueid(request, id)
|
row = get_workout_by_opaqueid(request, id)
|
||||||
|
|
||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
result = request.user.is_authenticated and ispromember(request.user)
|
|
||||||
if result:
|
|
||||||
promember = 1
|
|
||||||
if request.user == row.user.user:
|
|
||||||
mayedit = 1
|
|
||||||
|
|
||||||
comments = WorkoutComment.objects.filter(workout=row)
|
|
||||||
|
|
||||||
aantalcomments = len(comments)
|
|
||||||
|
|
||||||
favorites, maxfav = getfavorites(r, row)
|
favorites, maxfav = getfavorites(r, row)
|
||||||
|
|
||||||
charts = []
|
charts = []
|
||||||
@@ -1143,8 +1128,7 @@ def session_jobs_status(request):
|
|||||||
def rowhascoordinates(row):
|
def rowhascoordinates(row):
|
||||||
# create interactive plot
|
# create interactive plot
|
||||||
f1 = row.csvfilename
|
f1 = row.csvfilename
|
||||||
u = row.user.user
|
|
||||||
r = getrower(u)
|
|
||||||
rowdata = rdata(csvfile=f1)
|
rowdata = rdata(csvfile=f1)
|
||||||
hascoordinates = 1
|
hascoordinates = 1
|
||||||
if rowdata != 0:
|
if rowdata != 0:
|
||||||
@@ -1191,11 +1175,11 @@ def get_my_teams(user):
|
|||||||
teams1 = []
|
teams1 = []
|
||||||
|
|
||||||
teams2 = Team.objects.filter(manager=user)
|
teams2 = Team.objects.filter(manager=user)
|
||||||
teams = list(set(teams1).union(set(teams2)))
|
myteams = list(set(teams1).union(set(teams2)))
|
||||||
except TypeError:
|
except TypeError:
|
||||||
teams = []
|
myteams = []
|
||||||
|
|
||||||
return teams
|
return myteams
|
||||||
|
|
||||||
# Used for the interval editor - translates seconds to a time object
|
# Used for the interval editor - translates seconds to a time object
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user