Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2022-02-16 11:13:14 +01:00
parent 2fb011e876
commit 4f48901c55
7 changed files with 76 additions and 160 deletions

View File

@@ -3282,8 +3282,9 @@ def handle_c2_async_workout(alldata, userid, c2token, c2id, delaysec, defaulttim
weightcategory = 'lwt'
# 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(
data)

View File

@@ -955,7 +955,6 @@ def previousworkout(workout,user):
except ValueError: # pragma: no cover
return 0
if ws:
return encoder.encode_hex(ws[0].id)
else:

View File

@@ -5,7 +5,6 @@ from rowers.views.statements import *
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
def workout_tcxemail_view(request, id=0):
r = getrower(request.user)
w = get_workout(id)
row = rdata(csvfile=w.csvfilename)
@@ -125,12 +124,12 @@ def plannedsessions_coach_icsemail_view(request, userid=0):
with open(fname2, 'wb') as fop:
fop.write(icalstring)
job = myqueue(queue, handle_sendemail_ical,
rower.user.first_name,
rower.user.last_name,
rower.user.email,
url,
fname2, debug=False)
_ = myqueue(queue, handle_sendemail_ical,
rower.user.first_name,
rower.user.last_name,
rower.user.email,
url,
fname2, debug=False)
return HttpResponseRedirect(url)
@@ -165,7 +164,6 @@ def course_kmldownload_view(request, id=0):
# Export workout to GPX and send to user's email address
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
def workout_gpxemail_view(request, id=0):
r = getrower(request.user)
w = get_workout(id)
row = rdata(csvfile=w.csvfilename)
@@ -211,13 +209,13 @@ def workouts_summaries_email_view(request):
df = dataprep.workout_summary_to_df(
r, startdate=startdate, enddate=enddate)
df.to_csv(filename, encoding='utf-8')
res = myqueue(queuehigh, handle_sendemailsummary,
r.user.first_name,
r.user.last_name,
r.user.email,
filename,
emailbounced=r.emailbounced
)
_ = myqueue(queuehigh, handle_sendemailsummary,
r.user.first_name,
r.user.last_name,
r.user.email,
filename,
emailbounced=r.emailbounced
)
messages.info(
request, 'The summary CSV file was sent to you per email')
else:
@@ -232,8 +230,6 @@ def workouts_summaries_email_view(request):
# 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)
def workout_csvemail_view(request, id=0):
r = getrower(request.user)
w = get_workout(id)
rowdata = rdata(csvfile=w.csvfilename)
@@ -261,17 +257,15 @@ def workout_csvemail_view(request, id=0):
@login_required()
@permission_required('rower.is_staff', fn=get_user_by_userid, raise_exception=True)
def workout_csvtoadmin_view(request, id=0): # pragma: no cover
message = ""
r = getrower(request.user)
w = get_workout(id)
csvfile = w.csvfilename
res = myqueue(queuehigh,
handle_sendemailcsv,
'Sander',
'Roosendaal',
'roosendaalsander@gmail.com',
csvfile)
_ = myqueue(queuehigh,
handle_sendemailcsv,
'Sander',
'Roosendaal',
'roosendaalsander@gmail.com',
csvfile)
successmessage = "The CSV file was sent to the site admin per email"
messages.info(request, successmessage)

View File

