making workout shells from summaries
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
|
||||
2
rowers/tests/testdata/garmindetail3.txt
vendored
Normal file
2
rowers/tests/testdata/garmindetail3.txt
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user