diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index a47521d5..001f6fcb 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -1648,7 +1648,7 @@ def read_data(columns, ids=[], doclean=True, workstrokesonly=True, debug=False, datadf = pl.concat(data) existing_columns = [col for col in columns if col in datadf.columns] datadf = datadf.select(existing_columns) - except (ShapeError, SchemaError): + except ShapeError: try: data = [ df.select(columns) @@ -1703,7 +1703,61 @@ def read_data(columns, ids=[], doclean=True, workstrokesonly=True, debug=False, datadf = pl.concat(data) except ShapeError: return pl.DataFrame() + except SchemaError: + try: + data = [ + df.select(columns) + for df in data] + except ColumnNotFoundError: + existing_columns = [col for col in columns if col in df.columns] + df = df.select(existing_columns) + # float columns + floatcolumns = [] + intcolumns = [] + stringcolumns = [] + for c in columns: + try: + if metricsdicts[c]['numtype'] == 'float': + floatcolumns.append(c) + if metricsdicts[c]['numtype'] == 'integer': + intcolumns.append(c) + except KeyError: + if c[0] == 'f': + stringcolumns.append(c) + else: + intcolumns.append(c) + + try: + data = [ + df.with_columns( + cs.float().cast(pl.Float64) + ).with_columns( + cs.integer().cast(pl.Int64) + ).with_columns( + cs.by_name(intcolumns).cast(pl.Int64) + ).with_columns( + cs.by_name(floatcolumns).cast(pl.Float64) + ).with_columns( + cs.by_name(stringcolumns).cast(pl.String) + ) + for df in data + ] + except ComputeError: + pass + except ColumnNotFoundError: + pass + + try: + datadf = pl.concat(data) + except SchemaError: + try: + data = [ + df.with_columns(cs.integer().cast(pl.Float64)) for df in data + ] + datadf = pl.concat(data) + except ShapeError: + return pl.DataFrame() diff --git a/rowers/models.py b/rowers/models.py index b19622bc..587de999 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3830,6 +3830,36 @@ class Workout(models.Model): record.boatclass = self.workouttype record.save() + if self.uploadedtostrava: + record = create_or_update_syncrecord(self.user, self, + stravaid=self.uploadedtostrava, + ) + if self.uploadedtointervals: + record = create_or_update_syncrecord(self.user, self, + intervalsid= self.uploadedtointervals, + ) + + if self.uploadedtotp: + record = create_or_update_syncrecord(self.user, self, + tpid= self.uploadedtotp, + ) + if self.uploadedtonk: + record = create_or_update_syncrecord(self.user, self, + nkid= self.uploadedtonk, + ) + + if self.uploadedtosporttracks: + record = create_or_update_syncrecord(self.user, self, + sporttracksid=self.uploadedtosporttracks, + ) + + if self.uploadedtoc2: + record = create_or_update_syncrecord(self.user, self, + c2id= self.uploadedtoc2, + ) + + + super(Workout, self).save(*args, **kwargs) @classmethod @@ -4006,7 +4036,7 @@ def create_or_update_syncrecord(rower, workout, **kwargs): try: record.save() - except IntegrityError: + except (IntegrityError, ValueError): pass return record diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 581276cd..cf0a4f71 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