def testtcxexport(self):
     csvfile = 'testdata/Speedcoach2example.csv'
     assert_equal(rowingdata.get_file_type(csvfile), 'speedcoach2')
     r = rowingdata.SpeedCoach2Parser(csvfile=csvfile)
     summarystring = r.summary()
     row = rowingdata.rowingdata(df=r.df)
     assert_equal(row.number_of_rows, 97)
     tcxfile = 'testdata/testtcx.tcx'
     row.exporttotcx(tcxfile)
     assert_equal(rowingdata.get_file_type(tcxfile), 'tcx')
     r2 = rowingdata.TCXParser(tcxfile)
     row = rowingdata.rowingdata(df=r.df)
     assert_equal(row.number_of_rows, 97)
 def testtcxexport(self):
     csvfile='testdata/Speedcoach2example.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'speedcoach2')
     r=rowingdata.SpeedCoach2Parser(csvfile=csvfile)
     summarystring = r.summary()
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,97)
     tcxfile = 'testdata/testtcx.tcx'
     row.exporttotcx(tcxfile)
     assert_equals(rowingdata.get_file_type(tcxfile),'tcx')
     r2 = rowingdata.TCXParser(tcxfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,97)
예제 #3
0
 def testergdata(self):
     csvfile='testdata/ergdata_example.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'ergdata')
     r=rowingdata.ErgDataParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,180)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,1992)
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),520)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #4
0
 def testmystery(self):
     csvfile='testdata/mystery.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'mystery')
     r=rowingdata.MysteryParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,4550)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,7478)
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),2325)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #5
0
 def testergstick(self):
     csvfile='testdata/ergstick.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'ergstick')
     r=rowingdata.ErgStickParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,2400)
     totaldist=row.df['cum_dist'].max()
     assert_equals(int(totaldist),4959)
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),1201)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #6
0
 def testspeedcoach(self):
     csvfile='testdata/speedcoachexample.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'speedcoach')
     r=rowingdata.speedcoachParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,476)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,9520)
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(totaltime,3176.5)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
 def test_check(self, name, filename, expected):
     f2='testdata/'+filename
     res=rowingdata.checkdatafiles.checkfile(f2)
     filetype = rowingdata.get_file_type(f2)
     if filetype  not in ['unknown','c2log']:
         assert_not_equal(res,0)
     if res != 0:
         for key,value in six.iteritems(res):
             if key != 'summary':
                 if expected[key] != 0:
                     assert_equals(value,expected[key])
             elif key == 'summary':
                 assert_not_equal(value,'')
예제 #8
0
 def testfit(self):
     fitfile='testdata/3x250m.fit'
     assert_equals(rowingdata.get_file_type(fitfile),'fit')
     r=rowingdata.FITParser(fitfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,94)
     totaldist=row.df['cum_dist'].max()
     assert_equals(int(totaldist),750)
     assert_equals(row.rowdatetime,datetime.datetime(2016,7,28,9,35,29,0,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(10*totaltime),4870)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],False)
예제 #9
0
 def testspeedcoach2v127(self):
     csvfile='testdata/SpeedCoach2Linkv1.27.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'speedcoach2')
     r=rowingdata.SpeedCoach2Parser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,1408)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,14344.5)
     assert_equals(row.rowdatetime,datetime.datetime(2016,11,5,9,2,3,200000,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(10*totaltime),45018)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #10
0
 def testspeedcoach2(self):
     csvfile='testdata/Speedcoach2example.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'speedcoach2')
     r=rowingdata.SpeedCoach2Parser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,97)
     totaldist=row.df['cum_dist'].max()
     assert_equals(int(10*totaldist),7516)
     assert_equals(row.rowdatetime,datetime.datetime(2016,7,28,11,35,1,500000,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),170)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #11
0
 def testrowprointervals(self):
     csvfile='testdata/RP_interval.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'rp')
     r=rowingdata.RowProParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,1674)
     totaldist=row.df['cum_dist'].max()
     assert_equals(int(totaldist),19026)
     assert_equals(row.rowdatetime,datetime.datetime(2016,1,12,19,23,10,878000,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),4800)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #12
