making workout shells from summaries
This commit is contained in:
@@ -109,3 +109,53 @@ def get_garmin_workout_list(user):
|
|||||||
result = garmin.get(url)
|
result = garmin.get(url)
|
||||||
|
|
||||||
return result
|
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({
|
stmapping = collections.OrderedDict({
|
||||||
'water':'Rowing',
|
'water':'Rowing',
|
||||||
'rower':'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}
|
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 = (
|
otwtypes = (
|
||||||
'water',
|
'water',
|
||||||
'coastal',
|
'coastal',
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ from __future__ import division
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from .statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
@@ -12,7 +14,7 @@ import rowers
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@override_settings(TESTING=True)
|
@override_settings(TESTING=True)
|
||||||
class GarminObjects(DjangoTestCase):
|
class GarminObjects(TransactionTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
@@ -43,6 +45,9 @@ class GarminObjects(DjangoTestCase):
|
|||||||
response = self.c.get('/rowers/workout/'+encoded1+'/', follow=True)
|
response = self.c.get('/rowers/workout/'+encoded1+'/', follow=True)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
ws = Workout.objects.filter(user=self.r)
|
||||||
|
self.assertEqual(ws.count(),3)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@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,35 +1016,13 @@ def garmin_summaries_view(request):
|
|||||||
# POST request
|
# POST request
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
activities = data['activities']
|
activities = data['activities']
|
||||||
|
result = garmin_stuff.garmin_workouts_from_summaries(activities)
|
||||||
|
|
||||||
for activity in activities:
|
if result:
|
||||||
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']
|
|
||||||
|
|
||||||
except Rower.DoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
|
|
||||||
|
return HttpResponse(status=400)
|
||||||
|
|
||||||
|
|
||||||
# The page where you select which RunKeeper workout to import
|
# The page where you select which RunKeeper workout to import
|
||||||
@login_required()
|
@login_required()
|
||||||
|
|||||||
Reference in New Issue
Block a user