From b235e98923812e9630ce388b70f8326de8091542 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 11 Mar 2018 19:25:41 +0100 Subject: [PATCH 1/9] typo fix --- rowers/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/views.py b/rowers/views.py index 049decfd..b1445c96 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -12068,7 +12068,7 @@ def plannedsession_create_view(request,timeperiod='thisweek',rowerid=0): try: fstartdate = arrow.get(request.session['fstartdate']).date() except KeyError: - fastartdate = timezone.now().date() + fstartdate = timezone.now().date() try: fenddate = arrow.get(request.session['fenddate']).date() except KeyError: From dc42b3fe2824893174330915fa1a1837a49ec646 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 12 Mar 2018 13:01:22 +0100 Subject: [PATCH 2/9] bug fix getmaxwattinterval --- rowers/datautils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rowers/datautils.py b/rowers/datautils.py index 8f35ea1f..4c96f0ca 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -297,7 +297,7 @@ def getmaxwattinterval(tt,ww,i): try: t_0 = tt.ix[indexmax] t_1 = tt.ix[indexmax-i] - deltas = tt.ix[indexmax-1:indexmax].diff().dropna() + deltas = tt.ix[indexmax-i:indexmax].diff().dropna() testres = 1.0e-3*deltas.max() < 30. if testres: deltat = 1.0e-3*(t_0-t_1) From 79aa8279c29ae5d03c6188ac5a7261a964f79c61 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 12 Mar 2018 13:38:41 +0100 Subject: [PATCH 3/9] removing power > 2000W from CP chart --- rowers/datautils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rowers/datautils.py b/rowers/datautils.py index 4c96f0ca..fb9fe437 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -223,6 +223,9 @@ def getcp(dfgrouped,logarr): mask = rolling_std == 0 ww.loc[mask] = 0 + mask = ww > 2000 + ww.loc[mask] = 0 + tmax = tt.max() From a76931b918784e332b10e5fc53a5282d010a528b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 12 Mar 2018 18:15:32 +0100 Subject: [PATCH 4/9] typo correction on teamcreate.html --- rowers/templates/teamcreate.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rowers/templates/teamcreate.html b/rowers/templates/teamcreate.html index 4d4e6a98..ebc4ccae 100644 --- a/rowers/templates/teamcreate.html +++ b/rowers/templates/teamcreate.html @@ -26,7 +26,8 @@ From cdbf2459ed575f549fd3fd2e50b3a043eb135877 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 13 Mar 2018 08:11:09 +0100 Subject: [PATCH 5/9] bug fixes --- rowers/dataprep.py | 6 ++++-- rowers/templates/privacypolicy.html | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 2c5e2aab..29522190 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -324,7 +324,6 @@ def clean_df_stats(datadf, workstrokesonly=True, ignorehr=True, except KeyError: pass - # protect 0 spm values from being nulled try: datadf['spm'] = datadf['spm'] + 1.0 @@ -386,6 +385,7 @@ def clean_df_stats(datadf, workstrokesonly=True, ignorehr=True, except KeyError: pass + try: mask = datadf['pace'] / 1000. > 300. datadf.loc[mask, 'pace'] = np.nan @@ -1699,7 +1699,9 @@ def getsmallrowdata_db(columns, ids=[], doclean=True, workstrokesonly=True): if doclean: data = clean_df_stats(data, ignorehr=True, workstrokesonly=workstrokesonly) - data.dropna(inplace=True,axis=0) + data.dropna(axis=1,how='all',inplace=True) + data.dropna(axis=0,how='any',inplace=True) + return data diff --git a/rowers/templates/privacypolicy.html b/rowers/templates/privacypolicy.html index 65906b84..924c63ca 100644 --- a/rowers/templates/privacypolicy.html +++ b/rowers/templates/privacypolicy.html @@ -1,7 +1,8 @@

Personal information collection

- At rowsandall.com we take your privacy very seriously. IN order to provide access + At rowsandall.com we take your privacy very seriously. + In order to provide access to the service we must collect and store some personal information about you.

From 7c3539c1c2dec9d79902f23891639fa87e2c6c5d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 14 Mar 2018 09:55:35 +0100 Subject: [PATCH 6/9] adding get email list management command --- rowers/management/commands/getemail_list.py | 56 +++++++++++++++++++++ rowers/views.py | 10 +++- 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 rowers/management/commands/getemail_list.py diff --git a/rowers/management/commands/getemail_list.py b/rowers/management/commands/getemail_list.py new file mode 100644 index 00000000..f12679a0 --- /dev/null +++ b/rowers/management/commands/getemail_list.py @@ -0,0 +1,56 @@ +#!/srv/venv/bin/python +import sys +import os +# If you find a solution that does not need the two paths, please comment! +sys.path.append('$path_to_root_of_project$') +sys.path.append('$path_to_root_of_project$/$project_name$') + +os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' + +from django.core.management.base import BaseCommand, CommandError +from django.conf import settings +from django.core.mail import send_mail, BadHeaderError,EmailMessage + +import datetime +from rowers.models import * +from rowsandall_app.settings import BASE_DIR + +import pandas as pd + +def getemails(): + rs = Rower.objects.all() + firstnames = [r.user.first_name for r in rs] + lastnames = [r.user.last_name for r in rs] + emails = [r.user.email for r in rs] + is_actives = [r.user.is_active for r in rs] + df = pd.DataFrame({ + 'first_name':firstnames, + 'last_name':lastnames, + 'email':emails, + 'is_active':is_actives + }) + + return df + + + +class Command(BaseCommand): + def handle(self, *args, **options): + email_list = getemails() + email_list.to_csv('email_list.csv') + + fullemail = 'roosendaalsander@gmail.com' + subject = "Rowsandall users list" + message = "Dear Sander,\n\n" + message += "Best Regards, the Rowsandall Team" + message += "Users list attached \n\n" + + email = EmailMessage(subject, message, + 'Rowsandall ', + [fullemail]) + + email.attach_file('email_list.csv') + + os.remove('email_list.csv') + + res = email.send() diff --git a/rowers/views.py b/rowers/views.py index b1445c96..322cca42 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4448,10 +4448,16 @@ def oterankings_view(request,theuser=0, startdate = enddate-datetime.timedelta(days=int(deltadays)) if startdatestring != "": - startdate = iso8601.parse_date(startdatestring) + try: + startdate = iso8601.parse_date(startdatestring) + except ParseError: + pass if enddatestring != "": - enddate = iso8601.parse_date(enddatestring) + try: + enddate = iso8601.parse_date(enddatestring) + except ParseError: + pass if enddate < startdate: s = enddate From 99e924caf7e68ee45661e3ad8b8df279b35bbc26 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 14 Mar 2018 10:50:30 +0100 Subject: [PATCH 7/9] better links for date range on oterankings --- rowers/.#views.py | 1 + rowers/views.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 rowers/.#views.py diff --git a/rowers/.#views.py b/rowers/.#views.py new file mode 100644 index 00000000..1ebe0eda --- /dev/null +++ b/rowers/.#views.py @@ -0,0 +1 @@ +e408191@CZ27LT9RCGN72.29296:1520959583 \ No newline at end of file diff --git a/rowers/views.py b/rowers/views.py index 322cca42..3969cd93 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4459,6 +4459,13 @@ def oterankings_view(request,theuser=0, except ParseError: pass + if 'startdate' in request.session: + startdate = iso8601.parse_date(request.session['startdate']) + + + if 'enddate' in request.session: + enddate = iso8601.parse_date(request.session['enddate']) + if enddate < startdate: s = enddate enddate = startdate @@ -4507,6 +4514,7 @@ def oterankings_view(request,theuser=0, deltaform = DeltaDaysForm() else: + print 'aap',startdate dateform = DateRangeForm(initial={ 'startdate': startdate, 'enddate': enddate, @@ -4757,6 +4765,13 @@ def oterankings_view(request,theuser=0, # del form.fields["pieceunit"] + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + request.session['startdate'] = startdatestring + request.session['enddate'] = enddatestring + + + messages.error(request,message) return render(request, 'oterankings.html', {'rankingworkouts':theworkouts, From be26c732ce79e8672bf2357716932ea622f3494f Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 14 Mar 2018 10:54:55 +0100 Subject: [PATCH 8/9] improved date processing for otwranking --- rowers/.#views.py | 1 - rowers/views.py | 34 +++++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) delete mode 100644 rowers/.#views.py diff --git a/rowers/.#views.py b/rowers/.#views.py deleted file mode 100644 index 1ebe0eda..00000000 --- a/rowers/.#views.py +++ /dev/null @@ -1 +0,0 @@ -e408191@CZ27LT9RCGN72.29296:1520959583 \ No newline at end of file diff --git a/rowers/views.py b/rowers/views.py index 3969cd93..f5f6e16d 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4194,10 +4194,23 @@ def otwrankings_view(request,theuser=0, startdate = enddate-datetime.timedelta(days=int(deltadays)) if startdatestring != "": - startdate = iso8601.parse_date(startdatestring) + try: + startdate = iso8601.parse_date(startdatestring) + except ParseError: + pass if enddatestring != "": - enddate = iso8601.parse_date(enddatestring) + try: + enddate = iso8601.parse_date(enddatestring) + except ParseError: + pass + + if 'startdate' in request.session: + startdate = iso8601.parse_date(request.session['startdate']) + + + if 'enddate' in request.session: + enddate = iso8601.parse_date(request.session['enddate']) if enddate < startdate: s = enddate @@ -4243,7 +4256,10 @@ def otwrankings_view(request,theuser=0, 'enddate': enddate, }) else: - dateform = DateRangeForm() + dateform = DateRangeForm(initial={ + 'startdate': startdate, + 'enddate': enddate, + }) deltaform = DeltaDaysForm() else: @@ -4418,6 +4434,11 @@ def otwrankings_view(request,theuser=0, del form.fields["pieceunit"] + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + request.session['startdate'] = startdatestring + request.session['enddate'] = enddatestring + messages.error(request,message) return render(request, 'otwrankings.html', {'rankingworkouts':theworkouts, @@ -4435,6 +4456,7 @@ def otwrankings_view(request,theuser=0, 'teams':get_my_teams(request.user), 'workouttype':'water', }) + # Show ranking distances including predicted paces @user_passes_test(ispromember,login_url="/",redirect_field_name=None) def oterankings_view(request,theuser=0, @@ -4510,11 +4532,13 @@ def oterankings_view(request,theuser=0, 'enddate': enddate, }) else: - dateform = DateRangeForm() + dateform = DateRangeForm(initial={ + 'startdate': startdate, + 'enddate': enddate, + }) deltaform = DeltaDaysForm() else: - print 'aap',startdate dateform = DateRangeForm(initial={ 'startdate': startdate, 'enddate': enddate, From 8b8fe6d43120068c68664b2848a09b31c06071cb Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 14 Mar 2018 11:10:00 +0100 Subject: [PATCH 9/9] removed non working line in update_records --- rowers/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/rowers/models.py b/rowers/models.py index 17c34286..c500576e 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -173,7 +173,6 @@ def update_records(url=c2url): df['Distance'] = df['Event'] df['Duration'] = 0 - print row.Duration for nr,row in df.iterrows(): if 'm' in row['Record']: df.ix[nr,'Distance'] = row['Record'][:-1]