sort of saves files
This commit is contained in:
@@ -8,6 +8,8 @@ from rowers.mytypes import otwtypes
|
||||
from rowers.rower_rules import is_workout_user,ispromember
|
||||
from iso8601 import ParseError
|
||||
|
||||
import pandas as pd
|
||||
|
||||
import numpy
|
||||
import json
|
||||
from json.decoder import JSONDecodeError
|
||||
@@ -27,6 +29,7 @@ from rowers.models import C2WorldClassAgePerformance,Rower,Workout,TombStone
|
||||
from django.core.exceptions import PermissionDenied
|
||||
|
||||
from rowers.utils import custom_exception_handler,NoTokenError
|
||||
from rowingdata import rowingdata
|
||||
|
||||
oauth_data = {
|
||||
'client_id': GARMIN_CLIENT_KEY,
|
||||
@@ -43,6 +46,18 @@ oauth_data = {
|
||||
'headers': 'Authorization: OAuth oauth_version="1.0"'
|
||||
}
|
||||
|
||||
columns = {
|
||||
'startTimeInSeconds':'TimeStamp (sec)',
|
||||
'latitudeinDegree':' latitude',
|
||||
'longitudeInDegree':' longitude',
|
||||
'heartRate':' HRCur (bpm)',
|
||||
'speedMetersPerSecond':' AverageBoatSpeed (m/s)',
|
||||
'totalDistanceInMeters':' Horizontal (meters)',
|
||||
'clockDurationInSeconds':' ElapsedTime (sec)',
|
||||
'powerInWatts':' Power (watts)',
|
||||
'bikeCadenceInRPM':' Cadence (stokes/min)',
|
||||
}
|
||||
|
||||
def garmin_authorize():
|
||||
redirect_uri = oauth_data['redirect_uri']
|
||||
client_secret = oauth_data['client_secret']
|
||||
@@ -110,51 +125,100 @@ def get_garmin_workout_list(user):
|
||||
|
||||
return result
|
||||
|
||||
def garmin_getworkout(garminid,r,activity):
|
||||
starttime = activity['startTimeInSeconds']
|
||||
startdatetime = arrow.get(starttime)
|
||||
durationseconds = activity['durationInSeconds']
|
||||
duration = dataprep.totaltime_sec_to_string(durationseconds)
|
||||
activitytype = activity['activityType']
|
||||
name = 'Imported from Garmin'
|
||||
date = startdatetime.date()
|
||||
try:
|
||||
distance = activity['distanceInMeters']
|
||||
except KeyError:
|
||||
distance = 0
|
||||
try:
|
||||
averagehr = activity['averageHeartRateInBeatsPerMinute']
|
||||
maxhr = activity['maxHeartRateInBeatsPerMinute']
|
||||
except KeyError:
|
||||
averagehr = 0
|
||||
maxhr = 0
|
||||
try:
|
||||
w = Workout.objects.get(uploadedtogarmin=garminid)
|
||||
except Workout.DoesNotExist:
|
||||
newcsvfile='media/garmin{code}_{importid}.csv'
|
||||
w = Workout(user=r,csvfilename=newcsvfile)
|
||||
w.startdatetime = datetime.datetime(
|
||||
year=startdatetime.year,
|
||||
month=startdatetime.month,
|
||||
day=startdatetime.day,
|
||||
hour=startdatetime.hour,
|
||||
minute=startdatetime.minute,
|
||||
second=startdatetime.second,
|
||||
tzinfo=startdatetime.tzinfo)
|
||||
w.starttime = startdatetime.time()
|
||||
try:
|
||||
w.duration = datetime.datetime.strptime(duration,"%H:%M:%S.%f").time()
|
||||
except ValueError:
|
||||
w.duration = datetime.datetime.strptime(duration,"%H:%M:%S")
|
||||
try:
|
||||
w.workouttype = mytypes.garminmappinginv[activitytype]
|
||||
except KeyError:
|
||||
w.workouttype = 'other'
|
||||
w.name = name
|
||||
w.date = date
|
||||
w.distance = distance
|
||||
|
||||
w.save()
|
||||
|
||||
|
||||
return w
|
||||
|
||||
def garmin_workouts_from_details(activities):
|
||||
for activity in activities:
|
||||
garmintoken = activity['userAccessToken']
|
||||
try:
|
||||
r = Rower.objects.get(garmintoken=garmintoken)
|
||||
garminid = activity['summaryId'][:-7]
|
||||
summary = activity['summary']
|
||||
w = garmin_getworkout(garminid,r,summary)
|
||||
samples = activity['samples']
|
||||
df = pd.DataFrame(samples)
|
||||
df.rename(columns=columns,inplace=True)
|
||||
try:
|
||||
pace = 500./df[' AverageBoatSpeed (m/s)']
|
||||
except KeyError:
|
||||
pace = 0
|
||||
df[' AverageBoatSpeed (m/s)'] = 0
|
||||
df[' Stroke500mPace (sec/500m)'] = pace
|
||||
try:
|
||||
spm = df[' Cadence (stokes/min)']
|
||||
except KeyError:
|
||||
df[' Cadence (stokes/min)'] = 0
|
||||
df['cum_dist'] = df[' Horizontal (meters)']
|
||||
try:
|
||||
power = df[' Power (watts)']
|
||||
except KeyError:
|
||||
df[' Power (watts)'] = 0
|
||||
df[' AverageDriveForce (lbs)'] = 0
|
||||
df[' DriveLength (meters)'] = 0
|
||||
df[' PeakDriveForce (lbs)'] = 1
|
||||
df[' DriveTime (ms)'] = 0
|
||||
rowdata = rowingdata(df=df)
|
||||
rowdata.write_csv(w.csvfilename,gzip=True)
|
||||
data = dataprep.dataprep(rowdata.df,id=w.id)
|
||||
except Rower.DoesNotExist:
|
||||
pass
|
||||
|
||||
return 1
|
||||
|
||||
def garmin_workouts_from_summaries(activities):
|
||||
for activity in activities:
|
||||
garmintoken = activity['userAccessToken']
|
||||
try:
|
||||
r = Rower.objects.get(garmintoken=garmintoken)
|
||||
starttime = activity['startTimeInSeconds']
|
||||
startdatetime = arrow.get(starttime)
|
||||
durationseconds = activity['durationInSeconds']
|
||||
duration = dataprep.totaltime_sec_to_string(durationseconds)
|
||||
activitytype = activity['activityType']
|
||||
name = 'Imported from Garmin'
|
||||
date = startdatetime.date()
|
||||
try:
|
||||
distance = activity['durationInMeters']
|
||||
except KeyError:
|
||||
distance = 0
|
||||
try:
|
||||
averagehr = activity['averageHeartRateInBeatsPerMinute']
|
||||
maxhr = activity['maxHeartRateInBeatsPerMinute']
|
||||
except KeyError:
|
||||
averagehr = 0
|
||||
maxhr = 0
|
||||
uploadedtogarmin = activity['summaryId']
|
||||
try:
|
||||
w = Workout.objects.get(uploadedtogarmin=uploadedtogarmin)
|
||||
except Workout.DoesNotExist:
|
||||
newcsvfile='media/garmin{code}_{importid}.csv'
|
||||
w = Workout(user=r,csvfilename=newcsvfile)
|
||||
w.startdatetime = datetime.datetime(
|
||||
year=startdatetime.year,
|
||||
month=startdatetime.month,
|
||||
day=startdatetime.day,
|
||||
hour=startdatetime.hour,
|
||||
minute=startdatetime.minute,
|
||||
second=startdatetime.second,
|
||||
tzinfo=startdatetime.tzinfo)
|
||||
w.starttime = startdatetime.time()
|
||||
w.duration = duration
|
||||
try:
|
||||
w.workouttype = mytypes.garminmappinginv[activitytype]
|
||||
except KeyError:
|
||||
w.workouttype = 'other'
|
||||
w.name = name
|
||||
w.date = date
|
||||
w.save()
|
||||
id = activity['summaryId']
|
||||
w = garmin_getworkout(id,r,activity)
|
||||
except Rower.DoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user