improving syncrecord functionality, now also for workout export
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from .integrations import SyncIntegration, NoTokenError
|
||||
from rowers.models import User, Rower, Workout, TombStone, SyncRecord
|
||||
from .integrations import SyncIntegration, NoTokenError, create_or_update_syncrecord, get_known_ids
|
||||
from rowers.models import User, Rower, Workout, TombStone
|
||||
from django.db.utils import IntegrityError
|
||||
|
||||
from rowingdata import rowingdata
|
||||
@@ -360,15 +360,9 @@ class C2Integration(SyncIntegration):
|
||||
|
||||
def get_workout(self, id, *args, **kwargs):
|
||||
_ = self.open()
|
||||
r = self.rower
|
||||
|
||||
record = SyncRecord(
|
||||
rower = self.rower,
|
||||
c2id = id,
|
||||
)
|
||||
try:
|
||||
record.save()
|
||||
except IntegrityError:
|
||||
return 0
|
||||
record = create_or_update_syncrecord(r, None, c2id=id)
|
||||
|
||||
_ = myqueue(queuehigh,
|
||||
handle_c2_getworkout,
|
||||
@@ -428,9 +422,7 @@ class C2Integration(SyncIntegration):
|
||||
workouts = []
|
||||
c2ids = [item['id'] for item in res.json()['data']]
|
||||
|
||||
knownc2ids = uniqify([
|
||||
record.c2id for record in SyncRecord.objects.filter(rower=r)
|
||||
])
|
||||
knownc2ids = get_known_ids(r, 'c2id')
|
||||
|
||||
for item in res.json()['data']:
|
||||
d = item['distance']
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from abc import ABCMeta, ABC, abstractmethod
|
||||
from importlib import import_module
|
||||
from rowers.models import Rower, User, create_or_update_syncrecord
|
||||
from rowers.models import Rower, User, create_or_update_syncrecord, get_known_ids
|
||||
from rowers.utils import NoTokenError,dologging
|
||||
|
||||
import requests
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from .integrations import SyncIntegration, NoTokenError, create_or_update_syncrecord
|
||||
from rowers.models import User, Rower, Workout, TombStone, SyncRecord
|
||||
from .integrations import SyncIntegration, NoTokenError, create_or_update_syncrecord, get_known_ids
|
||||
from rowers.models import User, Rower, Workout, TombStone
|
||||
from django.db.utils import IntegrityError
|
||||
|
||||
from rowers import mytypes
|
||||
@@ -185,9 +185,7 @@ class NKIntegration(SyncIntegration):
|
||||
|
||||
# get NK IDs
|
||||
nkids = [item['id'] for item in jsondata]
|
||||
knownnkids = uniqify([
|
||||
record.nkid for record in SyncRecord.objects.filter(rower=r)
|
||||
])
|
||||
knownnkids = get_known_ids(r, 'nkid')
|
||||
workouts = []
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ from rowers.courseutils import coordinate_in_path
|
||||
from rowers.utils import (
|
||||
# workflowleftpanel, workflowmiddlepanel,
|
||||
defaultleft, defaultmiddle, landingpages, landingpages2,
|
||||
steps_read_fit, steps_write_fit, ps_dict_order
|
||||
steps_read_fit, steps_write_fit, ps_dict_order, uniqify
|
||||
)
|
||||
from rowers.metrics import axlabels
|
||||
from rowers.utils import geo_distance
|
||||
@@ -3631,6 +3631,28 @@ class SyncRecord(models.Model):
|
||||
self.rower = self.workout.user
|
||||
return super(SyncRecord, self).save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
str = 'SyncRecord {i} {r} {w} '.format(
|
||||
i = self.id,
|
||||
r = self.rower,
|
||||
w = self.workout,
|
||||
)
|
||||
|
||||
str2 = ''
|
||||
|
||||
for field in ['stravaid', 'sporttracksid', 'nkid', 'c2id', 'tpid']:
|
||||
value = getattr(self, field, None)
|
||||
if value is not None:
|
||||
str2 += '{w}: {v},'.format(
|
||||
w = field,
|
||||
v = value
|
||||
)
|
||||
|
||||
if str2:
|
||||
str = str+'('+str2+')'
|
||||
|
||||
return str
|
||||
|
||||
def create_or_update_syncrecord(rower, workout, **kwargs):
|
||||
try:
|
||||
kwargs.pop('rower')
|
||||
@@ -3674,7 +3696,12 @@ def create_or_update_syncrecord(rower, workout, **kwargs):
|
||||
|
||||
return record
|
||||
|
||||
def get_known_ids(rower, field_name):
|
||||
knownids = uniqify(
|
||||
getattr(record, field_name, None) for record in SyncRecord.objects.filter(rower=rower)
|
||||
)
|
||||
|
||||
return knownids
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -405,6 +405,7 @@ def check_tp_workout_id(workout, location, attempts=5, debug=False, **kwargs):
|
||||
if status == 'Success':
|
||||
tpid = response.json()['WorkoutIds'][0]
|
||||
workout.uploadedtotp = tpid
|
||||
record = create_or_update_syncrecord(workout.user, workout, tpid=tpid)
|
||||
workout.save()
|
||||
|
||||
return 1
|
||||
@@ -432,6 +433,7 @@ def handle_workout_tp_upload(w, thetoken, tcxfilename, debug=False, **kwargs):
|
||||
return 0
|
||||
|
||||
w.uploadedtotp = res
|
||||
record = create_or_update_syncrecord(w.user, w, tpid=tpid)
|
||||
tpid = res
|
||||
w.save()
|
||||
os.remove(tcxfilename)
|
||||
@@ -729,7 +731,7 @@ def handle_sporttracks_sync(workoutid, url, headers, data, debug=False, **kwargs
|
||||
workout = Workout.objects.get(id=workoutid)
|
||||
workout.uploadedtosporttracks = id
|
||||
workout.save()
|
||||
|
||||
record = create_or_update_syncrecord(workout.user, workout, sporttracksid=id)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -798,6 +800,7 @@ def handle_strava_sync(stravatoken,
|
||||
|
||||
workout.uploadedtostrava = res.id
|
||||
workout.save()
|
||||
record = create_or_update_syncrecord(workout.user, workout, stravaid=res.id)
|
||||
try:
|
||||
act = client.update_activity(res.id, activity_type=activity_type,
|
||||
description=description, device_name='Rowsandall.com')
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
Reference in New Issue
Block a user