Private
Public Access
1
0

making workout shells from summaries

This commit is contained in:
Sander Roosendaal
2020-07-05 14:36:25 +02:00
parent c0c73319e0
commit 2bacf0716d
5 changed files with 96 additions and 27 deletions

View File

@@ -109,3 +109,53 @@ def get_garmin_workout_list(user):
result = garmin.get(url)
return result
def garmin_workouts_from_summaries(activities):
for activity in activities:
garmintoken = activity['userAccessToken']
try:
r = Rower.objects.get(garmintoken=garmintoken)
starttime = activity['startTimeInSeconds']
startdatetime = arrow.get(starttime)
durationseconds = activity['durationInSeconds']
duration = dataprep.totaltime_sec_to_string(durationseconds)
activitytype = activity['activityType']
name = 'Imported from Garmin'
date = startdatetime.date()
try:
distance = activity['durationInMeters']
except KeyError:
distance = 0
try:
averagehr = activity['averageHeartRateInBeatsPerMinute']
maxhr = activity['maxHeartRateInBeatsPerMinute']
except KeyError:
averagehr = 0
maxhr = 0
uploadedtogarmin = activity['summaryId']
try:
w = Workout.objects.get(uploadedtogarmin=uploadedtogarmin)
except Workout.DoesNotExist:
newcsvfile='media/garmin{code}_{importid}.csv'
w = Workout(user=r,csvfilename=newcsvfile)
w.startdatetime = datetime.datetime(
year=startdatetime.year,
month=startdatetime.month,
day=startdatetime.day,
hour=startdatetime.hour,
minute=startdatetime.minute,
second=startdatetime.second,
tzinfo=startdatetime.tzinfo)
w.starttime = startdatetime.time()
w.duration = duration
try:
w.activitytype = mytypes.garminmappinginv[activitytype]
except KeyError:
w.activitytype = 'other'
w.name = name
w.date = date
w.save()
except Rower.DoesNotExist:
pass
return 1

View File

@@ -76,6 +76,38 @@ stravamapping = collections.OrderedDict({
})
garminmapping = collections.OrderedDict({
'water':'ROWING',
'rower':'INDOOR_ROWING',
'skierg':'CROSS_COUNTRY_SKIING',
'Bike':'ROAD_BIKING',
'bikeerg':'INDOOR_CYCLING',
'dynamic':'INDOOR_ROWING',
'slides':'INDOOR_ROWING',
'paddle':'PADDLING',
'snow':'CROSS_COUNTRY_SKIING',
'coastal':'ROWING',
'c-boat':'ROWING',
'churchboat':'ROWING',
'Ride':'ROAD_BIKING',
'Run':'RUNNING',
'NordicSki':'CROSS_COUNTRY_SKIING',
'Swim':'SWIMMING',
'Hike':'HIKING',
'Walk':'WALKING',
'Canoeing':'PADDLING',
'Crossfit':'FITNESS_EQUIPMENT',
'StandUpPaddling':'STAND_UP_PADDLEBOARDING',
'IceSkate':'SKATING',
'WeightTraining':'STRENGTH_TRAINING',
'InlineSkate':'INLINE_SKATING',
'Kayaking':'PADDLING',
'Workout':'OTHER',
'Yoga':'OTHER',
'other':'OTHER',
})
stmapping = collections.OrderedDict({
'water':'Rowing',
'rower':'Rowing',
@@ -244,6 +276,8 @@ rkmappinginv = {value:key for key,value in reversed(rkmapping.items()) if value
polarmappinginv = {value:key for key,value in reversed(polarmapping.items()) if value is not None}
garminmappinginv = {value:key for key, value in reversed(garminmapping.items()) if value is not None}
otwtypes = (
'water',
'coastal',

View File

@@ -3,6 +3,8 @@ from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from django.db import transaction
#from __future__ import print_function
from .statements import *
nu = datetime.datetime.now()
@@ -12,7 +14,7 @@ import rowers
@pytest.mark.django_db
@override_settings(TESTING=True)
class GarminObjects(DjangoTestCase):
class GarminObjects(TransactionTestCase):
def setUp(self):
self.c = Client()
self.u = User.objects.create_user('john',
@@ -43,6 +45,9 @@ class GarminObjects(DjangoTestCase):
response = self.c.get('/rowers/workout/'+encoded1+'/', follow=True)
self.assertEqual(response.status_code, 200)
ws = Workout.objects.filter(user=self.r)
self.assertEqual(ws.count(),3)
@pytest.mark.django_db

File diff suppressed because one or more lines are too long

View File

@@ -1016,34 +1016,12 @@ def garmin_summaries_view(request):
# POST request
data = json.loads(request.body)
activities = data['activities']
result = garmin_stuff.garmin_workouts_from_summaries(activities)
for activity in activities:
garmintoken = activity['userAccessToken']
try:
r = Rower.objects.get(garmintoken=garmintoken)
starttime = activity['startTimeInSeconds']
startdatetime = arrow.get(starttime)
durationseconds = activity['durationInSeconds']
duration = dataprep.totaltime_sec_to_string(durationseconds)
activitytype = activity['activityType']
name = 'Imported from Garmin'
date = startdatetime.date()
try:
distance = activity['durationInMeters']
except KeyError:
distance = 0
try:
averagehr = activity['averageHeartRateInBeatsPerMinute']
maxhr = activity['maxHeartRateInBeatsPerMinute']
except KeyError:
averagehr = 0
maxhr = 0
uploadedtogarmin = activity['summaryId']
if result:
return HttpResponse(status=200)
except Rower.DoesNotExist:
pass
return HttpResponse(status=200)
return HttpResponse(status=400)
# The page where you select which RunKeeper workout to import