diff --git a/rowers/garmin_stuff.py b/rowers/garmin_stuff.py index 52d2e81d..e28c48bf 100644 --- a/rowers/garmin_stuff.py +++ b/rowers/garmin_stuff.py @@ -22,7 +22,7 @@ from rowsandall_app.settings import ( from pytz import timezone as tz, utc -from rowers.tasks import handle_c2_import_stroke_data, handle_c2_sync +from rowers.tasks import handle_get_garmin_file import django_rq queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') @@ -111,6 +111,21 @@ def garmin_open(user): return token +def get_garmin_file(r,callbackURL,starttime,fileType): + job = myqueue( + queue, + handle_get_garmin_file, + oauth_data['client_id'], + oauth_data['client_secret'], + r.garmintoken, + r.garminrefreshtoken, + r.user.id, + callbackURL, + fileType, + ) + + return job.id + def get_garmin_workout_list(user): r = Rower.objects.get(user=user) if (r.garmintoken == '') or (r.stravatoken is None): diff --git a/rowers/tasks.py b/rowers/tasks.py index e606984b..1d978ed0 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -12,6 +12,7 @@ import shutil import numpy as np import re import sys +import json from scipy import optimize from scipy.signal import savgol_filter @@ -48,6 +49,9 @@ from rowsandall_app.settings_dev import SITE_URL as SITE_URL_DEV from rowsandall_app.settings import PROGRESS_CACHE_SECRET from rowsandall_app.settings import SETTINGS_NAME from rowsandall_app.settings import workoutemailbox +from rowsandall_app.settings import UPLOAD_SERVICE_SECRET, UPLOAD_SERVICE_URL + +from requests_oauthlib import OAuth1, OAuth1Session import pandas as pd @@ -678,6 +682,52 @@ def handle_getagegrouprecords(self, return 1 +@app.task +def handle_get_garmin_file(client_id, + client_secret, + garmintoken, + garminrefreshtoken, + userid, + url, + filetype, + *args, + **kwargs): + + + + garmin = OAuth1Session(client_id, + client_secret=client_secret, + resource_owner_key=garmintoken, + resource_owner_secret=garminrefreshtoken, + ) + + filename = 'media/{code}_{id}.'.format( + code = uuid4().hex[:16], + id = userid + )+filetype + + response = garmin.get(url, stream=True) + print(response.status_code,filename) + if response.status_code == 200: + with open(filename, 'wb') as out_file: + shutil.copyfileobj(response.raw, out_file) + + del response + + uploadoptions = { + 'secret':UPLOAD_SERVICE_SECRET, + 'user':userid, + 'file': filename, + 'title': filename[6:], + 'workouttype':'water', + 'boattype':'1x', + } + session = requests.session() + newHeaders = {'Content-type': 'application/json', 'Accept': 'text/plain'} + session.headers.update(newHeaders) + response = session.post(UPLOAD_SERVICE_URL,json=uploadoptions) + + return 1 @app.task(bind=True) def long_test_task(self,aantal,debug=False,job=None,session_key=None): diff --git a/rowers/templates/rower_exportsettings.html b/rowers/templates/rower_exportsettings.html index 69a6bc40..14c5286b 100644 --- a/rowers/templates/rower_exportsettings.html +++ b/rowers/templates/rower_exportsettings.html @@ -34,12 +34,10 @@ alt="connect with Polar" width="130">
- - {% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 2a308b47..68109a49 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -416,6 +416,7 @@ urlpatterns = [ views.WorkoutDelete.as_view()), name='workout_delete'), re_path(r'^garmin/summaries/',views.garmin_summaries_view,name='garmin_summaries_view'), + re_path(r'^garmin/files/',views.garmin_newfiles_ping,name='garmin_newfiles_ping'), re_path(r'^garmin/activities/',views.garmin_details_view,name='garmin_details_view'), re_path(r'^garmin/deregistration/',views.garmin_deregistration_view,name='garmin_deregistration_view'), # re_path(r'^workout/(?P