Private
Public Access
1
0

opening analysis for rowers themselves

This commit is contained in:
2024-12-14 15:53:35 +01:00
parent 8724011f8c
commit 915e562a76
4 changed files with 59 additions and 43 deletions

View File

@@ -208,7 +208,8 @@ class StravaPrivacy(TestCase):
# throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set # throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set
workouts = set([w for w in workouts if w not in [ workouts = set([w for w in workouts if w not in [
'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport']]) 'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport',
'intervalsimport']])
self.assertEqual(len(workouts),5) self.assertEqual(len(workouts),5)
@@ -230,7 +231,8 @@ class StravaPrivacy(TestCase):
# throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set # throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set
workouts = set([w for w in workouts if w not in [ workouts = set([w for w in workouts if w not in [
'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport']]) 'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport',
'intervalsimport']])
self.assertEqual(len(workouts),2) self.assertEqual(len(workouts),2)
@@ -251,7 +253,8 @@ class StravaPrivacy(TestCase):
# throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set # throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set
workouts = set([w for w in workouts if w not in [ workouts = set([w for w in workouts if w not in [
'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport']]) 'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport',
'intervalsimport']])
self.assertEqual(len(workouts),2) self.assertEqual(len(workouts),2)
@@ -272,7 +275,8 @@ class StravaPrivacy(TestCase):
# throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set # throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set
workouts = set([w for w in workouts if w not in [ workouts = set([w for w in workouts if w not in [
'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport']]) 'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport',
'intervalsimport']])
self.assertEqual(len(workouts),2) self.assertEqual(len(workouts),2)
@@ -293,7 +297,8 @@ class StravaPrivacy(TestCase):
# throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set # throw out "c2import", "nkimport", "stravaimport", "concept2import", "sporttracksimport" from the set
workouts = set([w for w in workouts if w not in [ workouts = set([w for w in workouts if w not in [
'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport']]) 'upload', 'addmanual', 'c2import', 'polarimport', 'rp3import', 'nkimport', 'stravaimport', 'concept2import', 'sporttracksimport',
'intervalsimport']])
self.assertEqual(len(workouts),2) self.assertEqual(len(workouts),2)
@@ -447,7 +452,8 @@ class StravaPrivacy(TestCase):
# print all lines of response.content that contain '<label for="id_workouts_' # print all lines of response.content that contain '<label for="id_workouts_'
#print([line for line in response.content.decode('utf-8').split('\n') if '<label for="id_workouts_' in line]) #print([line for line in response.content.decode('utf-8').split('\n') if '<label for="id_workouts_' in line])
#print(form_data['workouts']) #print(form_data['workouts'])
self.assertEqual(response.content.count(b'<label for="id_workouts_'),2) #self.assertEqual(response.content.count(b'<label for="id_workouts_'),2) <-- if we forbid the user to use strava workouts
self.assertEqual(response.content.count(b'<label for="id_workouts_'),5)
# get data from histodata function # get data from histodata function
ws = Workout.objects.filter(user=self.r) ws = Workout.objects.filter(user=self.r)
@@ -460,7 +466,8 @@ class StravaPrivacy(TestCase):
self.assertTrue(data.startswith('data = [')) self.assertTrue(data.startswith('data = ['))
self.assertTrue(data.endswith(']')) self.assertTrue(data.endswith(']'))
# count the number of commas between the brackets # count the number of commas between the brackets
self.assertEqual(data.count(','),2062) #self.assertEqual(data.count(','),2062) <-- if we forbid the user to use strava workouts
self.assertEqual(data.count(','),5155)
class OwnApi(TestCase): class OwnApi(TestCase):

Binary file not shown.

View File

@@ -156,6 +156,8 @@ def do_sync(w, options, quick=False):
do_icu_export = False do_icu_export = False
if w.user.intervals_auto_export is True: if w.user.intervals_auto_export is True:
do_icu_export = True do_icu_export = True
if w.workoutsource == 'strava':
do_icu_export = False
else: else:
try: try:
do_icu_export = options['upload_to_Intervals'] do_icu_export = options['upload_to_Intervals']
@@ -208,6 +210,8 @@ def do_sync(w, options, quick=False):
do_c2_export = False do_c2_export = False
if w.user.c2_auto_export is True: if w.user.c2_auto_export is True:
do_c2_export = True do_c2_export = True
if w.workoutsource == 'strava':
do_c2_export = False
else: else:
try: try:
do_c2_export = options['upload_to_C2'] or do_c2_export do_c2_export = options['upload_to_C2'] or do_c2_export
@@ -282,6 +286,8 @@ def do_sync(w, options, quick=False):
try: # pragma: no cover try: # pragma: no cover
upload_to_st = options['upload_to_SportTracks'] or do_st_export upload_to_st = options['upload_to_SportTracks'] or do_st_export
do_st_export = upload_to_st do_st_export = upload_to_st
if w.workoutsource == 'strava':
do_st_export = False
except KeyError: except KeyError:
upload_to_st = False upload_to_st = False
@@ -304,6 +310,8 @@ def do_sync(w, options, quick=False):
do_tp_export = w.user.trainingpeaks_auto_export do_tp_export = w.user.trainingpeaks_auto_export
try: try:
upload_to_tp = options['upload_to_TrainingPeaks'] or do_tp_export upload_to_tp = options['upload_to_TrainingPeaks'] or do_tp_export
if w.workoutsource == 'strava':
do_tp_export = False
do_tp_export = upload_to_tp do_tp_export = upload_to_tp
except KeyError: except KeyError:
upload_to_st = False upload_to_st = False

