adding all new NK workouts
This commit is contained in:
@@ -22,7 +22,7 @@ queuehigh = django_rq.get_queue('low')
|
||||
from rowers.rower_rules import is_workout_user, ispromember
|
||||
|
||||
from iso8601 import ParseError
|
||||
from rowers.utils import myqueue
|
||||
from rowers.utils import myqueue,get_nk_summary, get_nk_allstats, get_nk_intervalstats,getdict
|
||||
|
||||
import rowers.mytypes as mytypes
|
||||
import gzip
|
||||
@@ -33,6 +33,9 @@ from rowsandall_app.settings import (
|
||||
UPLOAD_SERVICE_URL, UPLOAD_SERVICE_SECRET,
|
||||
)
|
||||
|
||||
from rowers.tasks import handle_nk_async_workout
|
||||
|
||||
|
||||
try:
|
||||
from json.decoder import JSONDecodeError
|
||||
except ImportError:
|
||||
@@ -108,6 +111,64 @@ def nk_open(user):
|
||||
|
||||
return thetoken
|
||||
|
||||
def get_nk_workouts(rower, do_async=True):
|
||||
try:
|
||||
thetoken = nk_open(rower.user)
|
||||
except NoTokenError:
|
||||
return 0
|
||||
|
||||
res = get_nk_workout_list(rower.user)
|
||||
|
||||
if res.status_code != 200:
|
||||
return 0
|
||||
|
||||
nkids = [item['id'] for item in res.json()]
|
||||
alldata = {}
|
||||
for item in res.json():
|
||||
alldata[item['id']] = item
|
||||
|
||||
knownnkids = [
|
||||
w.uploadedtonk for w in Workout.objects.filter(user=rower)
|
||||
]
|
||||
|
||||
tombstones = [
|
||||
t.uploadedtonk for t in TombStone.objects.filter(user=rower)
|
||||
]
|
||||
|
||||
parkedids = []
|
||||
try:
|
||||
with open('nkblocked.json','r') as nkblocked:
|
||||
jsondata = json.load(nkblocked)
|
||||
parkedids = jsondata['ids']
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
knownnkids = uniqify(knownnkids+tombstones+parkedids)
|
||||
newids = [nkid for nkid in nkids if not nkid in knownnkids]
|
||||
|
||||
newparkedids = uniqify(newids+parkedids)
|
||||
|
||||
with open('nkblocked.json','wt') as nkblocked:
|
||||
data = {'ids':newparkedids}
|
||||
json.dump(data,nkblocked)
|
||||
|
||||
counter = 0
|
||||
for nkid in newids:
|
||||
res = myqueue(queuehigh,
|
||||
handle_nk_async_workout,
|
||||
alldata,
|
||||
rower.user.id,
|
||||
rower.nktoken,
|
||||
nkid,
|
||||
counter,
|
||||
rower.defaulttimezone
|
||||
)
|
||||
counter += 1
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
def do_refresh_token(refreshtoken):
|
||||
post_data = {"grant_type": "refresh_token",
|
||||
#"client_id":NK_CLIENT_ID,
|
||||
@@ -161,7 +222,7 @@ def get_nk_workout_list(user,fake=False):
|
||||
# ready to fetch. Hurray
|
||||
endTime = int(arrow.now().timestamp())*1000
|
||||
endTime = str(endTime)
|
||||
startTime = arrow.now()-timedelta(days=90)*1000
|
||||
startTime = arrow.now()-timedelta(days=30)*1000
|
||||
startTime = str(int(startTime.timestamp()))
|
||||
authorizationstring = str('Bearer ' + r.nktoken)
|
||||
headers = {'Authorization': authorizationstring,
|
||||
@@ -182,16 +243,6 @@ def get_nk_workout_list(user,fake=False):
|
||||
return s
|
||||
|
||||
#
|
||||
#def get_workout(user,nkid):
|
||||
def getdict(x, seatIndex=1):
|
||||
seatStrokes = pd.DataFrame(x)
|
||||
try:
|
||||
seatStrokes = seatStrokes.set_index('seatIndex')
|
||||
return dict(seatStrokes.loc[seatIndex])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return {}
|
||||
|
||||
def add_workout_from_data(user,nkid,data,strokedata,source='nk',splitdata=None,
|
||||
workoutsource='nklinklogbook'):
|
||||
@@ -266,116 +317,6 @@ def add_workout_from_data(user,nkid,data,strokedata,source='nk',splitdata=None,
|
||||
return workoutid,""
|
||||
|
||||
|
||||
def get_nk_intervalstats(workoutdata,strokedata):
|
||||
intervals = workoutdata['intervals']
|
||||
separator = "|"
|
||||
stri = "Workout Details\n"
|
||||
stri += "#-{sep}SDist{sep}-Split-{sep}-SPace-{sep}-Pwr-{sep}-SPM--{sep}-AvgHR-{sep}DPS-\n".format(
|
||||
sep=separator)
|
||||
|
||||
i = 0
|
||||
|
||||
for interval in intervals:
|
||||
id = interval['id']
|
||||
sdist = interval['totalDistanceGps']
|
||||
avgpace = interval['avgPaceGps']/1000.
|
||||
avgpacetd = timedelta(seconds=avgpace)
|
||||
newpacestring = dataprep.strfdelta(avgpacetd)
|
||||
|
||||
elapsedSeconds = interval['elapsedTime']/1000. # secs
|
||||
elapsedTime = datetime.utcfromtimestamp(elapsedSeconds)
|
||||
|
||||
newsplitstring = "%s.%i" % (elapsedTime.strftime("%M:%S"), elapsedTime.microsecond/100000)
|
||||
|
||||
pwr = interval['avgPower']
|
||||
avghr = interval['avgHeartRate']
|
||||
spm = interval['avgStrokeRate']
|
||||
dps = interval['distStrokeGps']
|
||||
|
||||
stri += "{i:0>2}{sep}{sdist:0>5}{sep}{split}{sep}{space}{sep} {pwr:0>3} {sep}".format(
|
||||
i=i + 1,
|
||||
sdist=int(float(sdist)),
|
||||
split=newsplitstring,
|
||||
space=newpacestring,
|
||||
pwr=int(pwr),
|
||||
sep=separator,
|
||||
)
|
||||
stri += " {spm} {sep} {avghr:0>3} {sep}{dps:0>4.1f}\n".format(
|
||||
sep=separator,
|
||||
avghr=avghr,
|
||||
spm=spm,
|
||||
dps=dps,
|
||||
)
|
||||
|
||||
i += 1
|
||||
|
||||
return stri
|
||||
|
||||
def get_nk_summary(workoutdata,strokedata):
|
||||
|
||||
name = workoutdata['name']
|
||||
|
||||
avgpace = workoutdata['avgPaceGps']/1000. # secs
|
||||
avgpacetd = timedelta(seconds=avgpace)
|
||||
avgpacestring = dataprep.strfdelta(avgpacetd)
|
||||
|
||||
elapsedSeconds = workoutdata['elapsedTime']/1000. # secs
|
||||
elapsedTime = datetime.utcfromtimestamp(elapsedSeconds)
|
||||
|
||||
timestring = "%s.%i" % (elapsedTime.strftime("%H:%M:%S"), elapsedTime.microsecond/100000)
|
||||
|
||||
dist = workoutdata['totalDistanceGps']
|
||||
spm = workoutdata['avgStrokeRate']
|
||||
avghr = workoutdata['avgHeartRate']
|
||||
avgdps = workoutdata['distStrokeGps']
|
||||
maxhr = strokedata['heartRate'].max()
|
||||
pwr = workoutdata['avgPower']
|
||||
|
||||
sep = "|"
|
||||
|
||||
|
||||
stri1 = "Workout Summary - " + name + "\n"
|
||||
stri1 += "--{sep}Total{sep}--Total---{sep}--Avg--{sep}-Avg-{sep}-Avg--{sep}-Avg-{sep}-Max-{sep}-Avg\n".format(
|
||||
sep=sep)
|
||||
stri1 += "--{sep}Dist-{sep}--Time----{sep}-Pace--{sep}-Pwr-{sep}-SPM--{sep}-HR--{sep}-HR--{sep}-DPS\n".format(
|
||||
sep=sep)
|
||||
|
||||
|
||||
|
||||
stri1 += "--{sep}{dist:0>5.0f}{sep}".format(
|
||||
sep=sep,
|
||||
dist=dist,
|
||||
)
|
||||
|
||||
stri1 += timestring + sep + avgpacestring
|
||||
|
||||
stri1 += "{sep}{avgpower:0>5.1f}".format(
|
||||
sep=sep,
|
||||
avgpower=pwr,
|
||||
)
|
||||
|
||||
stri1 += "{sep} {avgsr:2.1f} {sep}{avghr:0>5.1f}{sep}".format(
|
||||
avgsr=spm,
|
||||
sep=sep,
|
||||
avghr=avghr
|
||||
)
|
||||
|
||||
stri1 += "{maxhr:0>5.1f}{sep}{avgdps:0>4.1f}\n".format(
|
||||
sep=sep,
|
||||
maxhr=maxhr,
|
||||
avgdps=avgdps
|
||||
)
|
||||
|
||||
return stri1
|
||||
|
||||
|
||||
|
||||
return stri1
|
||||
|
||||
def get_nk_allstats(data,workoutdata):
|
||||
stri = get_nk_summary(data, workoutdata) + \
|
||||
get_nk_intervalstats(data, workoutdata)
|
||||
return stri
|
||||
|
||||
|
||||
def get_workout(user,nkid):
|
||||
|
||||
Reference in New Issue
Block a user