From 9469fe6200875f64ad1a4cb166c3aed4f5418d3f Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 7 Apr 2021 11:36:38 +0200 Subject: [PATCH] impeller stuff working, need beta testers --- rowers/dataprep.py | 26 ++++++++++++++++++++------ rowers/nkimportutils.py | 12 ++++++++++++ rowers/tasks.py | 5 ++++- rowers/tests/test_imports.py | 7 +++++++ rowers/uploads.py | 13 +++++++++++++ rowers/views/workoutviews.py | 21 +++++++++++++++++++-- 6 files changed, 75 insertions(+), 9 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 55da70ec..b1e0632a 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1853,9 +1853,16 @@ parsers = { 'nklinklogbook': NKLiNKLogbookParser, } -def parsenonpainsled(fileformat,f2,summary,startdatetime=''): +def parsenonpainsled(fileformat,f2,summary,startdatetime='',empowerfirmware=None,inboard=None,oarlength=None): try: - row = parsers[fileformat](f2) + if fileformat == 'nklinklogbook' and empowerfirmware is not None: + if inboard is not None and oarlength is not None: + row = NKLiNKLogbookParser(f2,firmware=empowerfirmware,inboard=inboard,oarlength=oarlength) + print(row,'aap') + else: + row = NKLiNKLogbookParser(f2) + else: + row = parsers[fileformat](f2) if startdatetime != '': row.rowdatetime = arrow.get(startdatetime).datetime hasrecognized = True @@ -1875,6 +1882,8 @@ def parsenonpainsled(fileformat,f2,summary,startdatetime=''): summary = row.allstats() except ZeroDivisionError: summary = '' + else: + fileformat = fileformat+'v'+str(empowerfirmware) # handle FIT if (fileformat == 'fit'): @@ -1889,13 +1898,14 @@ def parsenonpainsled(fileformat,f2,summary,startdatetime=''): return row,hasrecognized,summary,fileformat -def handle_nonpainsled(f2, fileformat, summary='',startdatetime=''): +def handle_nonpainsled(f2, fileformat, summary='',startdatetime='',empowerfirmware=None): oarlength = 2.89 inboard = 0.88 hasrecognized = False impeller = False - row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary,startdatetime=startdatetime) + row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary,startdatetime=startdatetime, + empowerfirmware=empowerfirmware) # Handle c2log if (fileformat == 'c2log' or fileformat == 'rowprolog'): @@ -1909,7 +1919,7 @@ def handle_nonpainsled(f2, fileformat, summary='',startdatetime=''): f2 = f2[:-4] + 'o.csv' row2 = rrdata(df = row.df) - if 'speedcoach2' in fileformat: + if 'speedcoach2' in fileformat or 'nklinklogbook' in fileformat: # impeller consistency impellerdata, consistent, ratio = row.impellerconsistent(threshold=0.3) if impellerdata and consistent: @@ -1990,6 +2000,9 @@ def new_workout_from_file(r, f2, makeprivate=False, startdatetime='', notes='', + oarlockfirmware='', + inboard=None, + oarlength=None, uploadoptions={'boattype':'1x','workouttype':'rower'}): message = "" impeller = False @@ -2095,7 +2108,8 @@ def new_workout_from_file(r, f2, f2, fileformat, startdatetime=startdatetime, - summary=summary + summary=summary, + empowerfirmware=oarlockfirmware, ) if not f2: message = 'Something went wrong' diff --git a/rowers/nkimportutils.py b/rowers/nkimportutils.py index db98450e..fb2807e3 100644 --- a/rowers/nkimportutils.py +++ b/rowers/nkimportutils.py @@ -33,6 +33,11 @@ def add_workout_from_data(userid,nkid,data,strokedata,source='nk',splitdata=None code = uuid4().hex[:16] ) + try: + userid=int(userid) + except TypeError: + userid = userid.id + strokedata.to_csv(csvfilename, index_label='index', compression='gzip') title = data["name"] @@ -44,6 +49,7 @@ def add_workout_from_data(userid,nkid,data,strokedata,source='nk',splitdata=None oarlockSessions = data["oarlockSessions"] deviceId = data["deviceId"] # you could get the firmware version + summary = get_nk_allstats(data,strokedata) speedInput = data['speedInput'] # 0 = GPS; 1 = Impeller @@ -55,11 +61,16 @@ def add_workout_from_data(userid,nkid,data,strokedata,source='nk',splitdata=None oarLength = oarlocksession["oarLength"] # cm oarInboardLength = oarlocksession["oarInboardLength"] # cm seatNumber = oarlocksession["seatNumber"] + try: + oarlockfirmware = oarlocksession["firmwareVersion"] + except KeyError: + oarlockfirmware = '' else: boatName = '' oarLength = 289 oarInboardLength = 88 seatNumber = 1 + oarlockfirmware = '' workouttype = "water" boattype = "1x" @@ -75,6 +86,7 @@ def add_workout_from_data(userid,nkid,data,strokedata,source='nk',splitdata=None 'inboard': oarInboardLength/100., 'oarlength': oarLength/100., 'summary':summary, + 'oarlockfirmware':oarlockfirmware, } session = requests.session() diff --git a/rowers/tasks.py b/rowers/tasks.py index aa79289e..38bbba4c 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -111,7 +111,10 @@ def safetimedelta(x): siteurl = SITE_URL -from rowers.nkimportutils import get_nk_summary, get_nk_allstats, get_nk_intervalstats,getdict,strokeDataToDf +from rowers.nkimportutils import ( + get_nk_summary, get_nk_allstats, get_nk_intervalstats,getdict,strokeDataToDf, + add_workout_from_data + ) # testing task diff --git a/rowers/tests/test_imports.py b/rowers/tests/test_imports.py index 4286951c..de36cc85 100644 --- a/rowers/tests/test_imports.py +++ b/rowers/tests/test_imports.py @@ -476,6 +476,10 @@ class NKObjects(DjangoTestCase): self.assertEqual(response.status_code, 200) + w = Workout.objects.get(id=1) + #self.assertEqual(w.inboard,0.89) + #self.assertEqual(w.oarlength,2.87) + @patch('rowers.nkstuff.requests.get', side_effect=mocked_requests) @patch('rowers.nkstuff.requests.post', side_effect=mocked_requests) @patch('rowers.nkimportutils.requests.session', side_effect=mocked_session) @@ -498,6 +502,9 @@ class NKObjects(DjangoTestCase): expected_url='/rowers/workout/'+encoded1+'/edit/', status_code=302,target_status_code=200) + w = Workout.objects.get(id=1) + #self.assertTrue(w.impeller) + #@pytest.mark.django_db @override_settings(TESTING=True) diff --git a/rowers/uploads.py b/rowers/uploads.py index 23546796..eb57dbb0 100644 --- a/rowers/uploads.py +++ b/rowers/uploads.py @@ -548,6 +548,19 @@ def do_sync(w,options, quick=False): except KeyError: pass + try: + if options['inboard'] != 0 and options['inboard'] != '': + w.inboard = options['inboard'] + except KeyError: + pass + + try: + if options['oarlength'] != 0 and options['oarlength'] != '': + w.oarlength = options['oarlength'] + except KeyError: + pass + + try: if options['garminid'] != 0 and options['garminid'] != '': w.uploadedtogarmin = options['garminid'] diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index b1f1ef56..0803ac71 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -4859,8 +4859,6 @@ def workout_upload_api(request): message = {'status':'false','message':'this view cannot be accessed through GET'} return JSONResponse(status=403,data=message) - - # test if JSON try: json_data = json.loads(request.body) @@ -4939,6 +4937,22 @@ def workout_upload_api(request): except KeyError: startdatetime = '' + try: + oarlockfirmware = post_data['oarlockfirmware'] + except: + oarlockfirmware = None + + try: + inboard = post_data['inboard'] + except: + inboard = None + + try: + oarlength = post_data['oarlength'] + except: + oarlength = None + + r = None if form.is_valid(): t = form.cleaned_data['title'] @@ -5011,6 +5025,9 @@ def workout_upload_api(request): notes=notes, uploadoptions=post_data, startdatetime=startdatetime, + oarlockfirmware=oarlockfirmware, + inboard=inboard, + oarlength=oarlength, ) if id == 0: