From 82ad2d90db983c36a96df18dd0f7ca151c47ac2d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 22 Jun 2018 14:40:49 +0200 Subject: [PATCH] concept2 auto import --- rowers/c2stuff.py | 34 ++++++++++++++++++++-- rowers/dataprep.py | 6 +++- rowers/dataprepnodjango.py | 6 +++- rowers/management/commands/processemail.py | 7 +++++ rowers/models.py | 1 + 5 files changed, 50 insertions(+), 4 deletions(-) diff --git a/rowers/c2stuff.py b/rowers/c2stuff.py index c1df31d8..dca87e85 100644 --- a/rowers/c2stuff.py +++ b/rowers/c2stuff.py @@ -34,7 +34,7 @@ import sys import urllib from requests import Request, Session -from utils import myqueue +from utils import myqueue,uniqify,isprorower from rowers.types import otwtypes @@ -114,7 +114,37 @@ def add_stroke_data(user,c2id,workoutid,startdatetime,csvfilename): csvfilename) return 1 + +def get_c2_workouts(rower): + + if not isprorower(rower): + return 0 + try: + thetoken = c2_open(rower.user) + except C2NoTokenError: + return 0 + + res = get_c2_workout_list(rower.user,page=1) + + if (res.status_code != 200): + return 0 + else: + c2ids = [item['id'] for item in res.json()['data']] + alldata = {} + for item in res.json()['data']: + alldata[item['id']] = item + + knownc2ids = uniqify([ + w.uploadedtoc2 for w in Workout.objects.filter(user=rower) + ]) + newids = [c2id for c2id in c2ids if not c2id in knownc2ids] + + for c2id in newids: + workoutid = create_async_workout(alldata, + rower.user,c2id) + + return 1 # get workout metrics, then relay stroke data to an asynchronous task def create_async_workout(alldata,user,c2id): @@ -155,7 +185,7 @@ def create_async_workout(alldata,user,c2id): w = Workout( user=r, workouttype = workouttype, - name = 'Imported workout', + name = 'C2 Import Workout from {startdatetime}'.format(startdatetime=startdatetime), date = workoutdate, starttime = starttime, startdatetime = startdatetime, diff --git a/rowers/dataprep.py b/rowers/dataprep.py index c98edd6c..ddcb0b05 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1999,7 +1999,11 @@ def dataprep(rowdatadf, id=0, bands=True, barchart=True, otwpower=True, rowdatadf.loc[row_index, ' Stroke500mPace (sec/500m)'] = 3000. p = rowdatadf.ix[:, ' Stroke500mPace (sec/500m)'] - velo = rowdatadf.ix[:,' AverageBoatSpeed (m/s)'] + try: + velo = rowdatadf.ix[:,' AverageBoatSpeed (m/s)'] + except KeyError: + velo = 500./p + hr = rowdatadf.ix[:, ' HRCur (bpm)'] spm = rowdatadf.ix[:, ' Cadence (stokes/min)'] cumdist = rowdatadf.ix[:, 'cum_dist'] diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index 2e2b523e..3828afdb 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -978,7 +978,11 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, rowdatadf.loc[row_index,' Stroke500mPace (sec/500m)'] = 3000. p = rowdatadf.ix[:,' Stroke500mPace (sec/500m)'] - velo = rowdatadf.ix[:,' AverageBoatSpeed (m/s)'] + try: + velo = rowdatadf.ix[:,' AverageBoatSpeed (m/s)'] + except KeyError: + velo = 500./p + hr = rowdatadf.ix[:,' HRCur (bpm)'] spm = rowdatadf.ix[:,' Cadence (stokes/min)'] cumdist = rowdatadf.ix[:,'cum_dist'] diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py index c8c3f2f9..e8f7f8d8 100644 --- a/rowers/management/commands/processemail.py +++ b/rowers/management/commands/processemail.py @@ -21,6 +21,7 @@ from rowingdata import rowingdata as rrdata import rowers.uploads as uploads from rowers.mailprocessing import make_new_workout_from_email, send_confirm import rowers.polarstuff as polarstuff +import rowers.c2stuff as c2stuff workoutmailbox = Mailbox.objects.get(name='workouts') failedmailbox = Mailbox.objects.get(name='Failed') @@ -148,8 +149,14 @@ class Command(BaseCommand): """Run the Email processing command """ def handle(self, *args, **options): + # Polar polar_available = polarstuff.get_polar_notifications() res = polarstuff.get_all_new_workouts(polar_available) + + # Concept2 + rowers = Rower.objects.filter(c2_auto_import=True) + for r in rowers: + c2stuff.get_c2_workouts(r) messages = Message.objects.filter(mailbox_id = workoutmailbox.id) message_ids = [m.id for m in messages] diff --git a/rowers/models.py b/rowers/models.py index 9cd7fc0f..b237088a 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2021,6 +2021,7 @@ class RowerImportExportForm(ModelForm): fields = [ 'polar_auto_import', 'c2_auto_export', + 'c2_auto_import', 'mapmyfitness_auto_export', 'runkeeper_auto_export', 'sporttracks_auto_export',