From 83038543146ac284949bde33817f3dcfb7074c0c Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 28 Jun 2020 16:24:51 +0200 Subject: [PATCH] trying garmin workout list - not working --- rowers/admin.py | 3 ++- rowers/garmin_stuff.py | 31 ++++++++++++++++++++++++++++++- rowers/models.py | 1 + rowers/views/importviews.py | 15 +++++++++++++++ rowsandall_app/settings_dev.py | 1 + 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/rowers/admin.py b/rowers/admin.py index d2e9b731..9f370ac6 100644 --- a/rowers/admin.py +++ b/rowers/admin.py @@ -57,7 +57,8 @@ class RowerInline(admin.StackedInline): 'stravatoken','stravatokenexpirydate','stravarefreshtoken', 'stravaexportas','strava_auto_export', 'strava_auto_import', - 'runkeepertoken','runkeeper_auto_export',)}), + 'runkeepertoken','runkeeper_auto_export', + 'garmintoken','garminrefreshtoken')}), ('Team', {'fields':('friends','privacy','team')}), ) diff --git a/rowers/garmin_stuff.py b/rowers/garmin_stuff.py index ee7d5ad8..c7f0c0b5 100644 --- a/rowers/garmin_stuff.py +++ b/rowers/garmin_stuff.py @@ -22,10 +22,12 @@ queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') queuehigh = django_rq.get_queue('low') from rowers.utils import myqueue -from rowers.models import C2WorldClassAgePerformance +from rowers.models import C2WorldClassAgePerformance,Rower,Workout,TombStone from django.core.exceptions import PermissionDenied +from rowers.utils import custom_exception_handler,NoTokenError + oauth_data = { 'client_id': GARMIN_CLIENT_KEY, 'client_secret': GARMIN_CLIENT_SECRET, @@ -80,3 +82,30 @@ def garmin_processcallback(redirect_response,resource_owner_key,resource_owner_s garminrefreshtoken = oauth_tokens.get('oauth_token_secret') return garmintoken,garminrefreshtoken + +def garmin_open(user): + r = Rower.objects.get(user=user) + token = Rower.garmintoken + + if (token == '') or (token is None): + raise NoTokenError("User has no garmin token") + + return token + +def get_garmin_workout_list(user): + r = Rower.objects.get(user=user) + if (r.garmintoken == '') or (r.stravatoken is None): + s = "Token doesn't exist. Need to authorize" + return custom_exception_handler(401,s) + + garmin = OAuth1Session(oauth_data['client_id'], + client_secret=oauth_data['client_secret'], + resource_owner_key=r.garmintoken, + resource_owner_secret=r.garminrefreshtoken, + ) + + url = 'https://healthapi.garmin.com/wellness-api/rest/activities?uploadStartTimeInSeconds=1593113760&uploadEndTimeInSeconds=1593279360' + + result = garmin.get(url) + + return result diff --git a/rowers/models.py b/rowers/models.py index ecdd8cf7..f3a540f4 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2793,6 +2793,7 @@ class Workout(models.Model): uploadedtounderarmour = models.BigIntegerField(default=0) uploadedtotp = models.BigIntegerField(default=0) uploadedtorunkeeper = models.BigIntegerField(default=0) + uploadedtogarmin = models.BigIntegerField(default=0) forceunit = models.CharField(default='lbs', choices = ( ('lbs','lbs'), diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index d1b09b48..824cfe50 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -1008,6 +1008,21 @@ 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) + + try: + thetoken = garmin_open(request.user) + except NoTokenError: + return HttpResponseRedirect("/rowers/me/garminauthorize/") + + res = garmin_stuff.get_garmin_workout_list(request.user) + + workouts = [] + + # The page where you select which RunKeeper workout to import @login_required() @permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True) diff --git a/rowsandall_app/settings_dev.py b/rowsandall_app/settings_dev.py index d40f8ca2..71247f61 100644 --- a/rowsandall_app/settings_dev.py +++ b/rowsandall_app/settings_dev.py @@ -63,6 +63,7 @@ TEMPLATES[0]['OPTIONS']['debug'] = DEBUG ALLOWED_HOSTS = ['localhost','127.0.0.1'] # INSTALLED_APPS += ['debug_toolbar',] +#INSTALLED_APPS += ["sslserver"] # MIDDLEWARE_CLASSES += ['debug_toolbar.middleware.DebugToolbarMiddleware',]