Merge branch 'release/v13.29'
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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':
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
Reference in New Issue
Block a user