started with garmin summaries view
This commit is contained in:
@@ -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
71
rowers/tests/testdata/garmindetail1.txt
vendored
Normal 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
|
||||
} ]
|
||||
} ]
|
||||
1
rowers/tests/testdata/garmindetail2.txt
vendored
Normal file
1
rowers/tests/testdata/garmindetail2.txt
vendored
Normal file
File diff suppressed because one or more lines are too long
43
rowers/tests/testdata/garminsummarydata.txt
vendored
Normal file
43
rowers/tests/testdata/garminsummarydata.txt
vendored
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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'),
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user