Private
Public Access
1
0

Merge branch 'release/v13.29'

This commit is contained in:
Sander Roosendaal
2020-07-09 10:25:04 +02:00
6 changed files with 101 additions and 4 deletions

View File

@@ -22,7 +22,7 @@ from rowsandall_app.settings import (
from pytz import timezone as tz, utc 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 import django_rq
queue = django_rq.get_queue('default') queue = django_rq.get_queue('default')
queuelow = django_rq.get_queue('low') queuelow = django_rq.get_queue('low')
@@ -111,6 +111,21 @@ def garmin_open(user):
return token 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): def get_garmin_workout_list(user):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
if (r.garmintoken == '') or (r.stravatoken is None): if (r.garmintoken == '') or (r.stravatoken is None):

View File

@@ -12,6 +12,7 @@ import shutil
import numpy as np import numpy as np
import re import re
import sys import sys
import json
from scipy import optimize from scipy import optimize
from scipy.signal import savgol_filter 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 PROGRESS_CACHE_SECRET
from rowsandall_app.settings import SETTINGS_NAME from rowsandall_app.settings import SETTINGS_NAME
from rowsandall_app.settings import workoutemailbox 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 import pandas as pd
@@ -678,6 +682,52 @@ def handle_getagegrouprecords(self,
return 1 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) @app.task(bind=True)
def long_test_task(self,aantal,debug=False,job=None,session_key=None): def long_test_task(self,aantal,debug=False,job=None,session_key=None):

View File

@@ -34,12 +34,10 @@
alt="connect with Polar" width="130"></a></p> alt="connect with Polar" width="130"></a></p>
<p><a href="/rowers/me/tpauthorize/"><img src="/static/img/TP_logo_horz_2_color.png" <p><a href="/rowers/me/tpauthorize/"><img src="/static/img/TP_logo_horz_2_color.png"
alt="connect with Polar" width="130"></a></p> alt="connect with Polar" width="130"></a></p>
<!--
<p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png" <p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png"
alt="connect with Garmin" with="130"></a></p> alt="connect with Garmin" with="130"></a></p>
-->
{% endblock %} {% endblock %}

View File

@@ -416,6 +416,7 @@ urlpatterns = [
views.WorkoutDelete.as_view()), views.WorkoutDelete.as_view()),
name='workout_delete'), name='workout_delete'),
re_path(r'^garmin/summaries/',views.garmin_summaries_view,name='garmin_summaries_view'), 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/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'^garmin/deregistration/',views.garmin_deregistration_view,name='garmin_deregistration_view'),
# re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required( # re_path(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required(

View File

@@ -1031,6 +1031,37 @@ def garmin_summaries_view(request):
return HttpResponse(status=200) return HttpResponse(status=200)
@csrf_exempt
def garmin_newfiles_ping(request):
t = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
with open('garminlog.log','a') as f:
f.write('\n')
f.write(timestamp)
f.write(' ')
f.write(str(request.body))
if request.method != 'POST':
return HttpResponse(status=200)
data = json.loads(request.body)
files = data['activityFiles']
for file in data['activityFiles']:
try:
garmintoken = file['userAccessToken']
try:
r = Rower.objects.get(garmintoken=garmintoken)
callbackURL = file['callbackURL']
starttime = file['startTimeInSeconds']
fileType = file['fileType']
job = garmin_stuff.get_garmin_file(r,callbackURL,starttime,fileType)
except Rower.DoesNotExist:
pass
except KeyError:
pass
return HttpResponse(status=200)
@csrf_exempt @csrf_exempt
def garmin_deregistration_view(request): def garmin_deregistration_view(request):
if request.method != 'POST': if request.method != 'POST':

View File

@@ -4624,6 +4624,7 @@ def workout_upload_api(request):
q = request.POST q = request.POST
post_data = {k: q.getlist(k) if len(q.getlist(k))>1 else v for k, v in q.items()} post_data = {k: q.getlist(k) if len(q.getlist(k))>1 else v for k, v in q.items()}
# only allow local host # only allow local host
hostt = request.get_host().split(':') hostt = request.get_host().split(':')
if hostt[0] not in ['localhost','127.0.0.1','dev.rowsandall.com','rowsandall.com']: if hostt[0] not in ['localhost','127.0.0.1','dev.rowsandall.com','rowsandall.com']:
@@ -4716,6 +4717,7 @@ def workout_upload_api(request):
message = {'status':'false','message':'unable to process file: '+message} message = {'status':'false','message':'unable to process file: '+message}
else: else:
message = {'status': 'false', 'message': 'unable to process file'} message = {'status': 'false', 'message': 'unable to process file'}
print(message)
return JSONResponse(status=400,data=message) return JSONResponse(status=400,data=message)
if id == -1: if id == -1:
message = {'status': 'true', 'message':message} message = {'status': 'true', 'message':message}