Merge branch 'feature/garmin2' into develop
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -34,12 +34,10 @@
|
||||
alt="connect with Polar" width="130"></a></p>
|
||||
<p><a href="/rowers/me/tpauthorize/"><img src="/static/img/TP_logo_horz_2_color.png"
|
||||
alt="connect with Polar" width="130"></a></p>
|
||||
<!--
|
||||
|
||||
<p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png"
|
||||
alt="connect with Garmin" with="130"></a></p>
|
||||
|
||||
-->
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -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<id>\b[0-9A-Fa-f]+\b)/delete/$',login_required(
|
||||
|
||||
@@ -1031,6 +1031,37 @@ def garmin_summaries_view(request):
|
||||
|
||||
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
|
||||
def garmin_deregistration_view(request):
|
||||
if request.method != 'POST':
|
||||
|
||||
@@ -4624,6 +4624,7 @@ def workout_upload_api(request):
|
||||
q = request.POST
|
||||
post_data = {k: q.getlist(k) if len(q.getlist(k))>1 else v for k, v in q.items()}
|
||||
|
||||
|
||||
# only allow local host
|
||||
hostt = request.get_host().split(':')
|
||||
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}
|
||||
else:
|
||||
message = {'status': 'false', 'message': 'unable to process file'}
|
||||
print(message)
|
||||
return JSONResponse(status=400,data=message)
|
||||
if id == -1:
|
||||
message = {'status': 'true', 'message':message}
|
||||
|
||||
Reference in New Issue
Block a user