diff --git a/rowers/integrations/integrations.py b/rowers/integrations/integrations.py index 87aa1661..98de0b2e 100644 --- a/rowers/integrations/integrations.py +++ b/rowers/integrations/integrations.py @@ -1,6 +1,6 @@ from abc import ABCMeta, ABC, abstractmethod from importlib import import_module -from rowers.models import Rower, User +from rowers.models import Rower, User, create_or_update_syncrecord from rowers.utils import NoTokenError,dologging import requests diff --git a/rowers/integrations/nk.py b/rowers/integrations/nk.py index 3c95729c..fc22d965 100644 --- a/rowers/integrations/nk.py +++ b/rowers/integrations/nk.py @@ -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 +from rowers.models import User, Rower, Workout, TombStone from django.db.utils import IntegrityError from rowers import mytypes @@ -91,14 +91,7 @@ class NKIntegration(SyncIntegration): _ = self.open() r = self.rower - record = SyncRecord( - rower = r, - nkid = id, - ) - try: - record.save() - except IntegrityError: - return 0 + record = create_or_update_syncrecord(rower, None, nkid=id) before = kwargs.get('before',0) after = kwargs.get('after',0) diff --git a/rowers/models.py b/rowers/models.py index bacd03db..90156ac5 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3632,12 +3632,6 @@ class SyncRecord(models.Model): return super(SyncRecord, self).save(*args, **kwargs) def create_or_update_syncrecord(rower, workout, **kwargs): - records = SyncRecord.objects.filter(workout=workout,rower=rower) - if records.count(): - record = records[0] - else: - record = SyncRecord(workout=workout, rower=rower) - try: kwargs.pop('rower') except KeyError: @@ -3648,14 +3642,36 @@ def create_or_update_syncrecord(rower, workout, **kwargs): except KeyError: pass + if workout: + records = SyncRecord.objects.filter(workout=workout,rower=rower) + if records.count(): + record = records[0] + else: + records = SyncRecord.objects.filter(**kwargs,rower=rower) + if records.count(): + record = records[0] + record.workout = workout + else: + record = SyncRecord(rower=rower, workout=workout) + + else: # not workout + records = SyncRecord.objects.filter(**kwargs, rower=rower) + if records.count(): + record = records[0] + else: + record = SyncRecord(rower=rower) + + for field in record._meta.fields: value = kwargs.get(field.name, None) if value: + print(field.name, value) setattr(record, field.name, value) try: record.save() except IntegrityError: + print('err') pass return record diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index f59a6ec8..06c68648 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