0
 def testrowpro(self):
     csvfile='testdata/RP_testdata.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'rp')
     r=rowingdata.RowProParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,988)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,10000)
     assert_equals(row.rowdatetime,datetime.datetime(2016,3,15,19,49,48,863000,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(10*totaltime),22653)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #13
0
 def testboatcoach(self):
     csvfile='testdata/boatcoach.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'boatcoach')
     r=rowingdata.BoatCoachParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,119)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,499)
     assert_equals(row.rowdatetime,datetime.datetime(2016,11,28,8,37,2,0,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),118)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #14
0
 def testpainsleddesktop(self):
     csvfile='testdata/painsled_desktop_example.csv'
     assert_equals(rowingdata.get_file_type(csvfile),'painsleddesktop')
     r=rowingdata.painsledDesktopParser(csvfile=csvfile)
     row=rowingdata.rowingdata(df=r.df)
     assert_equals(row.number_of_rows,638)
     totaldist=row.df['cum_dist'].max()
     assert_equals(totaldist,7097)
     assert_equals(row.rowdatetime,datetime.datetime(2016,3,29,17,41,27,93000,utc))
     totaltime=row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
     assert_equals(int(totaltime),1802)
     checks = row.check_consistency()
     assert_equals(checks['velo_time_distance'],True)
예제 #15
0
 def test_check(self, name, filename, expected):
     f2 = 'testdata/' + filename
     res = rowingdata.checkdatafiles.checkfile(f2)
     filetype = rowingdata.get_file_type(f2)
     if filetype not in ['unknown', 'c2log']:
         assert_not_equal(res, 0)
     if res != 0:
         for key, value in six.iteritems(res):
             if key != 'summary':
                 if expected[key] != 0:
                     assert_equal(value, expected[key])
             elif key == 'summary':
                 assert_not_equal(value, '')
예제 #16
0
 def test_filetype(self):
     assert_equals(rowingdata.get_file_type('testdata/testdata.csv'),'csv')
예제 #17
0
 def test_filetype(self):
     assert_equal(rowingdata.get_file_type('testdata/testdata.csv'), 'csv')