View File

@@ -48,9 +48,9 @@ def analysis_new(request,
firstworkout = get_workout(id) firstworkout = get_workout(id)
if not is_workout_team(request.user, firstworkout): # pragma: no cover if not is_workout_team(request.user, firstworkout): # pragma: no cover
raise PermissionDenied("You are not allowed to use this workout") raise PermissionDenied("You are not allowed to use this workout")
if workout_is_strava(firstworkout): #if workout_is_strava(firstworkout):
messages.error(request, "You cannot use Strava workouts for analysis") # messages.error(request, "You cannot use Strava workouts for analysis")
raise PermissionDenied("You cannot use Strava workouts for analysis") # raise PermissionDenied("You cannot use Strava workouts for analysis")
firstworkoutquery = Workout.objects.filter(id=encoder.decode_hex(id)) firstworkoutquery = Workout.objects.filter(id=encoder.decode_hex(id))
try: try:
@@ -202,14 +202,14 @@ def analysis_new(request,
startdatetime__lte=enddate, startdatetime__lte=enddate,
workouttype__in=modalities, workouttype__in=modalities,
rankingpiece__in=rankingtypes, rankingpiece__in=rankingtypes,
).exclude(workoutsource='strava') )#.exclude(workoutsource='strava')
elif theteam is not None and theteam.viewing == 'coachonly': # pragma: no cover elif theteam is not None and theteam.viewing == 'coachonly': # pragma: no cover
workouts = Workout.objects.filter(team=theteam, user=r, workouts = Workout.objects.filter(team=theteam, user=r,
startdatetime__gte=startdate, startdatetime__gte=startdate,
startdatetime__lte=enddate, startdatetime__lte=enddate,
workouttype__in=modalities, workouttype__in=modalities,
rankingpiece__in=rankingtypes, rankingpiece__in=rankingtypes,
).exclude(workoutsource='strava') )#.exclude(workoutsource='strava')
elif thesession is not None: elif thesession is not None:
workouts = get_workouts_session(r, thesession) workouts = get_workouts_session(r, thesession)
else: else:
@@ -257,7 +257,7 @@ def analysis_new(request,
else: else:
selectedworkouts = Workout.objects.filter(id__in=ids) selectedworkouts = Workout.objects.filter(id__in=ids)
form.fields["workouts"].queryset = (workouts | selectedworkouts).exclude(workoutsource='strava') form.fields["workouts"].queryset = (workouts | selectedworkouts)#.exclude(workoutsource='strava')
optionsform = AnalysisOptionsForm(initial={ optionsform = AnalysisOptionsForm(initial={
'modality': modality, 'modality': modality,
@@ -367,10 +367,10 @@ def trendflexdata(workouts, options, userid=0):
savedata = options.get('savedata',False) savedata = options.get('savedata',False)
try: #try:
workouts = workouts.exclude(workoutsource='strava') # workouts = workouts.exclude(workoutsource='strava')
except AttributeError: # pragma: no cover #except AttributeError: # pragma: no cover
workouts = [w for w in workouts if w.workoutsource != 'strava'] # workouts = [w for w in workouts if w.workoutsource != 'strava']
fieldlist, fielddict = dataprep.getstatsfields() fieldlist, fielddict = dataprep.getstatsfields()
fieldlist = [xparam, yparam, groupby, fieldlist = [xparam, yparam, groupby,
@@ -574,10 +574,10 @@ def flexalldata(workouts, options):
trendline = options['trendline'] trendline = options['trendline']
promember = True promember = True
try: #try:
workouts = workouts.exclude(workoutsource='strava') # workouts = workouts.exclude(workoutsource='strava')
except AttributeError: # pragma: no cover #except AttributeError: # pragma: no cover
workouts = [w for w in workouts if w.workoutsource != 'strava'] # workouts = [w for w in workouts if w.workoutsource != 'strava']
workstrokesonly = not includereststrokes workstrokesonly = not includereststrokes
@@ -625,10 +625,10 @@ def histodata(workouts, options):
workmax = options['workmax'] workmax = options['workmax']
userid = options['userid'] userid = options['userid']
try: #try:
workouts = workouts.exclude(workoutsource='strava') # workouts = workouts.exclude(workoutsource='strava')
except AttributeError: # pragma: no cover #except AttributeError: # pragma: no cover
workouts = [w for w in workouts if w.workoutsource != 'strava'] # workouts = [w for w in workouts if w.workoutsource != 'strava']
if userid == 0: # pragma: no cover if userid == 0: # pragma: no cover
@@ -818,10 +818,10 @@ def cpdata(workouts, options):
def statsdata(workouts, options): def statsdata(workouts, options):
try: #try:
workouts = workouts.exclude(workoutsource='strava') # workouts = workouts.exclude(workoutsource='strava')
except AttributeError: # pragma: no cover #except AttributeError: # pragma: no cover
workouts = [w for w in workouts if w.workoutsource != 'strava'] # workouts = [w for w in workouts if w.workoutsource != 'strava']
includereststrokes = options['includereststrokes'] includereststrokes = options['includereststrokes']
ids = options['ids'] ids = options['ids']
@@ -897,10 +897,10 @@ def statsdata(workouts, options):
def comparisondata(workouts, options): def comparisondata(workouts, options):
try: #try:
workouts = workouts.exclude(workoutsource='strava') # workouts = workouts.exclude(workoutsource='strava')
except AttributeError: # pragma: no cover #except AttributeError: # pragma: no cover
workouts = [w for w in workouts if w.workoutsource != 'strava'] # workouts = [w for w in workouts if w.workoutsource != 'strava']
includereststrokes = options['includereststrokes'] includereststrokes = options['includereststrokes']
xparam = options['xaxis'] xparam = options['xaxis']
@@ -945,10 +945,10 @@ def comparisondata(workouts, options):
def boxplotdata(workouts, options): def boxplotdata(workouts, options):
try: #try:
workouts = workouts.exclude(workoutsource='strava') # workouts = workouts.exclude(workoutsource='strava')
except AttributeError: #except AttributeError:
workouts = [w for w in workouts if w.workoutsource != 'strava'] # workouts = [w for w in workouts if w.workoutsource != 'strava']
includereststrokes = options['includereststrokes'] includereststrokes = options['includereststrokes']
spmmin = options['spmmin'] spmmin = options['spmmin']
@@ -1055,8 +1055,9 @@ def analysis_view_data(request, userid=0):
for id in ids: for id in ids:
try: try:
w = Workout.objects.get(id=id) w = Workout.objects.get(id=id)
if w.workoutsource != 'strava': #if w.workoutsource != 'strava':
workouts.append(w) # workouts.append(w)
workouts.append(w)
except Workout.DoesNotExist: # pragma: no cover except Workout.DoesNotExist: # pragma: no cover
pass pass
@@ -1106,7 +1107,7 @@ def create_marker_workouts_view(request, userid=0,
workouts = Workout.objects.filter(user=theuser.rower, date__gte=startdate, workouts = Workout.objects.filter(user=theuser.rower, date__gte=startdate,
date__lte=enddate, date__lte=enddate,
workouttype__in=mytypes.rowtypes, workouttype__in=mytypes.rowtypes,
duplicate=False).order_by('date').exclude(workoutsource='strava') duplicate=False).order_by('date')#.exclude(workoutsource='strava')
for workout in workouts: for workout in workouts:
_ = dataprep.check_marker(workout) _ = dataprep.check_marker(workout)
@@ -1150,7 +1151,7 @@ def goldmedalscores_view(request, userid=0,
theuser, startdate=startdate, enddate=enddate, theuser, startdate=startdate, enddate=enddate,
) )
bestworkouts = Workout.objects.filter(id__in=ids).order_by('-date').exclude(workoutsource='strava') bestworkouts = Workout.objects.filter(id__in=ids).order_by('-date')#.exclude(workoutsource='strava')
breadcrumbs = [ breadcrumbs = [
{ {
@@ -1348,7 +1349,7 @@ def performancemanager_view(request, userid=0, mode='rower',
user = therower, date__gte=startdate-datetime.timedelta(days=90), user = therower, date__gte=startdate-datetime.timedelta(days=90),
date__lte=enddate, date__lte=enddate,
duplicate=False, duplicate=False,
rankingpiece=True, workouttype__in=mytypes.rowtypes).order_by('date').exclude(workoutsource='strava') rankingpiece=True, workouttype__in=mytypes.rowtypes).order_by('date')#.exclude(workoutsource='strava')
ids = [w.id for w in markerworkouts] ids = [w.id for w in markerworkouts]
form = PerformanceManagerForm(initial={ form = PerformanceManagerForm(initial={
@@ -1360,7 +1361,7 @@ def performancemanager_view(request, userid=0, mode='rower',
ids = pd.Series(ids, dtype='int').dropna().values ids = pd.Series(ids, dtype='int').dropna().values
bestworkouts = Workout.objects.filter(id__in=ids).order_by('-date').exclude(workoutsource='strava') bestworkouts = Workout.objects.filter(id__in=ids).order_by('-date')#.exclude(workoutsource='strava')
breadcrumbs = [ breadcrumbs = [
{ {