From 09d6d92cbb937f78282808b7300a1d620bda3afb Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 8 Dec 2016 17:02:06 +0100 Subject: [PATCH] repair stroke data --- rowers/dataprep.py | 35 +++++++++++++++++++ .../management/commands/repairstrokedata.py | 25 +++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 rowers/management/commands/repairstrokedata.py diff --git a/rowers/dataprep.py b/rowers/dataprep.py index dca076d2..1246d74d 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -13,6 +13,7 @@ import itertools from django.conf import settings from sqlalchemy import create_engine import sqlalchemy as sa +import sys user = settings.DATABASES['default']['USER'] password = settings.DATABASES['default']['PASSWORD'] @@ -79,6 +80,40 @@ def timedeltaconv(x): return dt +def compare_data(id): + row = Workout.objects.get(id=id) + f1 = row.csvfilename + rowdata = rdata(f1) + try: + l1 = len(rowdata.df) + except AttributeError: + l1 = 0 + + engine = create_engine(database_url, echo=False) + query = sa.text('SELECT COUNT(*) FROM strokedata WHERE workoutid={id};'.format( + id=id, + )) + with engine.connect() as conn, conn.begin(): + try: + res = conn.execute(query) + l2 = res.fetchall()[0][0] + except: + print "Database Locked" + conn.close() + engine.dispose() + return l1==l2 + +def repair_data(verbose=False): + ws = Workout.objects.all() + for w in ws: + if verbose: + sys.stdout.write(".") + if not compare_data(w.id): + if verbose: + print w.id + rowdata = rdata(w.csvfilename) + update_strokedata(w.id,rowdata.df) + def rdata(file,rower=rrower()): try: res = rrdata(file,rower=rower) diff --git a/rowers/management/commands/repairstrokedata.py b/rowers/management/commands/repairstrokedata.py new file mode 100644 index 00000000..c6400461 --- /dev/null +++ b/rowers/management/commands/repairstrokedata.py @@ -0,0 +1,25 @@ +#!/srv/venv/bin/python +import sys +import os +# If you find a solution that does not need the two paths, please comment! +sys.path.append('$path_to_root_of_project$') +sys.path.append('$path_to_root_of_project$/$project_name$') + +os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' + +from django.core.management.base import BaseCommand, CommandError +from django.conf import settings +#from rowers.mailprocessing import processattachments +import time +from django.conf import settings +from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage,AdvancedWorkoutForm +from django.core.files.base import ContentFile + +from rowsandall_app.settings import BASE_DIR + +from rowers.dataprep import * + +class Command(BaseCommand): + def handle(self, *args, **options): + repair_data(verbose=True) + self.stdout.write(self.style.SUCCESS('Successfully cleaned data'))