예제 #18
0
def checkfile(f2, verbose=False):
    fileformat = rowingdata.get_file_type(f2)
    summary = 'a'
    notread = 1
    if verbose:
        print(fileformat)

    if len(fileformat) == 3 and fileformat[0] == 'zip':
        with zipfile.ZipFile(f2) as z:
            f = z.extract(z.namelist()[0], path='C:/Downloads')
            fileformat = fileformat[2]
            os.remove(f_to_be_deleted)

    if fileformat == 'unknown':
        return 0

    # handle non-Painsled
    if (fileformat != 'csv'):
        # handle RowPro:
        if (fileformat == 'rp'):
            row = rowingdata.RowProParser(f2)
            # handle TCX
        if (fileformat == 'tcx'):
            row = rowingdata.TCXParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle Mystery
        if (fileformat == 'mystery'):
            row = rowingdata.MysteryParser(f2)

        # handle Quiske
        if (fileformat == 'quiske'):
            row = rowingdata.QuiskeParser(f2)

        # handle RitmoTime
        if (fileformat == 'ritmotime'):
            row = rowingdata.RitmoTimeParser(f2)
            
        # handle TCX no HR
        if (fileformat == 'tcxnohr'):
            row = rowingdata.TCXParserNoHR(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle ErgData
        if (fileformat == 'ergdata'):
            row = rowingdata.ErgDataParser(f2)

        # handle CoxMate
        if (fileformat == 'coxmate'):
            row = rowingdata.CoxMateParser(f2)

        # handle BoatCoachOTW
        if (fileformat == 'boatcoachotw'):
            row = rowingdata.BoatCoachOTWParser(f2)

        # handle BoatCoach
        if (fileformat == 'boatcoach'):
            row = rowingdata.BoatCoachParser(f2)

        # handle painsled desktop
        if (fileformat == 'painsleddesktop'):
            row = rowingdata.painsledDesktopParser(f2)

        # handle speed coach GPS
        if (fileformat == 'speedcoach'):
            row = rowingdata.speedcoachParser(f2)

        # handle speed coach GPS 2
        if (fileformat == 'speedcoach2'):
            row = rowingdata.SpeedCoach2Parser(f2)
            summary = row.allstats()
            v = rowingdata.get_empower_firmware(f2)
            rig = rowingdata.get_empower_rigging(f2)

        if (fileformat == 'rowperfect3'):
            row = rowingdata.RowPerfectParser(f2)

        # handle ErgStick
        if (fileformat == 'ergstick'):
            row = rowingdata.ErgStickParser(f2)

        # handle Kinomap
        if (fileformat == 'kinomap'):
            row = rowingdata.KinoMapParser(f2)

        # handle FIT
        if (fileformat == 'fit'):
            row = rowingdata.FITParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle Humon
        if (fileformat == 'humon'):
            row = rowingdata.HumonParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0


        # handle workout log (no stroke data)
        if (fileformat == 'c2log'):
            return 0

            

        if notread:
            row = rowingdata.rowingdata(df=row.df)

    else:
        row = rowingdata.rowingdata(csvfile=f2)

    nr_of_rows = row.number_of_rows
    distmax = row.df['cum_dist'].max()
    timemax = row.df['TimeStamp (sec)'].max() - row.df['TimeStamp (sec)'].min()
    nrintervals = len(row.df[' lapIdx'].unique())
    mintime = row.df['TimeStamp (sec)'].min()
    maxtime = row.df['TimeStamp (sec)'].max()
    if verbose:
        print(("nr lines", row.number_of_rows))
        print(("data ", row.rowdatetime))
        print(("dist ", distmax))
        print(("Time ", timemax))
        print(("Nr intervals ", nrintervals))
        print(("Min time ",mintime))
        print(("Max time ",maxtime))

    res = row.intervalstats_values()
    int1time = res[0][0]
    int1dist = res[1][0]

    if verbose:
        print(("Interval 1 time ", int1time))
        print(("Interval 1 dist ", int1dist))

    y = row.rowdatetime.year
    m = row.rowdatetime.month
    d = row.rowdatetime.day
    h = row.rowdatetime.hour
    tz = row.rowdatetime.tzname()
    minute = row.rowdatetime.minute
    sec = row.rowdatetime.second

    results = {
        'type': fileformat,
        'nr_lines': nr_of_rows,
        'year': y,
        'month': m,
        'day': d,
        'hour': h,
        'minute': minute,
        'second': sec,
        'dist': int(distmax),
        'seconds': int(timemax),
        'nrintervals': nrintervals,
        'lap 1 time': int(int1time),
        'lap 1 dist': int(int1dist),
        'timezone': tz,
        'summary':summary,
    }

    return results
예제 #19
0
def checkfile(f2, verbose=False):
    fileformat = rowingdata.get_file_type(f2)
    summary = 'a'
    notread = 1
    if verbose:
        print(fileformat)

    if len(fileformat) == 3 and fileformat[0] == 'zip':
        with zipfile.ZipFile(f2) as z:
            f = z.extract(z.namelist()[0], path='C:/Downloads')
            fileformat = fileformat[2]
            os.remove(f_to_be_deleted)

    if fileformat == 'unknown':
        return 0

    # handle non-Painsled
    if (fileformat != 'csv'):
        # handle RowPro:
        if (fileformat == 'rp'):
            row = rowingdata.RowProParser(f2)
            # handle TCX
        if (fileformat == 'tcx'):
            row = rowingdata.TCXParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle Mystery
        if (fileformat == 'mystery'):
            row = rowingdata.MysteryParser(f2)

        # handle Quiske
        if (fileformat == 'quiske'):
            row = rowingdata.QuiskeParser(f2)

        # handle RitmoTime
        if (fileformat == 'ritmotime'):
            row = rowingdata.RitmoTimeParser(f2)

        # handle TCX no HR
        if (fileformat == 'tcxnohr'):
            row = rowingdata.TCXParserNoHR(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle ErgData
        if (fileformat == 'ergdata'):
            row = rowingdata.ErgDataParser(f2)

        # handle CoxMate
        if (fileformat == 'coxmate'):
            row = rowingdata.CoxMateParser(f2)

        # handle BoatCoachOTW
        if (fileformat == 'boatcoachotw'):
            row = rowingdata.BoatCoachOTWParser(f2)

        # handle BoatCoach
        if (fileformat == 'boatcoach'):
            row = rowingdata.BoatCoachParser(f2)

        # handle painsled desktop
        if (fileformat == 'painsleddesktop'):
            row = rowingdata.painsledDesktopParser(f2)

        # handle speed coach GPS
        if (fileformat == 'speedcoach'):
            row = rowingdata.speedcoachParser(f2)

        # handle speed coach GPS 2
        if (fileformat == 'speedcoach2'):
            row = rowingdata.SpeedCoach2Parser(f2)
            summary = row.allstats()
            v = rowingdata.get_empower_firmware(f2)
            rig = rowingdata.get_empower_rigging(f2)

        if (fileformat == 'rowperfect3'):
            row = rowingdata.RowPerfectParser(f2)

        # handle ErgStick
        if (fileformat == 'ergstick'):
            row = rowingdata.ErgStickParser(f2)

        # handle Kinomap
        if (fileformat == 'kinomap'):
            row = rowingdata.KinoMapParser(f2)

        if (fileformat == 'eth'):
            row = rowingdata.ETHParser(f2)

        if (fileformat == 'hero'):
            row = rowingdata.HeroParser(f2)

        # handle FIT
        if (fileformat == 'fit'):
            row = rowingdata.FITParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle Humon
        if (fileformat == 'humon'):
            row = rowingdata.HumonParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle nklinklogbook
        if (fileformat == 'nklinklogbook'):
            row = rowingdata.NKLiNKLogbookParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle smartrow
        if (fileformat == 'smartrow'):
            row = rowingdata.SmartRowParser(f2)
            row.write_csv(f2 + 'o.csv')
            row = rowingdata.rowingdata(csvfile=f2 + 'o.csv')
            os.remove(f2 + 'o.csv')
            notread = 0

        # handle workout log (no stroke data)
        if (fileformat == 'c2log'):
            return 0

        if notread:
            row = rowingdata.rowingdata(df=row.df)

    else:
        row = rowingdata.rowingdata(csvfile=f2)

    nr_of_rows = row.number_of_rows
    distmax = row.df['cum_dist'].max()
    timemax = row.df['TimeStamp (sec)'].max() - row.df['TimeStamp (sec)'].min()
    nrintervals = len(row.df[' lapIdx'].unique())
    mintime = row.df['TimeStamp (sec)'].min()
    maxtime = row.df['TimeStamp (sec)'].max()
    if verbose:
        print(("nr lines", row.number_of_rows))
        print(("data ", row.rowdatetime))
        print(("dist ", distmax))
        print(("Time ", timemax))
        print(("Nr intervals ", nrintervals))
        print(("Min time ", mintime))
        print(("Max time ", maxtime))

    res = row.intervalstats_values()
    int1time = res[0][0]
    int1dist = res[1][0]

    if verbose:
        print(("Interval 1 time ", int1time))
        print(("Interval 1 dist ", int1dist))

    y = row.rowdatetime.year
    m = row.rowdatetime.month
    d = row.rowdatetime.day
    h = row.rowdatetime.hour
    tz = row.rowdatetime.tzname()
    minute = row.rowdatetime.minute
    sec = row.rowdatetime.second

    results = {
        'type': fileformat,
        'nr_lines': nr_of_rows,
        'year': y,
        'month': m,
        'day': d,
        'hour': h,
        'minute': minute,
        'second': sec,
        'dist': int(distmax),
        'seconds': int(timemax),
        'nrintervals': nrintervals,
        'lap 1 time': int(int1time),
        'lap 1 dist': int(int1dist),
        'timezone': tz,
        'summary': summary,
    }

    return results