Private
Public Access
1
0

Seems to work (golang routine to test)

This commit is contained in:
Sander Roosendaal
2020-07-08 22:04:27 +02:00
parent 30b9fac1d5
commit ea2af4830c
5 changed files with 37 additions and 14 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')
@@ -112,14 +112,16 @@ def garmin_open(user):
return token return token
def get_garmin_file(r,callbackURL,starttime,fileType): def get_garmin_file(r,callbackURL,starttime,fileType):
job = queuehigh.enqueue( job = myqueue(
get_garmin_file, queue,
handle_get_garmin_file,
oauth_data['client_id'], oauth_data['client_id'],
oauth_data['client_secret'], oauth_data['client_secret'],
garmintoken, r.garmintoken,
garminrefreshtoken, r.garminrefreshtoken,
r.user.id, r.user.id,
callbackURL,filetype callbackURL,
fileType,
) )
return job.id return job.id

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
@@ -50,6 +51,7 @@ 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 rowsandall_app.settings import UPLOAD_SERVICE_SECRET, UPLOAD_SERVICE_URL
from requests_oauthlib import OAuth1, OAuth1Session
import pandas as pd import pandas as pd
@@ -680,8 +682,19 @@ def handle_getagegrouprecords(self,
return 1 return 1
@app.task(bind=True) @app.task
def get_garmin_file(client_id,client_secret,garmintoken,garminrefreshtoken,userid,url,filetype): def handle_get_garmin_file(client_id,
client_secret,
garmintoken,
garminrefreshtoken,
userid,
url,
filetype,
*args,
**kwargs):
garmin = OAuth1Session(client_id, garmin = OAuth1Session(client_id,
client_secret=client_secret, client_secret=client_secret,
resource_owner_key=garmintoken, resource_owner_key=garmintoken,
@@ -694,6 +707,7 @@ def get_garmin_file(client_id,client_secret,garmintoken,garminrefreshtoken,useri
)+filetype )+filetype
response = garmin.get(url, stream=True) response = garmin.get(url, stream=True)
print(response.status_code,filename)
if response.status_code == 200: if response.status_code == 200:
with open(filename, 'wb') as out_file: with open(filename, 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file) shutil.copyfileobj(response.raw, out_file)
@@ -704,10 +718,14 @@ def get_garmin_file(client_id,client_secret,garmintoken,garminrefreshtoken,useri
'secret':UPLOAD_SERVICE_SECRET, 'secret':UPLOAD_SERVICE_SECRET,
'user':userid, 'user':userid,
'file': filename, 'file': filename,
'title': 'Import from Garmin File' 'title': filename[6:],
'workouttype':'water',
'boattype':'1x',
} }
session = requests.session()
response = requests.post(UPLOAD_SERVICE_URL,data=uploadoptions) newHeaders = {'Content-type': 'application/json', 'Accept': 'text/plain'}
session.headers.update(newHeaders)
response = session.post(UPLOAD_SERVICE_URL,json=uploadoptions)
return 1 return 1

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

@@ -1050,11 +1050,11 @@ def garmin_newfiles_ping(request):
try: try:
garmintoken = file['userAccessToken'] garmintoken = file['userAccessToken']
try: try:
r = Rower.objects.get(garmintoken=garmintoken r = Rower.objects.get(garmintoken=garmintoken)
)
callbackURL = file['callbackURL'] callbackURL = file['callbackURL']
starttime = file['startTimeInSeconds'] starttime = file['startTimeInSeconds']
job = get_garmin_file(r,callbackURL,starttime) fileType = file['fileType']
job = garmin_stuff.get_garmin_file(r,callbackURL,starttime,fileType)
except Rower.DoesNotExist: except Rower.DoesNotExist:
pass pass
except KeyError: except KeyError:

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}