@@ -21,7 +21,7 @@ def workout_tp_upload_view(request, id=0):
r = getrower(request.user)
res = -1
try:
thetoken = tp_open(r.user)
_ = tp_open(r.user)
except NoTokenError: # pragma: no cover
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
@permission_required('workout.change_workout', fn=get_workout_by_opaqueid, raise_exception=True)
def workout_strava_upload_view(request, id=0):
message = ""
r = getrower(request.user)
w = get_workout_by_opaqueid(request, id)
result = -1
@@ -166,7 +165,7 @@ def rower_c2_authorize(request): # pragma: no cover
# Generate a random string for the state parameter
# Save it for use later to prevent xsrf attacks
state = str(uuid4())
# state = str(uuid4())
scope = "user:read,results:write"
params = {"client_id": C2_CLIENT_ID,
"response_type": "code",
@@ -195,7 +194,7 @@ def rower_strava_authorize(request): # pragma: no cover
# Generate a random string for the state parameter
# Save it for use later to prevent xsrf attacks
state = str(uuid4())
# state = str(uuid4())
params = {"client_id": STRAVA_CLIENT_ID,
"response_type": "code",
@@ -255,7 +254,7 @@ def rower_rp3_authorize(request): # pragma: no cover
# Generate a random string for the state parameter
# Save it for use later to prevent xsrf attacks
state = str(uuid4())
# state = str(uuid4())
params = {"client_id": RP3_CLIENT_KEY,
"response_type": "code",
"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
# Save it for use later to prevent xsrf attacks
state = str(uuid4())
# state = str(uuid4())
params = {"client_id": TP_CLIENT_KEY,
"response_type": "code",
"redirect_uri": TP_REDIRECT_URI,
@@ -291,7 +290,7 @@ def rower_c2_token_refresh(request):
r = getrower(request.user)
res = c2stuff.do_refresh_token(r.c2refreshtoken)
if res[0] != None:
if res[0] is not None:
access_token = res[0]
expires_in = res[1]
refresh_token = res[2]
@@ -465,15 +464,6 @@ def rower_process_polarcallback(request):
if user_id2 != user_id: # pragma: no cover
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:
successmessage = "Tokens stored. Good to go. Please check your import/export settings"
messages.info(request, successmessage)
@@ -565,7 +555,7 @@ def workout_getnkworkout_all(request, startdatestring='', enddatestring=''):
after = str(int(after.timestamp()*1000))
try:
thetoken = nk_open(request.user)
_ = nk_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("rower_nk_authorize")
@@ -601,7 +591,7 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
return HttpResponseRedirect(url)
try:
thetoken = nk_open(request.user)
_ = nk_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/nkauthorize/")
@@ -664,17 +654,6 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
pass
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 = []
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.)))
s = arrow.get(item['startTime'], tzinfo=r.defaulttimezone).format(
arrow.FORMAT_RFC850)
#s = arrow.get(item['startTime']).to(r.defaulttimezone).isoformat()
keys = ['id', 'distance', 'duration', 'starttime', 'name', 'new']
values = [i, d, ttot, s, n, nnn]
rs = dict(zip(keys, values))
@@ -708,9 +686,7 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
alldata[item['id']] = item
counter = 0
for nkid in nkids:
csvfilename = 'media/{code}_{nkid}.csv'.format(
code=uuid4().hex[:16], nkid=nkid)
result = myqueue(
_ = myqueue(
queue,
handle_nk_async_workout,
alldata,
@@ -722,7 +698,9 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
)
counter = counter+1
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')
return HttpResponseRedirect(url)
except KeyError:
@@ -761,7 +739,7 @@ def workout_nkimport_view(request, userid=0, after=0, before=0):
def rower_process_stravacallback(request):
try:
code = request.GET['code']
scope = request.GET['scope']
_ = request.GET['scope']
except MultiValueDictKeyError: # pragma: no cover
try:
message = request.GET['error']
@@ -788,7 +766,7 @@ def rower_process_stravacallback(request):
r.stravarefreshtoken = refresh_token
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"
messages.info(request, successmessage)
@@ -911,9 +889,7 @@ def rower_process_testcallback(request): # pragma: no cover
res = ownapistuff.get_token(code)
access_token = res[0]
expires_in = res[1]
refresh_token = res[2]
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
text = "Access Token:\n"
text += access_token
@@ -930,7 +906,7 @@ def workout_rp3import_view(request, userid=0):
r = getrequestrower(request, userid=userid)
try:
thetoken = rp3stuff.rp3_open(request.user)
_ = rp3stuff.rp3_open(request.user)
except NoTokenError: # pragma: no cover
url = reverse('rower_rp3_authorize')
return HttpResponseRedirect(url)
@@ -950,17 +926,10 @@ def workout_rp3import_view(request, userid=0):
workouts_list = pd.json_normalize(res.json()['data']['workouts'])
try:
rp3ids = workouts_list['id'].values
except KeyError: # pragma: no cover
rp3ids = []
knownrp3ids = uniqify([
w.uploadedtorp3 for w in Workout.objects.filter(user=r)
])
newids = [rp3id for rp3id in rp3ids if not rp3id in knownrp3ids]
workouts = []
for key, data in workouts_list.iterrows():
@@ -1022,7 +991,7 @@ def workout_stravaimport_view(request, message="", userid=0):
# if r.user != request.user:
# messages.info(request,"You cannot import other people's workouts from Strava")
try:
thetoken = strava_open(request.user)
_ = strava_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
@@ -1069,8 +1038,6 @@ def workout_stravaimport_view(request, message="", userid=0):
knownstravaids = uniqify([
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():
d = int(float(item['distance']))
@@ -1101,7 +1068,7 @@ def workout_stravaimport_view(request, message="", userid=0):
for stravaid in stravaids:
csvfilename = 'media/{code}_{stravaid}.csv'.format(
code=uuid4().hex[:16], stravaid=stravaid)
result = myqueue(
_ = myqueue(
queue,
fetch_strava_workout,
rower.stravatoken,
@@ -1111,8 +1078,9 @@ def workout_stravaimport_view(request, message="", userid=0):
rower.user.id
)
# 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(
stravaid=stravaid))
messages.info(request,
'Your Strava workouts will be imported in the background.'
' It may take a few minutes before it appears.')
url = reverse('workouts_view')
return HttpResponseRedirect(url)
except KeyError: # pragma: no cover
@@ -1166,15 +1134,11 @@ def strava_webhook_view(request):
# POST - does nothing so far
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:
aspect_type = data['aspect_type']
object_type = data['object_type']
strava_owner = data['owner_id']
starttimeunix = data['event_time']
_ = data['event_time']
except KeyError: # pragma: no cover
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
with open('strava_webhooks.log', 'a') as f:
@@ -1322,14 +1286,10 @@ def garmin_summaries_view(request): # pragma: no cover
@csrf_exempt
def garmin_newfiles_ping(request): # pragma: no cover
t = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
if request.method != 'POST':
return HttpResponse(status=200)
data = json.loads(request.body)
files = data['activityFiles']
for file in data['activityFiles']:
try:
garmintoken = file['userAccessToken']
@@ -1338,8 +1298,7 @@ def garmin_newfiles_ping(request): # pragma: no cover
callbackURL = file['callbackURL']
starttime = file['startTimeInSeconds']
fileType = file['fileType']
job = garmin_stuff.get_garmin_file(
r, callbackURL, starttime, fileType)
_ = garmin_stuff.get_garmin_file(r, callbackURL, starttime, fileType)
except Rower.DoesNotExist:
pass
except KeyError:
@@ -1375,12 +1334,9 @@ def garmin_details_view(request):
if request.method != 'POST': # pragma: no cover
return HttpResponse(status=200)
t = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
# POST request
data = json.loads(request.body)
result = garmin_stuff.garmin_workouts_from_details(data)
_ = garmin_stuff.garmin_workouts_from_details(data)
return HttpResponse(status=200)
@@ -1477,11 +1433,9 @@ def workout_sporttracksimport_view(request, message="", userid=0):
workouts = []
stids = [int(getidfromuri(item['uri'])) for item in res.json()['items']]
knownstids = uniqify([
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']:
d = int(float(item['total_distance']))
i = int(getidfromuri(item['uri']))
@@ -1528,7 +1482,7 @@ def workout_sporttracksimport_view(request, message="", userid=0):
@login_required()
def c2listdebug_view(request, page=1, message=""): # pragma: no cover
try:
thetoken = c2_open(request.user)
_ = c2_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/c2authorize/")
@@ -1573,7 +1527,7 @@ def c2listdebug_view(request, page=1, message=""): # pragma: no cover
@login_required()
def workout_getc2workout_all(request, page=1, message=""): # pragma: no cover
try:
thetoken = c2_open(request.user)
_ = c2_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/c2authorize/")
@@ -1594,7 +1548,7 @@ def workout_getc2workout_all(request, page=1, message=""): # pragma: no cover
@login_required()
def workout_getrp3workout_all(request): # pragma: no cover
try:
thetoken = rp3_open(request.user)
_ = rp3_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/rp3authorize/")
@@ -1628,7 +1582,7 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
return HttpResponseRedirect(url)
try:
thetoken = c2_open(request.user)
_ = c2_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/c2authorize/")
@@ -1657,8 +1611,6 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
pass
knownc2ids = uniqify(knownc2ids+tombstones+parkedids)
newids = [c2id for c2id in c2ids if not c2id in knownc2ids]
for item in res.json()['data']:
d = item['distance']
i = item['id']
@@ -1688,9 +1640,7 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
alldata[item['id']] = item
counter = 0
for c2id in c2ids:
csvfilename = 'media/{code}_{c2id}.csv'.format(
code=uuid4().hex[:16], c2id=c2id)
result = myqueue(
_ = myqueue(
queue,
handle_c2_async_workout,
alldata,
@@ -1703,7 +1653,9 @@ def workout_c2import_view(request, page=1, userid=0, message=""):
counter = counter+1
# done, redirect to workouts list
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')
return HttpResponseRedirect(url)
except KeyError: # pragma: no cover
@@ -1784,16 +1736,14 @@ def workout_getrp3importview(request, externalid):
token = rp3stuff.rp3_open(r.user)
startdatetime = request.GET.get('startdatetime')
job = myqueue(queuehigh,
handle_rp3_async_workout,
r.user.id,
token,
externalid,
startdatetime,
20,
)
#id = rp3stuff.get_rp3_workout(r.user,externalid,startdatetime=startdatetime)
_ = myqueue(queuehigh,
handle_rp3_async_workout,
r.user.id,
token,
externalid,
startdatetime,
20,
)
messages.info(request, 'The workout will be imported in the background')
@@ -1844,7 +1794,7 @@ def workout_getsporttracksworkout_all(request):
knownstids = uniqify([
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:
id = sporttracksstuff.get_workout(
request.user, sporttracksid)
@@ -1873,21 +1823,11 @@ def workout_getstravaworkout_next(request): # pragma: no cover
if (res.status_code != 200):
return 0
else:
stravaids = [int(item['id']) for item in res.json()]
alldata = {}
for item in res.json():
alldata[item['id']] = item
knownstravaids = uniqify([
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(
_ = stravastuff.create_async_workout(
alldata, r.user, stravaid, debug=True)
url = reverse('workouts_view')

View File

@@ -8,8 +8,6 @@ from rq.job import Job
@login_required()
def download_fit(request, filename=''):
r = getrower(request.user)
pss = PlannedSession.objects.filter(fitfile=filename)
if len(pss) != 1: # pragma: no cover

View File

@@ -32,7 +32,6 @@ from rq.registry import StartedJobRegistry
from rq.exceptions import NoSuchJobError
import threading
import redis
import time
import colorsys
import zipfile
@@ -143,7 +142,6 @@ from rowers.models import (
PlannedSession, DeactivateUserForm, DeleteUserForm,
TrainingPlan, TrainingPlanForm, TrainingTarget, TrainingTargetForm,
TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle,
TrainingTarget, TrainingTargetForm,
TrainingMacroCycleForm, createmacrofillers,
createmicrofillers, createmesofillers,
microcyclecheckdates, mesocyclecheckdates, macrocyclecheckdates,
@@ -221,7 +219,6 @@ from rowsandall_app.settings import (
NK_REDIRECT_URI, NK_CLIENT_ID, NK_CLIENT_SECRET
)
#from rowers.tasks_standalone import addcomment2
from django.contrib import messages
from async_messages import messages as a_messages
@@ -261,7 +258,7 @@ from rowers.tasks import (
)
from scipy.signal import savgol_filter
#from django.shortcuts import render_to_response
try:
from Cookie import SimpleCookie
except ModuleNotFoundError:
@@ -505,7 +502,7 @@ def getrequestrower(request, rowerid=0, userid=0, notpermanent=False):
# if userid == 0:
# userid = request.user.id
if notpermanent == False:
if notpermanent is False:
if rowerid == 0 and 'rowerid' in request.session:
rowerid = request.session['rowerid']
@@ -537,7 +534,7 @@ def getrequestrower(request, rowerid=0, userid=0, notpermanent=False):
request.session['rowerid'] = request.user.rower.id
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
@@ -551,7 +548,7 @@ def getrequestrowercoachee(request, rowerid=0, userid=0, notpermanent=False):
# if userid == 0:
# userid = request.user.id
if notpermanent == False:
if notpermanent is False:
if rowerid == 0 and 'rowerid' in request.session:
rowerid = request.session['rowerid']
@@ -583,7 +580,7 @@ def getrequestrowercoachee(request, rowerid=0, userid=0, notpermanent=False):
request.session['rowerid'] = request.user.rower.id
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
@@ -595,7 +592,7 @@ def getrequestplanrower(request, rowerid=0, userid=0, notpermanent=False):
userid = int(userid)
rowerid = int(rowerid)
if notpermanent == False:
if notpermanent is False:
if rowerid == 0 and 'rowerid' in request.session:
rowerid = request.session['rowerid']
@@ -625,7 +622,7 @@ def getrequestplanrower(request, rowerid=0, userid=0, notpermanent=False):
request.session['rowerid'] = r.id
raise PermissionDenied("You have no access to this user")
if notpermanent == False:
if notpermanent is False:
request.session['rowerid'] = r.id
return r
@@ -671,7 +668,6 @@ def get_workoutuser(id, request):
def getvalue(data): # pragma: no cover
perc = 0
total = 1
done = 0
id = 0
@@ -738,12 +734,11 @@ except ImportError: # pragma: no cover
pass
try:
from rest_framework import status, permissions, generics
from rest_framework import permissions, generics
except ImportError: # pragma: no cover
pass
#LOCALTIMEZONE = tz('Etc/UTC')
USER_LANGUAGE = 'en-US'
@@ -1043,16 +1038,6 @@ def get_thumbnails(request, id):
row = get_workout_by_opaqueid(request, id)
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)
charts = []
@@ -1143,8 +1128,7 @@ def session_jobs_status(request):
def rowhascoordinates(row):
# create interactive plot
f1 = row.csvfilename
u = row.user.user
r = getrower(u)
rowdata = rdata(csvfile=f1)
hascoordinates = 1
if rowdata != 0:
@@ -1191,11 +1175,11 @@ def get_my_teams(user):
teams1 = []
teams2 = Team.objects.filter(manager=user)
teams = list(set(teams1).union(set(teams2)))
myteams = list(set(teams1).union(set(teams2)))
except TypeError:
teams = []
myteams = []
return teams
return myteams
# Used for the interval editor - translates seconds to a time object

View File

@@ -1,3 +1,3 @@
[flake8]
ignore = F405, F403, E722, E226, W504
ignore = F405, F403, E722, E226, W504, F401, W605
max-line-length = 120