Private
Public Access
1
0

started with garmin summaries view

This commit is contained in:
Sander Roosendaal
2020-07-04 16:34:47 +02:00
parent 81d5abb7db
commit 7ded4dcdb0
6 changed files with 185 additions and 11 deletions

View File

@@ -10,6 +10,41 @@ nu = datetime.datetime.now()
import rowers
@pytest.mark.django_db
@override_settings(TESTING=True)
class GarminObjects(DjangoTestCase):
def setUp(self):
self.c = Client()
self.u = User.objects.create_user('john',
'sander@ds.ds',
'koeinsloot')
self.u.first_name = 'John'
self.u.last_name = 'Sander'
self.u.save()
self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now()
)
self.r.garmintoken = 'dfdzf'
self.r.garminrefreshtoken = 'fsls'
self.r.save()
self.c.login(username='john',password='koeinsloot')
self.nu = datetime.datetime.now()
def test_garmin_push_summaries(self):
data = json.load(open('rowers/tests/testdata/garminsummarydata.txt','r'))
response = self.c.post('/rowers/garmin/summaries/',json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
response = self.c.get('/rowers/workout/'+encoded1+'/', follow=True)
self.assertEqual(response.status_code, 200)
@pytest.mark.django_db
@override_settings(TESTING=True)
class C2Objects(DjangoTestCase):

71
rowers/tests/testdata/garmindetail1.txt vendored Normal file
View File

@@ -0,0 +1,71 @@
[ {
"summaryId" : "14098044-detail",
"summary" : {
"durationInSeconds" : 4828,
"startTimeInSeconds" : 1593691200,
"startTimeOffsetInSeconds" : -18000,
"activityType" : "WALKING",
"averageHeartRateInBeatsPerMinute" : 90,
"averageRunCadenceInStepsPerMinute" : 38.0,
"averageSpeedInMetersPerSecond" : 0.8794985,
"averagePaceInMinutesPerKilometer" : 18.247978,
"activeKilocalories" : 233,
"distanceInMeters" : 4103.25,
"maxHeartRateInBeatsPerMinute" : 124,
"maxPaceInMinutesPerKilometer" : 3.2660666,
"maxRunCadenceInStepsPerMinute" : 120.0,
"maxSpeedInMetersPerSecond" : 4.289388,
"steps" : 1623,
"totalElevationGainInMeters" : 20.09
},
"samples" : [ {
"startTimeInSeconds" : 1593691200,
"speedMetersPerSecond" : 0.0,
"totalDistanceInMeters" : 25.0,
"timerDurationInSeconds" : 23,
"clockDurationInSeconds" : 30,
"movingDurationInSeconds" : 0
}, {
"startTimeInSeconds" : 1593691200,
"speedMetersPerSecond" : 0.0,
"totalDistanceInMeters" : 27.0,
"timerDurationInSeconds" : 23,
"clockDurationInSeconds" : 27,
"movingDurationInSeconds" : 0
} ]
}, {
"summaryId" : "14033650-detail",
"summary" : {
"durationInSeconds" : 4778,
"startTimeInSeconds" : 1593777600,
"startTimeOffsetInSeconds" : -18000,
"activityType" : "WALKING",
"averageHeartRateInBeatsPerMinute" : 86,
"averageRunCadenceInStepsPerMinute" : 30.0,
"averageSpeedInMetersPerSecond" : 0.6164423,
"averagePaceInMinutesPerKilometer" : 18.036388,
"activeKilocalories" : 182,
"distanceInMeters" : 3742.63,
"maxHeartRateInBeatsPerMinute" : 120,
"maxPaceInMinutesPerKilometer" : 3.5400813,
"maxRunCadenceInStepsPerMinute" : 118.0,
"maxSpeedInMetersPerSecond" : 4.5140486,
"steps" : 1623,
"totalElevationGainInMeters" : 20.9
},
"samples" : [ {
"startTimeInSeconds" : 1593691200,
"speedMetersPerSecond" : 1.0,
"totalDistanceInMeters" : 27.0,
"timerDurationInSeconds" : 27,
"clockDurationInSeconds" : 27,
"movingDurationInSeconds" : 0
}, {
"startTimeInSeconds" : 1593691200,
"speedMetersPerSecond" : 1.0,
"totalDistanceInMeters" : 24.0,
"timerDurationInSeconds" : 23,
"clockDurationInSeconds" : 29,
"movingDurationInSeconds" : 0
} ]
} ]

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,43 @@
{"activities":
[
{
"userId": "25858854-f086-4026-83ac-a3bfc97dcbb1",
"userAccessToken": "dfdzf",
"summaryId" : "5180795946",
"durationInSeconds" : 640,
"startTimeInSeconds" : 1593758587,
"startTimeOffsetInSeconds" : 7200,
"activityType" :
"INDOOR_ROWING",
"averageHeartRateInBeatsPerMinute" : 96,
"activeKilocalories" : 55,
"deviceName" : "vivoactive3",
"maxHeartRateInBeatsPerMinute" : 105},
{
"userId": "25858854-f086-4026-83ac-a3bfc97dcbb1",
"userAccessToken": "dfdzf",
"summaryId" : "5180798644",
"durationInSeconds" : 3959,
"startTimeInSeconds" : 1593759504,
"startTimeOffsetInSeconds" : 7200,
"activityType" : "STRENGTH_TRAINING",
"averageHeartRateInBeatsPerMinute" : 97,
"activeKilocalories" : 296,
"deviceName" : "vivoactive3",
"maxHeartRateInBeatsPerMinute" : 132,
"steps" : 630},
{
"userId": "25858854-f086-4026-83ac-a3bfc97dcbb1",
"userAccessToken": "dfdzf",
"summaryId" : "5180799021",
"durationInSeconds" : 309,
"startTimeInSeconds" : 1593763505,
"startTimeOffsetInSeconds" : 7200,
"activityType" : "INDOOR_CYCLING",
"averageHeartRateInBeatsPerMinute" : 109,
"activeKilocalories" : 38,
"deviceName" : "vivoactive3",
"maxHeartRateInBeatsPerMinute" : 119
}
]
}

View File

@@ -415,6 +415,7 @@ urlpatterns = [
re_path(r'^workout/(?P<pk>\b[0-9A-Fa-f]+\b)/delete/$',login_required(
views.WorkoutDelete.as_view()),
name='workout_delete'),
re_path(r'^garmin/summaries/',views.garmin_summaries_view,name='garmin_summaries_view'),
# re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required(
# views.workout_code_delete_view),name='workout_code_delete'),
re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/smoothenpace/$',views.workout_smoothenpace_view,name='workout_smoothenpace_view'),

View File

@@ -1008,20 +1008,43 @@ def workout_stravaimport_view(request,message="",userid=0):
return HttpResponse(res)
@login_required()
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
def workout_garminimport_view(request,userid=0):
r = getrequestrower(request,userid=userid)
# For push notifications from Garmin
def garmin_summaries_view(request):
if request.method != 'POST':
raise Http404("Not allowed")
try:
thetoken = garmin_open(request.user)
except NoTokenError:
return HttpResponseRedirect("/rowers/me/garminauthorize/")
# POST request
data = json.loads(request.body)
activities = data['activities']
res = garmin_stuff.get_garmin_workout_list(request.user)
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']
except Rower.DoesNotExist:
pass
return HttpResponse(status=200)
workouts = []
# The page where you select which RunKeeper workout to import
@login_required()