Merge branch 'feature/python3' into develop
This commit is contained in:
@@ -1,574 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="Oregon 400t" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd"><metadata><link href="http://www.garmin.com"><text>Garmin International</text></link><time>2016-05-20T15:41:26</time></metadata><trk><name>Export by rowingdata</name><trkseg> <trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:26+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:29.238150+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:32.148290+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:35.269000+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:38.152180+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:41.148270+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:44.148910+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:46.908250+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:49.819010+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:52.942510+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:55.639670+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:41:58.370000+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:01.188270+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:04.008300+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:06.888990+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:09.678900+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:12.469140+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:15.199010+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:17.963080+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:20.658340+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:23.538800+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:26.269790+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:28.848350+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:31.729550+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:34.398400+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:37.038360+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:39.499250+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:42.349070+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:45.079070+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:47.752890+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:50.452350+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:53.182630+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:55.789410+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:42:58.671890+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:01.338860+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:04.068490+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:06.862620+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:09.618500+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:12.379160+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:15.229200+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:17.963150+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:20.692490+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:23.628520+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:26.329210+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:29.148960+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:31.668570+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:34.490920+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:37.369250+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:40.189230+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:42.798860+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:45.708750+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:48.318590+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:51.199500+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:53.869290+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:56.572490+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:43:59.212410+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:01.912890+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:04.459350+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:07.249360+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:09.949930+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:12.619870+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:15.378800+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:18.049420+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:20.719440+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:23.298970+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:26.178820+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:28.669980+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:31.429270+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:34.042790+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:36.589070+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:39.412800+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:42.078870+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:44.783760+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:47.450710+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:50.149400+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:52.789720+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:55.429750+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:44:58.069700+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:00.742790+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:03.442700+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:06.139610+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:08.689490+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:11.479530+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:14.119610+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:16.792860+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:19.368950+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:22.158960+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:24.889580+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:27.558940+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:30.469760+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:33.259860+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:36.079590+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:38.899560+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:41.689980+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:44.568940+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:47.329670+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:50.149560+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:52.969660+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:55.879910+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:45:58.789690+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:01.729660+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:04.669610+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:07.549730+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:10.458930+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:13.488980+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:16.429320+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:19.519650+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:22.459630+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:25.338880+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:28.459530+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:31.401590+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:34.339560+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:37.309450+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:40.098920+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:43.039950+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:46.039490+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:48.979630+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:51.949590+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:54.709590+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:46:57.589710+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:00.503120+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:03.408950+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:06.323410+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:09.229670+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:12.198960+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:15.079930+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:17.989660+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:20.959680+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:23.869730+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:26.782970+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:29.688910+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:32.539570+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:35.449720+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:38.329080+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:41.148960+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:44.088880+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:47.150600+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:50.029750+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:52.998850+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:55.880360+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:47:58.789400+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:01.639760+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:04.492770+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:07.429530+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:10.373270+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:13.309500+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:16.279570+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:19.160740+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:21.948820+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:25.039520+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:27.949340+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:30.890880+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:33.648790+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:36.770050+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:39.499600+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:42.559140+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:45.439020+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:48.439810+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:51.379570+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:54.259600+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:48:57.139300+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:00.049550+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:02.838790+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:05.839540+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:08.749400+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:11.689540+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:14.538900+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:17.389440+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:20.058880+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:23.059530+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:25.880610+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:28.608730+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:31.582600+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:34.278700+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:37.068660+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:40.039460+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:42.889790+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:45.772580+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:48.708690+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:51.679450+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:54.499470+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:49:57.409440+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:00.439330+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:03.408680+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:06.378680+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:09.168860+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:12.229650+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:15.138650+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:18.049470+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:20.959460+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="0.0" lon="0.0">
|
|
||||||
<time>2016-05-20T13:50:23.242360+00:00</time>
|
|
||||||
</trkpt>
|
|
||||||
</trkseg></trk></gpx>
|
|
||||||
+5
-1
@@ -1,4 +1,8 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
|
||||||
from rowers.celery import app as celery_app
|
from rowers.celery import app as celery_app
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth.admin import UserAdmin
|
from django.contrib.auth.admin import UserAdmin
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import braintree
|
import braintree
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
import datetime
|
import datetime
|
||||||
|
|||||||
+6
-1
@@ -1,4 +1,9 @@
|
|||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
|
||||||
# The interactions with the Concept2 logbook API
|
# The interactions with the Concept2 logbook API
|
||||||
# All C2 related functions should be defined here
|
# All C2 related functions should be defined here
|
||||||
# (There is still some stuff defined directly in views.py. Need to
|
# (There is still some stuff defined directly in views.py. Need to
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf import settings # import the settings file
|
from django.conf import settings # import the settings file
|
||||||
|
|
||||||
def braintree_merchant(request):
|
def braintree_merchant(request):
|
||||||
|
|||||||
+5
-1
@@ -1,4 +1,8 @@
|
|||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# All the Courses related methods
|
# All the Courses related methods
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
# low level methods
|
# low level methods
|
||||||
def coordinate_in_path(latitude,longitude, p):
|
def coordinate_in_path(latitude,longitude, p):
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
user = settings.DATABASES['default']['USER']
|
user = settings.DATABASES['default']['USER']
|
||||||
|
|||||||
+11
-3
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# All the data preparation, data cleaning and data mangling should
|
# All the data preparation, data cleaning and data mangling should
|
||||||
# be defined here
|
# be defined here
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
@@ -532,7 +537,10 @@ def getstatsfields():
|
|||||||
fielddict.pop('hr_bottom')
|
fielddict.pop('hr_bottom')
|
||||||
fielddict.pop('cumdist')
|
fielddict.pop('cumdist')
|
||||||
|
|
||||||
fieldlist = [field for field, value in fielddict.iteritems()]
|
try:
|
||||||
|
fieldlist = [field for field, value in fielddict.iteritems()]
|
||||||
|
except AttributeError:
|
||||||
|
fieldlist = [field for field, value in fielddict.items()]
|
||||||
|
|
||||||
return fieldlist, fielddict
|
return fieldlist, fielddict
|
||||||
|
|
||||||
@@ -905,7 +913,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
|||||||
try:
|
try:
|
||||||
checks = row.check_consistency()
|
checks = row.check_consistency()
|
||||||
allchecks = 1
|
allchecks = 1
|
||||||
for key, value in checks.iteritems():
|
for key, value in checks.items():
|
||||||
if not value:
|
if not value:
|
||||||
allchecks = 0
|
allchecks = 0
|
||||||
if consistencychecks:
|
if consistencychecks:
|
||||||
@@ -2085,7 +2093,7 @@ def dataprep(rowdatadf, id=0, bands=True, barchart=True, otwpower=True,
|
|||||||
if rowdatadf.empty:
|
if rowdatadf.empty:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
rowdatadf.set_index([range(len(rowdatadf))], inplace=True)
|
#rowdatadf.set_index([range(len(rowdatadf))], inplace=True)
|
||||||
t = rowdatadf.loc[:, 'TimeStamp (sec)']
|
t = rowdatadf.loc[:, 'TimeStamp (sec)']
|
||||||
t = pd.Series(t - rowdatadf.loc[:, 'TimeStamp (sec)'].iloc[0])
|
t = pd.Series(t - rowdatadf.loc[:, 'TimeStamp (sec)'].iloc[0])
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# This is Data prep used for testing purposes (no Django environment)
|
# This is Data prep used for testing purposes (no Django environment)
|
||||||
# Uses the debug SQLite database for stroke data
|
# Uses the debug SQLite database for stroke data
|
||||||
from rowingdata import rowingdata as rrdata
|
from rowingdata import rowingdata as rrdata
|
||||||
|
|||||||
+6
-1
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.interpolate import griddata
|
from scipy.interpolate import griddata
|
||||||
@@ -259,7 +264,7 @@ def getcp(dfgrouped,logarr):
|
|||||||
length = len(ww)
|
length = len(ww)
|
||||||
dt = []
|
dt = []
|
||||||
cpw = []
|
cpw = []
|
||||||
for i in xrange(length-2):
|
for i in range(length-2):
|
||||||
deltat,wmax = getmaxwattinterval(tt,ww,i)
|
deltat,wmax = getmaxwattinterval(tt,ww,i)
|
||||||
|
|
||||||
if not np.isnan(deltat) and not np.isnan(wmax):
|
if not np.isnan(deltat) and not np.isnan(wmax):
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth.decorators import login_required,user_passes_test
|
from django.contrib.auth.decorators import login_required,user_passes_test
|
||||||
|
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import gc
|
import gc
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.admin.widgets import FilteredSelectMultiple
|
from django.contrib.admin.widgets import FilteredSelectMultiple
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality to connect to SportTracks
|
# All the functionality to connect to SportTracks
|
||||||
|
|
||||||
|
|||||||
+78
-43
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import colorsys
|
import colorsys
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Workout, User, Rower, WorkoutForm,RowerForm,
|
Workout, User, Rower, WorkoutForm,RowerForm,
|
||||||
@@ -15,19 +20,24 @@ from bokeh.palettes import Dark2_8 as palette
|
|||||||
import itertools
|
import itertools
|
||||||
from bokeh.plotting import figure, ColumnDataSource, Figure,curdoc
|
from bokeh.plotting import figure, ColumnDataSource, Figure,curdoc
|
||||||
from bokeh.models import CustomJS,Slider, TextInput,BoxAnnotation
|
from bokeh.models import CustomJS,Slider, TextInput,BoxAnnotation
|
||||||
from bokeh.charts import Histogram,HeatMap,Area,BoxPlot,Bar
|
try:
|
||||||
from bokeh.charts.attributes import CatAttr
|
from bokeh.charts import Histogram,HeatMap,Area,BoxPlot,Bar
|
||||||
|
from bokeh.charts.attributes import CatAttr
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
from bokeh.resources import CDN,INLINE
|
from bokeh.resources import CDN,INLINE
|
||||||
from bokeh.embed import components
|
from bokeh.embed import components
|
||||||
from bokeh.layouts import layout,widgetbox
|
from bokeh.layouts import layout,widgetbox
|
||||||
from bokeh.layouts import row as layoutrow
|
from bokeh.layouts import row as layoutrow
|
||||||
from bokeh.layouts import column as layoutcolumn
|
from bokeh.layouts import column as layoutcolumn
|
||||||
from bokeh.models import LinearAxis,LogAxis,Range1d,DatetimeTickFormatter,HoverTool
|
from bokeh.models import LinearAxis,LogAxis,Range1d,DatetimeTickFormatter,HoverTool
|
||||||
from bokeh.io import output_file, show, vplot
|
#from bokeh.io import output_file, show, vplot
|
||||||
from bokeh.models import (
|
from bokeh.models import (
|
||||||
GMapPlot, GMapOptions, ColumnDataSource, Circle,
|
GMapPlot, GMapOptions, ColumnDataSource, Circle,
|
||||||
DataRange1d, PanTool, WheelZoomTool, BoxSelectTool,
|
DataRange1d, PanTool, WheelZoomTool, BoxSelectTool,
|
||||||
SaveTool, ResizeTool, ResetTool, TapTool,CrosshairTool,BoxZoomTool,
|
SaveTool, # ResizeTool,
|
||||||
|
ResetTool, TapTool,CrosshairTool,BoxZoomTool,
|
||||||
Span, Label
|
Span, Label
|
||||||
)
|
)
|
||||||
from bokeh.models.glyphs import ImageURL
|
from bokeh.models.glyphs import ImageURL
|
||||||
@@ -173,7 +183,7 @@ def interactive_boxchart(datadf,fieldname,extratitle=''):
|
|||||||
if datadf.empty:
|
if datadf.empty:
|
||||||
return '','It looks like there are no data matching your filter'
|
return '','It looks like there are no data matching your filter'
|
||||||
|
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,resize,hover'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,hover'
|
||||||
|
|
||||||
plot = BoxPlot(datadf, values=fieldname, label='date',
|
plot = BoxPlot(datadf, values=fieldname, label='date',
|
||||||
legend=False,
|
legend=False,
|
||||||
@@ -236,6 +246,12 @@ def interactive_boxchart(datadf,fieldname,extratitle=''):
|
|||||||
|
|
||||||
return script,div
|
return script,div
|
||||||
|
|
||||||
|
try:
|
||||||
|
import holoviews as hv
|
||||||
|
hv.extension('bokeh')
|
||||||
|
renderer = hv.renderer('bokeh')
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
def interactive_activitychart(workouts,startdate,enddate,stack='type'):
|
def interactive_activitychart(workouts,startdate,enddate,stack='type'):
|
||||||
|
|
||||||
@@ -311,8 +327,8 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
|
|||||||
df.sort_values('date_sorting',inplace=True)
|
df.sort_values('date_sorting',inplace=True)
|
||||||
|
|
||||||
|
|
||||||
p = Bar(df,values='duration',
|
p = hv.Bars(df,values='duration',
|
||||||
label = CatAttr(columns=['date'], sort=False),
|
# label = CatAttr(columns=['date'], sort=False),
|
||||||
xlabel='Date',
|
xlabel='Date',
|
||||||
ylabel='Time',
|
ylabel='Time',
|
||||||
title='Activity {d1} to {d2}'.format(
|
title='Activity {d1} to {d2}'.format(
|
||||||
@@ -326,29 +342,34 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
for legend in p.legend:
|
# for legend in p.legend:
|
||||||
new_items = []
|
# new_items = []
|
||||||
for legend_item in legend.items:
|
# for legend_item in legend.items:
|
||||||
it = legend_item.label['value']
|
# it = legend_item.label['value']
|
||||||
tot = df[df[stack]==it].duration.sum()
|
# tot = df[df[stack]==it].duration.sum()
|
||||||
if tot != 0:
|
# if tot != 0:
|
||||||
new_items.append(legend_item)
|
# new_items.append(legend_item)
|
||||||
legend.items = new_items
|
# legend.items = new_items
|
||||||
|
|
||||||
|
|
||||||
p.legend.location = "top_left"
|
# p.legend.location = "top_left"
|
||||||
p.legend.background_fill_alpha = 0.7
|
# p.legend.background_fill_alpha = 0.7
|
||||||
#p.sizing_mode = 'scale_width'
|
#p.sizing_mode = 'scale_width'
|
||||||
p.sizing_mode = 'stretch_both'
|
#p.sizing_mode = 'stretch_both'
|
||||||
|
|
||||||
p.yaxis.axis_label = 'Minutes'
|
#p.yaxis.axis_label = 'Minutes'
|
||||||
|
|
||||||
script, div = components(p)
|
try:
|
||||||
|
p = renderer.get_plot(p).state
|
||||||
|
script, div = components(p)
|
||||||
|
except:
|
||||||
|
script = ''
|
||||||
|
div = ''
|
||||||
|
|
||||||
return script,div
|
return script,div
|
||||||
|
|
||||||
def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
ids = [int(w.id) for w in theworkouts]
|
ids = [int(w.id) for w in theworkouts]
|
||||||
|
|
||||||
@@ -741,7 +762,7 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower'):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
plot = Figure(tools=TOOLS,toolbar_location="above",
|
plot = Figure(tools=TOOLS,toolbar_location="above",
|
||||||
toolbar_sticky=False,width=900,
|
toolbar_sticky=False,width=900,
|
||||||
@@ -805,7 +826,7 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower'):
|
|||||||
return [script,div]
|
return [script,div]
|
||||||
|
|
||||||
def interactive_histoall(theworkouts):
|
def interactive_histoall(theworkouts):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
ids = [int(w.id) for w in theworkouts]
|
ids = [int(w.id) for w in theworkouts]
|
||||||
|
|
||||||
@@ -890,7 +911,12 @@ def interactive_histoall(theworkouts):
|
|||||||
axis_label="Cumulative % of strokes"),'right')
|
axis_label="Cumulative % of strokes"),'right')
|
||||||
|
|
||||||
plot.sizing_mode = 'scale_width'
|
plot.sizing_mode = 'scale_width'
|
||||||
script, div = components(plot)
|
try:
|
||||||
|
script, div = components(plot)
|
||||||
|
except ValueError:
|
||||||
|
script = ''
|
||||||
|
div = ''
|
||||||
|
|
||||||
return [script,div]
|
return [script,div]
|
||||||
|
|
||||||
def course_map(course):
|
def course_map(course):
|
||||||
@@ -1484,7 +1510,7 @@ def interactive_agegroupcpchart(age,normalized=False):
|
|||||||
x_axis_type = 'log'
|
x_axis_type = 'log'
|
||||||
y_axis_type = 'linear'
|
y_axis_type = 'linear'
|
||||||
|
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
plot = Figure(plot_width=900,x_axis_type=x_axis_type,
|
plot = Figure(plot_width=900,x_axis_type=x_axis_type,
|
||||||
tools=TOOLS)
|
tools=TOOLS)
|
||||||
@@ -1531,7 +1557,7 @@ def interactive_otwcpchart(powerdf,promember=0,rowername=""):
|
|||||||
powerdf = powerdf[~(powerdf == 0).any(axis=1)]
|
powerdf = powerdf[~(powerdf == 0).any(axis=1)]
|
||||||
# plot tools
|
# plot tools
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -1667,7 +1693,7 @@ def interactive_agegroup_plot(df,distance=2000,duration=None,
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
plot = Figure(tools=TOOLS,plot_width=900)
|
plot = Figure(tools=TOOLS,plot_width=900)
|
||||||
plot.sizing_mode='scale_width'
|
plot.sizing_mode='scale_width'
|
||||||
@@ -1699,7 +1725,7 @@ def interactive_cpchart(rower,thedistances,thesecs,theavpower,
|
|||||||
message = 0
|
message = 0
|
||||||
# plot tools
|
# plot tools
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -2033,7 +2059,7 @@ def interactive_windchart(id=0,promember=0):
|
|||||||
|
|
||||||
# plot tools
|
# plot tools
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
|
|
||||||
@@ -2103,7 +2129,7 @@ def interactive_streamchart(id=0,promember=0):
|
|||||||
|
|
||||||
# plot tools
|
# plot tools
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
|
|
||||||
@@ -2130,7 +2156,7 @@ def interactive_streamchart(id=0,promember=0):
|
|||||||
def interactive_chart(id=0,promember=0,intervaldata = {}):
|
def interactive_chart(id=0,promember=0,intervaldata = {}):
|
||||||
# Add hover to this comma-separated string and see what changes
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -2338,7 +2364,7 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap'
|
||||||
|
|
||||||
if groupby != 'date':
|
if groupby != 'date':
|
||||||
hover = HoverTool(names=['data'],
|
hover = HoverTool(names=['data'],
|
||||||
@@ -2358,7 +2384,7 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
|
|||||||
|
|
||||||
hover.mode = 'mouse'
|
hover.mode = 'mouse'
|
||||||
TOOLS = [SaveTool(),PanTool(),BoxZoomTool(),WheelZoomTool(),
|
TOOLS = [SaveTool(),PanTool(),BoxZoomTool(),WheelZoomTool(),
|
||||||
ResetTool(),TapTool(),ResizeTool(),hover]
|
ResetTool(),TapTool(),hover]
|
||||||
|
|
||||||
|
|
||||||
plot = Figure(x_axis_type=x_axis_type,y_axis_type=y_axis_type,
|
plot = Figure(x_axis_type=x_axis_type,y_axis_type=y_axis_type,
|
||||||
@@ -2586,7 +2612,7 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
|
|
||||||
# Add hover to this comma-separated string and see what changes
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
|
|
||||||
@@ -3001,7 +3027,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
|
|
||||||
# Add hover to this comma-separated string and see what changes
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -3612,7 +3638,7 @@ def interactive_bar_chart(id=0,promember=0):
|
|||||||
|
|
||||||
# Add hover to this comma-separated string and see what changes
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -3771,7 +3797,7 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line',
|
|||||||
|
|
||||||
# Add hover to this comma-separated string and see what changes
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,crosshair'
|
||||||
|
|
||||||
@@ -3815,8 +3841,13 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line',
|
|||||||
|
|
||||||
cntr = 0
|
cntr = 0
|
||||||
l1 = []
|
l1 = []
|
||||||
|
|
||||||
for id,color in itertools.izip(ids,colors):
|
try:
|
||||||
|
items = itertools.izip(ids,colors)
|
||||||
|
except AttributeError:
|
||||||
|
items = zip(ids,colors)
|
||||||
|
|
||||||
|
for id,color in items:
|
||||||
group = datadf[datadf['workoutid']==int(id)].copy()
|
group = datadf[datadf['workoutid']==int(id)].copy()
|
||||||
|
|
||||||
|
|
||||||
@@ -3993,7 +4024,7 @@ def interactive_comparison_chart(id1=0,id2=0,xparam='distance',yparam='spm',
|
|||||||
spm2 = rowdata2.loc[:,'spm']
|
spm2 = rowdata2.loc[:,'spm']
|
||||||
|
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -4158,7 +4189,7 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0):
|
|||||||
|
|
||||||
# Add hover to this comma-separated string and see what changes
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
else:
|
else:
|
||||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -4226,7 +4257,11 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0):
|
|||||||
|
|
||||||
hover.mode = 'mouse'
|
hover.mode = 'mouse'
|
||||||
|
|
||||||
script, div = components(plot)
|
try:
|
||||||
|
script, div = components(plot)
|
||||||
|
except:
|
||||||
|
script = ''
|
||||||
|
div = ''
|
||||||
|
|
||||||
return [script,div]
|
return [script,div]
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import time
|
import time
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# Processes emails sent to workouts@rowsandall.com
|
# Processes emails sent to workouts@rowsandall.com
|
||||||
""" Processes emails sent to workouts@rowsandall.com """
|
""" Processes emails sent to workouts@rowsandall.com """
|
||||||
import shutil
|
import shutil
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
from rowers.utils import lbstoN
|
from rowers.utils import lbstoN
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from rowers.models import Workout, PowerTimeFitnessMetric, Rower
|
from rowers.models import Workout, PowerTimeFitnessMetric, Rower
|
||||||
import datetime
|
import datetime
|
||||||
from utils import myqueue
|
from rowers.utils import myqueue
|
||||||
import django_rq
|
import django_rq
|
||||||
queue = django_rq.get_queue('default')
|
queue = django_rq.get_queue('default')
|
||||||
from rowers.tasks import handle_updatefitnessmetric,handle_sendemail_expired
|
from rowers.tasks import handle_updatefitnessmetric,handle_sendemail_expired
|
||||||
|
|||||||
+43
-22
@@ -1,5 +1,11 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from django.db import models,IntegrityError
|
from django.db import models,IntegrityError
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.validators import validate_email
|
from django.core.validators import validate_email
|
||||||
@@ -270,6 +276,7 @@ class PowerTimeFitnessMetric(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'powertimefitnessmetric'
|
db_table = 'powertimefitnessmetric'
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class C2WorldClassAgePerformance(models.Model):
|
class C2WorldClassAgePerformance(models.Model):
|
||||||
weightcategories = (
|
weightcategories = (
|
||||||
('hwt','heavy-weight'),
|
('hwt','heavy-weight'),
|
||||||
@@ -300,7 +307,7 @@ class C2WorldClassAgePerformance(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('age','sex','weightcategory','distance')
|
unique_together = ('age','sex','weightcategory','distance')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
thestring = '{s} {w} {n} age {a} ({season}) {distance}m {duration} seconds'.format(
|
thestring = '{s} {w} {n} age {a} ({season}) {distance}m {duration} seconds'.format(
|
||||||
s = self.sex,
|
s = self.sex,
|
||||||
w = self.weightcategory,
|
w = self.weightcategory,
|
||||||
@@ -321,6 +328,7 @@ def is_not_basic(user):
|
|||||||
|
|
||||||
|
|
||||||
# For future Team functionality
|
# For future Team functionality
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Team(models.Model):
|
class Team(models.Model):
|
||||||
choices = (
|
choices = (
|
||||||
('private','private'),
|
('private','private'),
|
||||||
@@ -341,7 +349,7 @@ class Team(models.Model):
|
|||||||
viewing = models.CharField(max_length=30,choices=viewchoices,default='allmembers',verbose_name='Sharing Behavior')
|
viewing = models.CharField(max_length=30,choices=viewchoices,default='allmembers',verbose_name='Sharing Behavior')
|
||||||
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
@@ -606,6 +614,7 @@ paymentprocessors = (
|
|||||||
('braintree','BrainTree')
|
('braintree','BrainTree')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class PaidPlan(models.Model):
|
class PaidPlan(models.Model):
|
||||||
shortname = models.CharField(max_length=50,choices=plans)
|
shortname = models.CharField(max_length=50,choices=plans)
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
@@ -623,7 +632,7 @@ class PaidPlan(models.Model):
|
|||||||
|
|
||||||
clubsize = models.IntegerField(default=0)
|
clubsize = models.IntegerField(default=0)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return '{name} - {shortname} at {price:.2f} EURO ({paymenttype} payment)'.format(
|
return '{name} - {shortname} at {price:.2f} EURO ({paymenttype} payment)'.format(
|
||||||
name = self.name,
|
name = self.name,
|
||||||
shortname = self.shortname,
|
shortname = self.shortname,
|
||||||
@@ -632,16 +641,18 @@ class PaidPlan(models.Model):
|
|||||||
paymentprocessor = self.paymentprocessor,
|
paymentprocessor = self.paymentprocessor,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class CoachingGroup(models.Model):
|
class CoachingGroup(models.Model):
|
||||||
name = models.CharField(default='group',max_length=30,null=True,blank=True)
|
name = models.CharField(default='group',max_length=30,null=True,blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return 'Coaching Group {id}: {name}'.format(
|
return 'Coaching Group {id}: {name}'.format(
|
||||||
id = self.pk,
|
id = self.pk,
|
||||||
name = self.name
|
name = self.name
|
||||||
)
|
)
|
||||||
|
|
||||||
# Extension of User with rowing specific data
|
# Extension of User with rowing specific data
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Rower(models.Model):
|
class Rower(models.Model):
|
||||||
adaptivetypes = mytypes.adaptivetypes
|
adaptivetypes = mytypes.adaptivetypes
|
||||||
stravatypes = (
|
stravatypes = (
|
||||||
@@ -858,9 +869,6 @@ class Rower(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.user.first_name+' '+self.user.last_name
|
return self.user.first_name+' '+self.user.last_name
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return self.user.first_name+' '+self.user.last_name
|
|
||||||
|
|
||||||
def clean_email(self):
|
def clean_email(self):
|
||||||
return self.user.email.lower()
|
return self.user.email.lower()
|
||||||
@@ -1095,13 +1103,14 @@ timezones = (
|
|||||||
|
|
||||||
# models related to geo data (points, polygon, courses)
|
# models related to geo data (points, polygon, courses)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class GeoCourse(models.Model):
|
class GeoCourse(models.Model):
|
||||||
manager = models.ForeignKey(Rower,null=True,on_delete=models.SET_NULL)
|
manager = models.ForeignKey(Rower,null=True,on_delete=models.SET_NULL)
|
||||||
distance = models.IntegerField(default=0)
|
distance = models.IntegerField(default=0)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
country = models.CharField(max_length=150,blank=True)
|
country = models.CharField(max_length=150,blank=True)
|
||||||
notes = models.CharField(blank=True,max_length=200,verbose_name='Course Notes')
|
notes = models.CharField(blank=True,max_length=200,verbose_name='Course Notes')
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
name = self.name
|
name = self.name
|
||||||
country = self.country
|
country = self.country
|
||||||
d = self.distance
|
d = self.distance
|
||||||
@@ -1125,12 +1134,13 @@ class GeoCourseEditForm(ModelForm):
|
|||||||
'notes': forms.Textarea,
|
'notes': forms.Textarea,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class GeoPolygon(models.Model):
|
class GeoPolygon(models.Model):
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE)
|
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE)
|
||||||
order_in_course = models.IntegerField(default=0)
|
order_in_course = models.IntegerField(default=0)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
name = self.name
|
name = self.name
|
||||||
coursename = self.course.name
|
coursename = self.course.name
|
||||||
|
|
||||||
@@ -1165,7 +1175,7 @@ class TrainingTarget(models.Model):
|
|||||||
default=half_year_from_now)
|
default=half_year_from_now)
|
||||||
notes = models.TextField(max_length=300,blank=True)
|
notes = models.TextField(max_length=300,blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
date = self.date
|
date = self.date
|
||||||
name = self.name
|
name = self.name
|
||||||
id = self.pk
|
id = self.pk
|
||||||
@@ -1217,7 +1227,7 @@ class TrainingTargetForm(ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class TrainingPlan(models.Model):
|
class TrainingPlan(models.Model):
|
||||||
|
|
||||||
statuschoices = (
|
statuschoices = (
|
||||||
@@ -1235,7 +1245,7 @@ class TrainingPlan(models.Model):
|
|||||||
enddate = models.DateField(
|
enddate = models.DateField(
|
||||||
default=half_year_from_now)
|
default=half_year_from_now)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
name = self.name
|
name = self.name
|
||||||
startdate = self.startdate
|
startdate = self.startdate
|
||||||
enddate = self.enddate
|
enddate = self.enddate
|
||||||
@@ -1599,6 +1609,7 @@ def macrocyclecheckdates(plan):
|
|||||||
pass
|
pass
|
||||||
cycles = cycles[1:]
|
cycles = cycles[1:]
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class TrainingMacroCycle(models.Model):
|
class TrainingMacroCycle(models.Model):
|
||||||
plan = models.ForeignKey(TrainingPlan,on_delete=models.CASCADE)
|
plan = models.ForeignKey(TrainingPlan,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
@@ -1621,7 +1632,7 @@ class TrainingMacroCycle(models.Model):
|
|||||||
actualrscore = models.IntegerField(default=0,verbose_name='Actual rScore')
|
actualrscore = models.IntegerField(default=0,verbose_name='Actual rScore')
|
||||||
actualtrimp = models.IntegerField(default=0,verbose_name='Actual TRIMP')
|
actualtrimp = models.IntegerField(default=0,verbose_name='Actual TRIMP')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
stri = 'Macro Cycle - {n} ({sd} - {ed})'.format(
|
stri = 'Macro Cycle - {n} ({sd} - {ed})'.format(
|
||||||
n = self.name,
|
n = self.name,
|
||||||
sd = self.startdate,
|
sd = self.startdate,
|
||||||
@@ -1687,6 +1698,7 @@ class TrainingMacroCycleForm(ModelForm):
|
|||||||
'enddate': AdminDateWidget()
|
'enddate': AdminDateWidget()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class TrainingMesoCycle(models.Model):
|
class TrainingMesoCycle(models.Model):
|
||||||
plan = models.ForeignKey(TrainingMacroCycle,on_delete=models.CASCADE)
|
plan = models.ForeignKey(TrainingMacroCycle,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
@@ -1709,7 +1721,7 @@ class TrainingMesoCycle(models.Model):
|
|||||||
actualtrimp = models.IntegerField(default=0,verbose_name='Actual TRIMP')
|
actualtrimp = models.IntegerField(default=0,verbose_name='Actual TRIMP')
|
||||||
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
stri = 'Meso Cycle - {n} ({sd} - {ed})'.format(
|
stri = 'Meso Cycle - {n} ({sd} - {ed})'.format(
|
||||||
n = self.name,
|
n = self.name,
|
||||||
sd = self.startdate,
|
sd = self.startdate,
|
||||||
@@ -1763,6 +1775,7 @@ class TrainingMesoCycle(models.Model):
|
|||||||
createmicrofillers(self)
|
createmicrofillers(self)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class TrainingMicroCycle(models.Model):
|
class TrainingMicroCycle(models.Model):
|
||||||
plan = models.ForeignKey(TrainingMesoCycle,on_delete=models.CASCADE)
|
plan = models.ForeignKey(TrainingMesoCycle,on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
@@ -1787,7 +1800,7 @@ class TrainingMicroCycle(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
stri = 'Micro Cycle - {n} ({sd} - {ed})'.format(
|
stri = 'Micro Cycle - {n} ({sd} - {ed})'.format(
|
||||||
n = self.name,
|
n = self.name,
|
||||||
sd = self.startdate,
|
sd = self.startdate,
|
||||||
@@ -1858,6 +1871,7 @@ regularsessiontypechoices = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
# model for Planned Session (Workout, Challenge, Test)
|
# model for Planned Session (Workout, Challenge, Test)
|
||||||
|
@python_2_unicode_compatible
|
||||||
class PlannedSession(models.Model):
|
class PlannedSession(models.Model):
|
||||||
|
|
||||||
sessiontypechoices = (
|
sessiontypechoices = (
|
||||||
@@ -1960,7 +1974,7 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
hasranking = models.BooleanField(default=False)
|
hasranking = models.BooleanField(default=False)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
|
|
||||||
name = self.name
|
name = self.name
|
||||||
startdate = self.startdate
|
startdate = self.startdate
|
||||||
@@ -2036,6 +2050,7 @@ registerchoices = (
|
|||||||
('manual','Manual - select below'),
|
('manual','Manual - select below'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class VirtualRace(PlannedSession):
|
class VirtualRace(PlannedSession):
|
||||||
# has_registration = models.BooleanField(default=False)
|
# has_registration = models.BooleanField(default=False)
|
||||||
registration_form = models.CharField(
|
registration_form = models.CharField(
|
||||||
@@ -2065,7 +2080,7 @@ class VirtualRace(PlannedSession):
|
|||||||
contact_email = models.EmailField(max_length=254,
|
contact_email = models.EmailField(max_length=254,
|
||||||
validators=[validate_email],blank=True)
|
validators=[validate_email],blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
|
|
||||||
name = self.name
|
name = self.name
|
||||||
startdate = self.startdate
|
startdate = self.startdate
|
||||||
@@ -2486,6 +2501,7 @@ class PlannedSessionFormSmall(ModelForm):
|
|||||||
boattypes = mytypes.boattypes
|
boattypes = mytypes.boattypes
|
||||||
|
|
||||||
# Workout
|
# Workout
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Workout(models.Model):
|
class Workout(models.Model):
|
||||||
workouttypes = mytypes.workouttypes
|
workouttypes = mytypes.workouttypes
|
||||||
workoutsources = mytypes.workoutsources
|
workoutsources = mytypes.workoutsources
|
||||||
@@ -2555,7 +2571,7 @@ class Workout(models.Model):
|
|||||||
rankingpiece = models.BooleanField(default=False,verbose_name='Ranking Piece')
|
rankingpiece = models.BooleanField(default=False,verbose_name='Ranking Piece')
|
||||||
duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout')
|
duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
|
|
||||||
date = self.date
|
date = self.date
|
||||||
name = self.name
|
name = self.name
|
||||||
@@ -2654,6 +2670,7 @@ def auto_delete_strokedata_on_delete(sender, instance, **kwargs):
|
|||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
# Virtual Race results (for keeping results when workouts are deleted)
|
# Virtual Race results (for keeping results when workouts are deleted)
|
||||||
|
@python_2_unicode_compatible
|
||||||
class VirtualRaceResult(models.Model):
|
class VirtualRaceResult(models.Model):
|
||||||
boatclasses = (type for type in mytypes.workouttypes if type[0] in mytypes.otwtypes)
|
boatclasses = (type for type in mytypes.workouttypes if type[0] in mytypes.otwtypes)
|
||||||
userid = models.IntegerField(default=0)
|
userid = models.IntegerField(default=0)
|
||||||
@@ -2688,7 +2705,7 @@ class VirtualRaceResult(models.Model):
|
|||||||
emailnotifications = models.BooleanField(default=True,
|
emailnotifications = models.BooleanField(default=True,
|
||||||
verbose_name = 'Receive race notifications by email')
|
verbose_name = 'Receive race notifications by email')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
rr = Rower.objects.get(id=self.userid)
|
rr = Rower.objects.get(id=self.userid)
|
||||||
name = '{u1} {u2}'.format(
|
name = '{u1} {u2}'.format(
|
||||||
u1 = rr.user.first_name,
|
u1 = rr.user.first_name,
|
||||||
@@ -2713,6 +2730,7 @@ class VirtualRaceResult(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Virtual Race results (for keeping results when workouts are deleted)
|
# Virtual Race results (for keeping results when workouts are deleted)
|
||||||
|
@python_2_unicode_compatible
|
||||||
class IndoorVirtualRaceResult(models.Model):
|
class IndoorVirtualRaceResult(models.Model):
|
||||||
boatclasses = (type for type in mytypes.workouttypes if type[0] in mytypes.otetypes)
|
boatclasses = (type for type in mytypes.workouttypes if type[0] in mytypes.otetypes)
|
||||||
userid = models.IntegerField(default=0) # ID of rower object
|
userid = models.IntegerField(default=0) # ID of rower object
|
||||||
@@ -2743,7 +2761,7 @@ class IndoorVirtualRaceResult(models.Model):
|
|||||||
emailnotifications = models.BooleanField(default=True,
|
emailnotifications = models.BooleanField(default=True,
|
||||||
verbose_name = 'Receive race notifications by email')
|
verbose_name = 'Receive race notifications by email')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
rr = Rower.objects.get(id=self.userid)
|
rr = Rower.objects.get(id=self.userid)
|
||||||
name = '{u1} {u2}'.format(
|
name = '{u1} {u2}'.format(
|
||||||
u1 = rr.user.first_name,
|
u1 = rr.user.first_name,
|
||||||
@@ -2900,6 +2918,7 @@ class ergcpdata(models.Model):
|
|||||||
app_label = 'rowers'
|
app_label = 'rowers'
|
||||||
|
|
||||||
# A wrapper around the png files
|
# A wrapper around the png files
|
||||||
|
@python_2_unicode_compatible
|
||||||
class GraphImage(models.Model):
|
class GraphImage(models.Model):
|
||||||
filename = models.CharField(default='',max_length=150,blank=True,null=True)
|
filename = models.CharField(default='',max_length=150,blank=True,null=True)
|
||||||
creationdatetime = models.DateTimeField()
|
creationdatetime = models.DateTimeField()
|
||||||
@@ -3445,6 +3464,7 @@ class SiteAnnouncement(models.Model):
|
|||||||
return super(SiteAnnouncement,self).save(*args, **kwargs)
|
return super(SiteAnnouncement,self).save(*args, **kwargs)
|
||||||
|
|
||||||
# A comment by a user on a training
|
# A comment by a user on a training
|
||||||
|
@python_2_unicode_compatible
|
||||||
class WorkoutComment(models.Model):
|
class WorkoutComment(models.Model):
|
||||||
comment = models.TextField(max_length=300)
|
comment = models.TextField(max_length=300)
|
||||||
created = models.DateTimeField(default=timezone.now)
|
created = models.DateTimeField(default=timezone.now)
|
||||||
@@ -3453,7 +3473,7 @@ class WorkoutComment(models.Model):
|
|||||||
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
||||||
workout = models.ForeignKey(Workout,on_delete=models.CASCADE)
|
workout = models.ForeignKey(Workout,on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return u'Comment to: {w} by {u1} {u2}'.format(
|
return u'Comment to: {w} by {u1} {u2}'.format(
|
||||||
w=self.workout,
|
w=self.workout,
|
||||||
u1 = self.user.first_name,
|
u1 = self.user.first_name,
|
||||||
@@ -3470,6 +3490,7 @@ class WorkoutCommentForm(ModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# A comment by a user on a training
|
# A comment by a user on a training
|
||||||
|
@python_2_unicode_compatible
|
||||||
class PlannedSessionComment(models.Model):
|
class PlannedSessionComment(models.Model):
|
||||||
comment = models.TextField(max_length=300)
|
comment = models.TextField(max_length=300)
|
||||||
created = models.DateTimeField(default=timezone.now)
|
created = models.DateTimeField(default=timezone.now)
|
||||||
@@ -3478,7 +3499,7 @@ class PlannedSessionComment(models.Model):
|
|||||||
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
user = models.ForeignKey(User,on_delete=models.PROTECT)
|
||||||
plannedsession = models.ForeignKey(PlannedSession,on_delete=models.CASCADE)
|
plannedsession = models.ForeignKey(PlannedSession,on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return u'Comment to: {w} by {u1} {u2}'.format(
|
return u'Comment to: {w} by {u1} {u2}'.format(
|
||||||
w=self.workout,
|
w=self.workout,
|
||||||
u1 = self.user.first_name,
|
u1 = self.user.first_name,
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
|
|
||||||
workouttypes = (
|
workouttypes = (
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
# Interactions with Rowsandall.com API. Not fully complete.
|
# Interactions with Rowsandall.com API. Not fully complete.
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from rowers.models import Rower,PaidPlan
|
from rowers.models import Rower,PaidPlan
|
||||||
|
|
||||||
# run once - copies plans to paypal
|
# run once - copies plans to paypal
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
# Defines permissions for objects (API related)
|
# Defines permissions for objects (API related)
|
||||||
|
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -361,7 +365,7 @@ def is_session_complete_ws(ws,ps):
|
|||||||
return ratio,'partial',completiondate
|
return ratio,'partial',completiondate
|
||||||
else:
|
else:
|
||||||
thevalue = 0
|
thevalue = 0
|
||||||
for key,value in cratios.iteritems():
|
for key,value in cratios.items():
|
||||||
if ratio>value and value>thevalue:
|
if ratio>value and value>thevalue:
|
||||||
verdict = key
|
verdict = key
|
||||||
thevalue = value
|
thevalue = value
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from matplotlib.ticker import MultipleLocator,FuncFormatter,NullFormatter
|
from matplotlib.ticker import MultipleLocator,FuncFormatter,NullFormatter
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality needed to connect to Strava
|
# All the functionality needed to connect to Strava
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import gzip
|
import gzip
|
||||||
import shutil
|
import shutil
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality needed to connect to Runkeeper
|
# All the functionality needed to connect to Runkeeper
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# Serializers. Defines which fields from an object get to the JSON object
|
# Serializers. Defines which fields from an object get to the JSON object
|
||||||
# Also optionally define POST, PATCH methods (create, update)
|
# Also optionally define POST, PATCH methods (create, update)
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality to connect to SportTracks
|
# All the functionality to connect to SportTracks
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
# All the functionality needed to connect to Strava
|
# All the functionality needed to connect to Strava
|
||||||
|
|||||||
+6
-2
@@ -1,5 +1,9 @@
|
|||||||
""" Background tasks done by Celery (develop) or QR (production) """
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
""" Background tasks done by Celery (develop) or QR (production) """
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import gc
|
import gc
|
||||||
@@ -1641,7 +1645,7 @@ def handle_makeplot(f1, f2, t, hrdata, plotnr, imagename,
|
|||||||
hran = hrdata['hran']
|
hran = hrdata['hran']
|
||||||
ftp = hrdata['ftp']
|
ftp = hrdata['ftp']
|
||||||
powerzones = deserialize_list(hrdata['powerzones'])
|
powerzones = deserialize_list(hrdata['powerzones'])
|
||||||
powerperc = np.array(deserialize_list(hrdata['powerperc'])).astype(int)
|
powerperc = np.array(deserialize_list(hrdata['powerperc'])).astype(float)
|
||||||
|
|
||||||
rr = rowingdata.rower(hrmax=hrmax, hrut2=hrut2,
|
rr = rowingdata.rower(hrmax=hrmax, hrut2=hrut2,
|
||||||
hrut1=hrut1, hrat=hrat,
|
hrut1=hrut1, hrat=hrat,
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import django
|
import django
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
# All the Team related methods
|
# All the Team related methods
|
||||||
|
|
||||||
|
|||||||
-106
@@ -1,106 +0,0 @@
|
|||||||
# This is just a scratch pad to temporarily park code, just in case I need
|
|
||||||
# it later. Hardly used since i have proper versioning
|
|
||||||
|
|
||||||
#
|
|
||||||
def createc2workoutdata_grouped(w):
|
|
||||||
filename = w.csvfilename
|
|
||||||
row = rowingdata(filename)
|
|
||||||
|
|
||||||
# resize per minute
|
|
||||||
df = row.df.groupby(lambda x:x/10).mean()
|
|
||||||
|
|
||||||
averagehr = int(df[' HRCur (bpm)'].mean())
|
|
||||||
maxhr = int(df[' HRCur (bpm)'].max())
|
|
||||||
|
|
||||||
# adding diff, trying to see if this is valid
|
|
||||||
t = 10*df.ix[:,' ElapsedTime (sec)'].values
|
|
||||||
t[0] = t[1]
|
|
||||||
d = df.ix[:,' Horizontal (meters)'].values
|
|
||||||
d[0] = d[1]
|
|
||||||
p = 10*df.ix[:,' Stroke500mPace (sec/500m)'].values
|
|
||||||
t = t.astype(int)
|
|
||||||
d = d.astype(int)
|
|
||||||
p = p.astype(int)
|
|
||||||
spm = df[' Cadence (stokes/min)'].astype(int)
|
|
||||||
spm[0] = spm[1]
|
|
||||||
hr = df[' HRCur (bpm)'].astype(int)
|
|
||||||
stroke_data = []
|
|
||||||
for i in range(len(t)):
|
|
||||||
thisrecord = {"t":t[i],"d":d[i],"p":p[i],"spm":spm[i],"hr":hr[i]}
|
|
||||||
stroke_data.append(thisrecord)
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
|
||||||
durationstr = datetime.strptime(str(w.duration),"%H:%M:%S.%f")
|
|
||||||
except ValueError:
|
|
||||||
durationstr = datetime.strptime(str(w.duration),"%H:%M:%S")
|
|
||||||
|
|
||||||
|
|
||||||
data = {
|
|
||||||
"type": w.workouttype,
|
|
||||||
"date": w.startdatetime.isoformat(),
|
|
||||||
"distance": int(w.distance),
|
|
||||||
"time": int(10*makeseconds(durationstr)),
|
|
||||||
"weight_class": c2wc(w.weightcategory),
|
|
||||||
"timezone": "Etc/UTC",
|
|
||||||
"comments": w.notes,
|
|
||||||
"heart_rate": {
|
|
||||||
"average": averagehr,
|
|
||||||
"max": maxhr,
|
|
||||||
},
|
|
||||||
"stroke_data": stroke_data,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
@login_required()
|
|
||||||
def workout_edit_view(request,id=0):
|
|
||||||
if request.method == 'POST':
|
|
||||||
# Form was submitted
|
|
||||||
form = WorkoutForm(request.POST)
|
|
||||||
if form.is_valid():
|
|
||||||
# Get values from form
|
|
||||||
name = request.POST['name']
|
|
||||||
date = request.POST['date']
|
|
||||||
workouttype = request.POST['workouttype']
|
|
||||||
notes = request.POST['notes']
|
|
||||||
try:
|
|
||||||
# check if valid ID exists (workout exists)
|
|
||||||
row = Workout.objects.get(id=id)
|
|
||||||
# check if user is owner of this workout
|
|
||||||
if checkworkoutuser(request.user,row):
|
|
||||||
row.name = name
|
|
||||||
row.date = date
|
|
||||||
row.workouttype = workouttype
|
|
||||||
row.notes = notes
|
|
||||||
row.save()
|
|
||||||
response = HttpResponse("data updated")
|
|
||||||
else:
|
|
||||||
response = HttpResponse("You are not allowed to change this workout")
|
|
||||||
except Workout.DoesNotExist:
|
|
||||||
# create new workout
|
|
||||||
r = Rower.objects.get(user=request.user)
|
|
||||||
w = Workout(name=name,date=date,workouttype=workouttype,
|
|
||||||
user=r)
|
|
||||||
w.save()
|
|
||||||
response = HttpResponse("New workout created")
|
|
||||||
else:
|
|
||||||
response = HttpResponse("invalid form")
|
|
||||||
|
|
||||||
return response
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
row = Workout.objects.get(id=id)
|
|
||||||
form = WorkoutForm(instance=row)
|
|
||||||
# check if user is owner of this workout
|
|
||||||
|
|
||||||
if (checkworkoutuser(request.user,row)==False):
|
|
||||||
return HttpResponse("You are not allowed to edit this workout")
|
|
||||||
except Workout.DoesNotExist:
|
|
||||||
form = WorkoutForm(
|
|
||||||
initial = {'workouttype' : 'rower'}
|
|
||||||
)
|
|
||||||
|
|
||||||
return render(request, 'workout_form.html',
|
|
||||||
{'form':form,})
|
|
||||||
@@ -31,15 +31,16 @@ from rowers.opaque import encoder
|
|||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
|
|
||||||
|
from six import string_types
|
||||||
|
|
||||||
def strfdelta(tdelta):
|
def strfdelta(tdelta):
|
||||||
minutes,seconds = divmod(tdelta.seconds,60)
|
minutes,seconds = divmod(tdelta.seconds,60)
|
||||||
tenths = int(tdelta.microseconds/1e5)
|
tenths = int(tdelta.microseconds/1e5)
|
||||||
res = "{minutes:0>1}:{seconds:0>2}.{tenths:0>1}".format(
|
res = "{minutes:0>1}:{seconds:0>2}.{tenths:0>1}".format(
|
||||||
minutes=minutes,
|
minutes=minutes,
|
||||||
seconds=seconds,
|
seconds=seconds,
|
||||||
tenths=tenths,
|
tenths=tenths,
|
||||||
)
|
)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@@ -48,11 +49,11 @@ def strfdeltah(tdelta):
|
|||||||
minutes,seconds = divmod(rest,60)
|
minutes,seconds = divmod(rest,60)
|
||||||
tenths = int(tdelta.microseconds/1e5)
|
tenths = int(tdelta.microseconds/1e5)
|
||||||
res = "{hours:0>2}:{minutes:0>2}:{seconds:0>2}.{tenths:0>1}".format(
|
res = "{hours:0>2}:{minutes:0>2}:{seconds:0>2}.{tenths:0>1}".format(
|
||||||
hours=hours,
|
hours=hours,
|
||||||
minutes=minutes,
|
minutes=minutes,
|
||||||
seconds=seconds,
|
seconds=seconds,
|
||||||
tenths=tenths,
|
tenths=tenths,
|
||||||
)
|
)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@@ -60,10 +61,10 @@ def secondstotimestring(tdelta):
|
|||||||
hours, rest = divmod(tdelta,3600)
|
hours, rest = divmod(tdelta,3600)
|
||||||
minutes,seconds = divmod(rest,60)
|
minutes,seconds = divmod(rest,60)
|
||||||
res = "{hours:0>2}:{minutes:0>2}:{seconds:0>2}".format(
|
res = "{hours:0>2}:{minutes:0>2}:{seconds:0>2}".format(
|
||||||
hours=hours,
|
hours=hours,
|
||||||
minutes=minutes,
|
minutes=minutes,
|
||||||
seconds=seconds,
|
seconds=seconds,
|
||||||
)
|
)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@@ -107,9 +108,9 @@ def spacetohtml(t):
|
|||||||
@register.filter
|
@register.filter
|
||||||
def durationprint(d,dstring):
|
def durationprint(d,dstring):
|
||||||
if (d == None):
|
if (d == None):
|
||||||
return d
|
return d
|
||||||
else:
|
else:
|
||||||
return d.strftime(dstring)[:-5]
|
return d.strftime(dstring)[:-5]
|
||||||
|
|
||||||
def getstartenddate(timeperiod):
|
def getstartenddate(timeperiod):
|
||||||
s,e = timeperiod.split('/')
|
s,e = timeperiod.split('/')
|
||||||
@@ -165,16 +166,16 @@ def previousperiodstart(timeperiod):
|
|||||||
@register.filter
|
@register.filter
|
||||||
def paceprint(d):
|
def paceprint(d):
|
||||||
if (d == None):
|
if (d == None):
|
||||||
return d
|
return d
|
||||||
else:
|
else:
|
||||||
return strfdelta(d)
|
return strfdelta(d)
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def deltatimeprint(d):
|
def deltatimeprint(d):
|
||||||
if (d == None):
|
if (d == None):
|
||||||
return d
|
return d
|
||||||
else:
|
else:
|
||||||
return strfdeltah(d)
|
return strfdeltah(d)
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def c2userid(user):
|
def c2userid(user):
|
||||||
@@ -220,8 +221,8 @@ def jsdict(dict,key):
|
|||||||
def lookup(dict, key):
|
def lookup(dict, key):
|
||||||
s = dict.get(key)
|
s = dict.get(key)
|
||||||
|
|
||||||
if isinstance(s,basestring) and len(s) > 22:
|
if isinstance(s,string_types) and len(s) > 22:
|
||||||
s = s[:22]
|
s = s[:22]
|
||||||
return s
|
return s
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
|
|||||||
+13
-8
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
pytestmark = pytest.mark.django_db
|
||||||
@@ -31,7 +36,7 @@ from rowers.utils import NoTokenError
|
|||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from nose.tools import assert_true
|
from nose.tools import assert_true
|
||||||
from mock import Mock, patch
|
from mock import Mock, patch
|
||||||
from minimocktest import MockTestCase
|
#from minimocktest import MockTestCase
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import rowers.c2stuff as c2stuff
|
import rowers.c2stuff as c2stuff
|
||||||
import arrow
|
import arrow
|
||||||
@@ -98,15 +103,15 @@ def mocked_sqlalchemy(*args, **kwargs):
|
|||||||
return MockEngine()
|
return MockEngine()
|
||||||
|
|
||||||
#@pytest.mark.django_db
|
#@pytest.mark.django_db
|
||||||
class DjangoTestCase(TestCase, MockTestCase):
|
class DjangoTestCase(TestCase): #, MockTestCase):
|
||||||
def _pre_setup(self):
|
def _pre_setup(self):
|
||||||
MockTestCase.setUp(self)
|
# MockTestCase.setUp(self)
|
||||||
TestCase._pre_setup(self)
|
TestCase._pre_setup(self)
|
||||||
self.client = Client()
|
self.client = Client()
|
||||||
|
|
||||||
def _post_teardown(self):
|
def _post_teardown(self):
|
||||||
TestCase._post_teardown(self)
|
TestCase._post_teardown(self)
|
||||||
MockTestCase.tearDown(self)
|
#MockTestCase.tearDown(self)
|
||||||
# delete_strokedata(1)
|
# delete_strokedata(1)
|
||||||
|
|
||||||
def mocked_tcx_parser(*args, **kwargs):
|
def mocked_tcx_parser(*args, **kwargs):
|
||||||
@@ -220,7 +225,7 @@ def mocked_read_df_cols_sql_multiflex(ids, columns, convertnewtons=True):
|
|||||||
|
|
||||||
def mocked_stravaexport(f2,workoutname,stravatoken,description='',
|
def mocked_stravaexport(f2,workoutname,stravatoken,description='',
|
||||||
activity_type='Rowing'):
|
activity_type='Rowing'):
|
||||||
print "this is mocked strava export"
|
print("this is mocked strava export")
|
||||||
return 1,'success'
|
return 1,'success'
|
||||||
|
|
||||||
def mocked_fetchcp(*args, **kwargs):
|
def mocked_fetchcp(*args, **kwargs):
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ try:
|
|||||||
except NameError:
|
except NameError:
|
||||||
WindowsError = None
|
WindowsError = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
FileNotFoundError
|
||||||
|
except NameError:
|
||||||
|
FileNotFoundError = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
OSError
|
OSError
|
||||||
except NameError:
|
except NameError:
|
||||||
@@ -44,7 +49,7 @@ from rowers.plannedsessions import get_dates_timeperiod
|
|||||||
from shutil import copyfile, copy
|
from shutil import copyfile, copy
|
||||||
from nose.tools import assert_true
|
from nose.tools import assert_true
|
||||||
from mock import Mock, patch
|
from mock import Mock, patch
|
||||||
from minimocktest import MockTestCase
|
#from minimocktest import MockTestCase
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import rowers.c2stuff as c2stuff
|
import rowers.c2stuff as c2stuff
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
nu = datetime.datetime.now(tz=timezone.utc)
|
nu = datetime.datetime.now(tz=timezone.utc)
|
||||||
|
|
||||||
@@ -327,7 +332,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
try:
|
try:
|
||||||
os.remove('rowers/tests/testdata/temp/course.kml')
|
os.remove('rowers/tests/testdata/temp/course.kml')
|
||||||
except (WindowsError, OSError, IOError):
|
except (FileNotFoundError, OSError, IOError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@@ -408,7 +413,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = IndoorVirtualRaceForm(form_data)
|
form = IndoorVirtualRaceForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -452,7 +457,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = IndoorVirtualRaceForm(form_data)
|
form = IndoorVirtualRaceForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -496,7 +501,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = VirtualRaceForm(form_data)
|
form = VirtualRaceForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -533,7 +538,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = VirtualRaceForm(form_data)
|
form = VirtualRaceForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -588,7 +593,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = IndoorVirtualRaceResultForm(form_data)
|
form = IndoorVirtualRaceResultForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -617,7 +622,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = IndoorVirtualRaceResultForm(form_data)
|
form = IndoorVirtualRaceResultForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -666,7 +671,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = VirtualRaceResultForm(form_data)
|
form = VirtualRaceResultForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
@@ -694,7 +699,7 @@ class VirtualEventViewTest(TestCase):
|
|||||||
|
|
||||||
form = VirtualRaceResultForm(form_data)
|
form = VirtualRaceResultForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data,follow=True)
|
response = self.c.post(url,form_data,follow=True)
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
from rowers.models import User,Rower
|
from rowers.models import User,Rower
|
||||||
@@ -8,10 +13,10 @@ from rowers.models import User,Rower
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
class AdminTests(TestCase):
|
class AdminTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u)
|
r = Rower.objects.create(user=u)
|
||||||
my_admin = User.objects.create_superuser('myuser',
|
my_admin = User.objects.create_superuser('myuser',
|
||||||
'myemail@test.com',
|
'myemail@test.com',
|
||||||
'apensstaart')
|
'apensstaart')
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
@@ -26,7 +31,7 @@ class WorkoutCompareTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError, OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@@ -91,7 +96,7 @@ class BoxPlotTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@@ -110,7 +115,7 @@ class BoxPlotTest(TestCase):
|
|||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multi)
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multi)
|
||||||
def test_workouts_boxplot_submit(self, mocked_sqlalchemy,
|
def donot_test_workouts_boxplot_submit(self, mocked_sqlalchemy,
|
||||||
mocked_getsmallrowdata_db,
|
mocked_getsmallrowdata_db,
|
||||||
mocked_df):
|
mocked_df):
|
||||||
|
|
||||||
@@ -188,7 +193,7 @@ class ListWorkoutTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@@ -246,7 +251,7 @@ class PlannedSessionTests(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_ics_download(self):
|
def test_ics_download(self):
|
||||||
@@ -291,7 +296,7 @@ class ForcecurveTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect = mocked_getempowerdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect = mocked_getempowerdata_db)
|
||||||
@@ -326,7 +331,7 @@ class CumStatsTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multistats)
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multistats)
|
||||||
@@ -363,7 +368,7 @@ class CumFlexTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multiflex)
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multiflex)
|
||||||
@@ -468,7 +473,7 @@ class MultiFlexTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multiflex)
|
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multiflex)
|
||||||
@@ -570,7 +575,7 @@ class HistoTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -211,7 +216,7 @@ class WorkoutViewTest(TestCase):
|
|||||||
'userid':self.u.id,
|
'userid':self.u.id,
|
||||||
'id':encoder.encode_hex(self.werg1.id),
|
'id':encoder.encode_hex(self.werg1.id),
|
||||||
})
|
})
|
||||||
print url
|
print(url)
|
||||||
|
|
||||||
form_data = {
|
form_data = {
|
||||||
'xparam':'time',
|
'xparam':'time',
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -28,7 +33,7 @@ class SimpleViewTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_start_protrial(self):
|
def test_start_protrial(self):
|
||||||
|
|||||||
@@ -1,16 +1,21 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
class CoursesTest(TestCase):
|
class CoursesTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now(),
|
gdproptindate=timezone.now(),
|
||||||
rowerplan='coach',
|
rowerplan='coach',
|
||||||
)
|
)
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
|
|
||||||
def test_courses(self):
|
def test_courses(self):
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -77,9 +81,9 @@ class OTWCPChartTest(TestCase):
|
|||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
try:
|
try:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except (IOError,WindowsError,OSError):
|
except (IOError,FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
except (IOError,WindowsError,OSError):
|
except (IOError,FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_cpraw)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_cpraw)
|
||||||
@@ -157,7 +161,7 @@ class CPChartTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_analytics_page(self):
|
def test_analytics_page(self):
|
||||||
@@ -250,7 +254,7 @@ class CPChartTest(TestCase):
|
|||||||
sex = r.sex,
|
sex = r.sex,
|
||||||
weightc = r.weightcategory)
|
weightc = r.weightcategory)
|
||||||
|
|
||||||
print url
|
print(url)
|
||||||
|
|
||||||
response = self.c.get(url)
|
response = self.c.get(url)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
|
|||||||
+27
-23
@@ -1,14 +1,18 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
@override_settings(TESTING=True)
|
@override_settings(TESTING=True)
|
||||||
class EmailUpload(TestCase):
|
class EmailUpload(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u,gdproptin=True,
|
r = Rower.objects.create(user=u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -18,8 +22,8 @@ class EmailUpload(TestCase):
|
|||||||
gdproptin=True,
|
gdproptin=True,
|
||||||
gdproptindate=timezone.now(),
|
gdproptindate=timezone.now(),
|
||||||
rowerplan='coach')
|
rowerplan='coach')
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||||
workoutsbox.save()
|
workoutsbox.save()
|
||||||
failbox = Mailbox.objects.create(name='Failed')
|
failbox = Mailbox.objects.create(name='Failed')
|
||||||
@@ -43,7 +47,7 @@ workout run
|
|||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
try:
|
try:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except (IOError,WindowsError,OSError):
|
except (IOError,FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@@ -69,10 +73,10 @@ workout run
|
|||||||
class EmailTests(TestCase):
|
class EmailTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u,gdproptin=True,
|
r = Rower.objects.create(user=u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -82,8 +86,8 @@ class EmailTests(TestCase):
|
|||||||
gdproptin=True,
|
gdproptin=True,
|
||||||
gdproptindate=timezone.now(),
|
gdproptindate=timezone.now(),
|
||||||
rowerplan='coach')
|
rowerplan='coach')
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||||
workoutsbox.save()
|
workoutsbox.save()
|
||||||
failbox = Mailbox.objects.create(name='Failed')
|
failbox = Mailbox.objects.create(name='Failed')
|
||||||
@@ -133,7 +137,7 @@ race 1
|
|||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
try:
|
try:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except (IOError,WindowsError,OSError):
|
except (IOError,FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@@ -152,10 +156,10 @@ race 1
|
|||||||
class EmailAdminUpload(TestCase):
|
class EmailAdminUpload(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u,gdproptin=True,
|
r = Rower.objects.create(user=u,gdproptin=True,
|
||||||
gdproptindate=timezone.now(),
|
gdproptindate=timezone.now(),
|
||||||
birthdate = faker.profile()['birthdate']
|
birthdate = faker.profile()['birthdate']
|
||||||
)
|
)
|
||||||
@@ -166,10 +170,10 @@ class EmailAdminUpload(TestCase):
|
|||||||
gdproptin=True,
|
gdproptin=True,
|
||||||
gdproptindate=timezone.now(),
|
gdproptindate=timezone.now(),
|
||||||
rowerplan='coach')
|
rowerplan='coach')
|
||||||
|
|
||||||
self.race = RaceFactory(manager = self.theadmin)
|
self.race = RaceFactory(manager = self.theadmin)
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||||
workoutsbox.save()
|
workoutsbox.save()
|
||||||
failbox = Mailbox.objects.create(name='Failed')
|
failbox = Mailbox.objects.create(name='Failed')
|
||||||
@@ -194,7 +198,7 @@ race 1
|
|||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
try:
|
try:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except (IOError,WindowsError,OSError):
|
except (IOError,FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@@ -210,7 +214,7 @@ race 1
|
|||||||
ws = Workout.objects.filter(name="johnsworkout")
|
ws = Workout.objects.filter(name="johnsworkout")
|
||||||
if not len(ws):
|
if not len(ws):
|
||||||
for w in Workout.objects.all():
|
for w in Workout.objects.all():
|
||||||
print w
|
print(w)
|
||||||
|
|
||||||
self.assertEqual(len(ws),1)
|
self.assertEqual(len(ws),1)
|
||||||
|
|
||||||
|
|||||||
@@ -1,57 +1,61 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
|
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
|
|
||||||
class EmpowerTest(TestCase):
|
class EmpowerTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot',
|
'koeinsloot',
|
||||||
)
|
)
|
||||||
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,
|
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,
|
||||||
gdproptindate=timezone.now())
|
gdproptindate=timezone.now())
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
otwfilename = 'rowers/tests/testdata/empower.csv'
|
otwfilename = 'rowers/tests/testdata/empower.csv'
|
||||||
self.wotw = Workout.objects.create(name='testworkout',
|
self.wotw = Workout.objects.create(name='testworkout',
|
||||||
workouttype='water',
|
workouttype='water',
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=filename)
|
csvfilename=filename)
|
||||||
|
|
||||||
self.wote = Workout.objects.create(name='testworkout',
|
self.wote = Workout.objects.create(name='testworkout',
|
||||||
workouttype='Indoor Rower',
|
workouttype='Indoor Rower',
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=otwfilename)
|
csvfilename=otwfilename)
|
||||||
|
|
||||||
powerperc = 100*np.array([r.pw_ut2,
|
powerperc = 100*np.array([r.pw_ut2,
|
||||||
r.pw_ut1,
|
r.pw_ut1,
|
||||||
r.pw_at,
|
r.pw_at,
|
||||||
r.pw_tr,r.pw_an])/r.ftp
|
r.pw_tr,r.pw_an])/r.ftp
|
||||||
|
|
||||||
|
|
||||||
self.hrdata = {
|
self.hrdata = {
|
||||||
'hrmax':r.max,
|
'hrmax':r.max,
|
||||||
'hrut2':r.ut2,
|
'hrut2':r.ut2,
|
||||||
'hrut1':r.ut1,
|
'hrut1':r.ut1,
|
||||||
'hrat':r.at,
|
'hrat':r.at,
|
||||||
'hrtr':r.tr,
|
'hrtr':r.tr,
|
||||||
'hran':r.an,
|
'hran':r.an,
|
||||||
'ftp':r.ftp,
|
'ftp':r.ftp,
|
||||||
'powerperc':serialize_list(powerperc),
|
'powerperc':serialize_list(powerperc),
|
||||||
'powerzones':serialize_list(r.powerzones),
|
'powerzones':serialize_list(r.powerzones),
|
||||||
}
|
}
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
def test_workflow_map_view(self, mocked_sqlalchemy):
|
def test_workflow_map_view(self, mocked_sqlalchemy):
|
||||||
login = self.c.login(username='john',password='koeinsloot')
|
login = self.c.login(username='john',password='koeinsloot')
|
||||||
self.assertTrue(login)
|
self.assertTrue(login)
|
||||||
encodedid = str(encoder.encode_hex(self.wote.id))
|
encodedid = str(encoder.encode_hex(self.wote.id))
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
|
|
||||||
#@pytest.mark.django_db
|
#@pytest.mark.django_db
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
@override_settings(TESTING=True)
|
@override_settings(TESTING=True)
|
||||||
class WorkoutViewTest(TestCase):
|
class WorkoutViewTest(TestCase):
|
||||||
@@ -120,7 +125,7 @@ class WorkoutViewTest(TestCase):
|
|||||||
|
|
||||||
form = FlexOptionsForm(form_data)
|
form = FlexOptionsForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post(url,form_data)
|
response = self.c.post(url,form_data)
|
||||||
|
|||||||
+232
-227
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
|
|
||||||
@@ -10,14 +15,14 @@ import rowers
|
|||||||
class C2Objects(DjangoTestCase):
|
class C2Objects(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -25,39 +30,39 @@ class C2Objects(DjangoTestCase):
|
|||||||
self.r.c2refreshtoken = 'ab'
|
self.r.c2refreshtoken = 'ab'
|
||||||
self.r.tokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
self.r.tokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||||
self.r.save()
|
self.r.save()
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -110,49 +115,49 @@ class C2Objects(DjangoTestCase):
|
|||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
def test_strokedata(self, mocked_sqlalchemy):
|
def test_strokedata(self, mocked_sqlalchemy):
|
||||||
with open('rowers/tests/testdata/c2stroketestdata.txt','r') as infile:
|
with open('rowers/tests/testdata/c2stroketestdata.txt','r') as infile:
|
||||||
res = json.load(infile)
|
res = json.load(infile)
|
||||||
|
|
||||||
strokedata = pd.DataFrame.from_dict(res['data'])
|
strokedata = pd.DataFrame.from_dict(res['data'])
|
||||||
|
|
||||||
with open('rowers/tests/testdata/c2testdata.txt','r') as infile:
|
with open('rowers/tests/testdata/c2testdata.txt','r') as infile:
|
||||||
res = json.load(infile)
|
res = json.load(infile)
|
||||||
|
|
||||||
data = res['data']
|
data = res['data']
|
||||||
|
|
||||||
from rowers.views import add_workout_from_strokedata
|
from rowers.views import add_workout_from_strokedata
|
||||||
|
|
||||||
res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2')
|
res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
def test_strokedatanohr(self, mocked_sqlalchemy):
|
def test_strokedatanohr(self, mocked_sqlalchemy):
|
||||||
with open('rowers/tests/testdata/c2strokedatanohr.txt','r') as infile:
|
with open('rowers/tests/testdata/c2strokedatanohr.txt','r') as infile:
|
||||||
res = json.load(infile)
|
res = json.load(infile)
|
||||||
|
|
||||||
strokedata = pd.DataFrame.from_dict(res['data'])
|
strokedata = pd.DataFrame.from_dict(res['data'])
|
||||||
|
|
||||||
with open('rowers/tests/testdata/c2testdata.txt','r') as infile:
|
with open('rowers/tests/testdata/c2testdata.txt','r') as infile:
|
||||||
res = json.load(infile)
|
res = json.load(infile)
|
||||||
|
|
||||||
data = res['data']
|
data = res['data']
|
||||||
|
|
||||||
from rowers.views import add_workout_from_strokedata
|
from rowers.views import add_workout_from_strokedata
|
||||||
|
|
||||||
|
|
||||||
res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2')
|
res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2')
|
||||||
|
|
||||||
@override_settings(TESTING=True)
|
@override_settings(TESTING=True)
|
||||||
class C2ObjectsTokenExpired(DjangoTestCase):
|
class C2ObjectsTokenExpired(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -160,39 +165,39 @@ class C2ObjectsTokenExpired(DjangoTestCase):
|
|||||||
self.r.c2refreshtoken = 'ab'
|
self.r.c2refreshtoken = 'ab'
|
||||||
self.r.tokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1)
|
self.r.tokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1)
|
||||||
self.r.save()
|
self.r.save()
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -224,14 +229,14 @@ class C2ObjectsTokenExpired(DjangoTestCase):
|
|||||||
class StravaObjects(DjangoTestCase):
|
class StravaObjects(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -240,38 +245,38 @@ class StravaObjects(DjangoTestCase):
|
|||||||
self.r.stravatokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1)
|
self.r.stravatokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1)
|
||||||
|
|
||||||
self.r.save()
|
self.r.save()
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -330,14 +335,14 @@ class StravaObjects(DjangoTestCase):
|
|||||||
class STObjects(DjangoTestCase):
|
class STObjects(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -347,39 +352,39 @@ class STObjects(DjangoTestCase):
|
|||||||
self.r.sporttrackstokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
self.r.sporttrackstokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||||
self.r.save()
|
self.r.save()
|
||||||
|
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
@patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests)
|
@patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests)
|
||||||
@@ -442,37 +447,37 @@ class STObjects(DjangoTestCase):
|
|||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
def test_strokedata(self, mocked_sqlalchemy):
|
def test_strokedata(self, mocked_sqlalchemy):
|
||||||
with open('rowers/tests/testdata/sporttrackstestdata.txt','r') as infile:
|
with open('rowers/tests/testdata/sporttrackstestdata.txt','r') as infile:
|
||||||
data = json.load(infile)
|
data = json.load(infile)
|
||||||
|
|
||||||
from rowers.sporttracksstuff import add_workout_from_data
|
from rowers.sporttracksstuff import add_workout_from_data
|
||||||
|
|
||||||
res = add_workout_from_data(self.u,1,data,data)
|
res = add_workout_from_data(self.u,1,data,data)
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
def test_strokedatanohr(self, mocked_sqlalchemy):
|
def test_strokedatanohr(self, mocked_sqlalchemy):
|
||||||
with open('rowers/tests/testdata/sporttrackstestnohr.txt','r') as infile:
|
with open('rowers/tests/testdata/sporttrackstestnohr.txt','r') as infile:
|
||||||
data = json.load(infile)
|
data = json.load(infile)
|
||||||
|
|
||||||
from rowers.sporttracksstuff import add_workout_from_data
|
from rowers.sporttracksstuff import add_workout_from_data
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
res = add_workout_from_data(self.u,1,data,data)
|
res = add_workout_from_data(self.u,1,data,data)
|
||||||
|
|
||||||
#@pytest.mark.django_db
|
#@pytest.mark.django_db
|
||||||
@override_settings(TESTING=True)
|
@override_settings(TESTING=True)
|
||||||
class RunKeeperObjects(DjangoTestCase):
|
class RunKeeperObjects(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -481,39 +486,39 @@ class RunKeeperObjects(DjangoTestCase):
|
|||||||
|
|
||||||
self.r.save()
|
self.r.save()
|
||||||
|
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
@patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests)
|
@patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests)
|
||||||
@@ -558,14 +563,14 @@ class RunKeeperObjects(DjangoTestCase):
|
|||||||
class UAObjects(DjangoTestCase):
|
class UAObjects(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -575,39 +580,39 @@ class UAObjects(DjangoTestCase):
|
|||||||
self.r.underarmourtokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
self.r.underarmourtokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||||
self.r.save()
|
self.r.save()
|
||||||
|
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
@patch('rowers.imports.requests.post', side_effect=mocked_requests)
|
@patch('rowers.imports.requests.post', side_effect=mocked_requests)
|
||||||
@@ -661,14 +666,14 @@ class UAObjects(DjangoTestCase):
|
|||||||
class TPObjects(DjangoTestCase):
|
class TPObjects(DjangoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -678,39 +683,39 @@ class TPObjects(DjangoTestCase):
|
|||||||
self.r.tptokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
self.r.tptokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||||
self.r.save()
|
self.r.save()
|
||||||
|
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
@patch('rowers.imports.requests.post', side_effect=mocked_requests)
|
@patch('rowers.imports.requests.post', side_effect=mocked_requests)
|
||||||
@@ -748,10 +753,10 @@ class TPObjects(DjangoTestCase):
|
|||||||
class AutoExportTests(TestCase):
|
class AutoExportTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u,gdproptin=True,
|
r = Rower.objects.create(user=u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -762,7 +767,7 @@ class AutoExportTests(TestCase):
|
|||||||
|
|
||||||
r.save()
|
r.save()
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||||
workoutsbox.save()
|
workoutsbox.save()
|
||||||
failbox = Mailbox.objects.create(name='Failed')
|
failbox = Mailbox.objects.create(name='Failed')
|
||||||
@@ -791,7 +796,7 @@ boattype: 2x
|
|||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
try:
|
try:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.tpstuff.requests.post', side_effect=mocked_requests)
|
@patch('rowers.tpstuff.requests.post', side_effect=mocked_requests)
|
||||||
|
|||||||
@@ -1,136 +1,141 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
class InteractiveChartTest(TestCase):
|
class InteractiveChartTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u,gdproptin=True,
|
r = Rower.objects.create(user=u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
self.filename = 'rowers/tests/testdata/testdata.csv'
|
self.filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
self.wotw = Workout.objects.create(name='testworkout',
|
self.wotw = Workout.objects.create(name='testworkout',
|
||||||
workouttype='water',
|
workouttype='water',
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=self.filename)
|
csvfilename=self.filename)
|
||||||
|
|
||||||
self.wote = Workout.objects.create(name='testworkout',
|
self.wote = Workout.objects.create(name='testworkout',
|
||||||
workouttype='Indoor Rower',
|
workouttype='Indoor Rower',
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=self.filename)
|
csvfilename=self.filename)
|
||||||
|
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
def test_painsled(self, mocked_sqlalchemy, mocked_read_df_sql):
|
def test_painsled(self, mocked_sqlalchemy, mocked_read_df_sql):
|
||||||
u = User.objects.get(username='john')
|
u = User.objects.get(username='john')
|
||||||
r = Rower.objects.get(user=u)
|
r = Rower.objects.get(user=u)
|
||||||
|
|
||||||
rr = rrower(hrmax=r.max,hrut2=r.ut2,
|
rr = rrower(hrmax=r.max,hrut2=r.ut2,
|
||||||
hrut1=r.ut1,hrat=r.at,
|
hrut1=r.ut1,hrat=r.at,
|
||||||
hrtr=r.tr,hran=r.an,ftp=r.ftp)
|
hrtr=r.tr,hran=r.an,ftp=r.ftp)
|
||||||
row = rdata(self.filename,rower=rr)
|
row = rdata(self.filename,rower=rr)
|
||||||
|
|
||||||
fig1 = plots.mkplot(row,'test')
|
fig1 = plots.mkplot(row,'test')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart1(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart1(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_chart(self.wote.id)
|
res = iplots.interactive_chart(self.wote.id)
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart2(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart2(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_chart(self.wote.id,promember=1)
|
res = iplots.interactive_chart(self.wote.id,promember=1)
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
def test_interactive_chart3(self, mocked_sqlalchemy,mocked_read_df_sql):
|
def test_interactive_chart3(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||||
res = iplots.interactive_bar_chart(self.wote.id)
|
res = iplots.interactive_bar_chart(self.wote.id)
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
def test_interactive_chart4(self, mocked_sqlalchemy,mocked_read_df_sql):
|
def test_interactive_chart4(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||||
res = iplots.interactive_bar_chart(self.wote.id,promember=1)
|
res = iplots.interactive_bar_chart(self.wote.id,promember=1)
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
def test_interactive_chart5(self, mocked_sqlalchemy,mocked_read_df_sql):
|
def test_interactive_chart5(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
||||||
xparam='time',
|
xparam='time',
|
||||||
yparam1='pace',yparam2='hr')
|
yparam1='pace',yparam2='hr')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
def test_interactive_chart6(self, mocked_sqlalchemy,mocked_read_df_sql):
|
def test_interactive_chart6(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||||
promember=0,xparam='distance',
|
promember=0,xparam='distance',
|
||||||
yparam1='pace',yparam2='hr')
|
yparam1='pace',yparam2='hr')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart7(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart7(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
||||||
xparam='time',
|
xparam='time',
|
||||||
yparam1='pace',yparam2='spm')
|
yparam1='pace',yparam2='spm')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart8(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart8(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||||
promember=0,xparam='distance',
|
promember=0,xparam='distance',
|
||||||
yparam1='pace',yparam2='spm')
|
yparam1='pace',yparam2='spm')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart9(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart9(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||||
promember=1,xparam='time',
|
promember=1,xparam='time',
|
||||||
yparam1='pace',yparam2='hr')
|
yparam1='pace',yparam2='hr')
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart10(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart10(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||||
promember=1,xparam='distance',
|
promember=1,xparam='distance',
|
||||||
yparam1='pace',yparam2='hr')
|
yparam1='pace',yparam2='hr')
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart11(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart11(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||||
promember=1,xparam='time',
|
promember=1,xparam='time',
|
||||||
yparam1='pace',yparam2='spm')
|
yparam1='pace',yparam2='spm')
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_df_sql')
|
@patch('rowers.dataprep.read_df_sql')
|
||||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
|
||||||
def test_interactive_chart12(self, mocked_sqlalchemy,mocked_read_df_sql,
|
def test_interactive_chart12(self, mocked_sqlalchemy,mocked_read_df_sql,
|
||||||
mocked_getsmallrowdata_db):
|
mocked_getsmallrowdata_db):
|
||||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=1,
|
res = iplots.interactive_flex_chart2(self.wote.id,promember=1,
|
||||||
xparam='distance',
|
xparam='distance',
|
||||||
yparam1='pace',yparam2='spm')
|
yparam1='pace',yparam2='spm')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+44
-39
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -9,42 +14,42 @@ nu = datetime.datetime.now()
|
|||||||
class WorkoutTests(TestCase):
|
class WorkoutTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
self.w = Workout.objects.create(name='testworkout',
|
self.w = Workout.objects.create(name='testworkout',
|
||||||
workouttype='water',
|
workouttype='water',
|
||||||
user=self.r,date=nu.strftime('%Y-%m-%d'),
|
user=self.r,date=nu.strftime('%Y-%m-%d'),
|
||||||
starttime=nu.strftime('%H:%M:%S'),
|
starttime=nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000)
|
duration="0:55:00",distance=8000)
|
||||||
|
|
||||||
def test_checkworkoutuser(self):
|
def test_checkworkoutuser(self):
|
||||||
self.assertEqual(checkworkoutuser(self.u,self.w),True)
|
self.assertEqual(checkworkoutuser(self.u,self.w),True)
|
||||||
|
|
||||||
#@pytest.mark.django_db
|
#@pytest.mark.django_db
|
||||||
class C2Tests(TestCase):
|
class C2Tests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
self.u = User.objects.create_user('john',
|
self.u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
self.w = Workout.objects.create(name='testworkout',workouttype='water',
|
self.w = Workout.objects.create(name='testworkout',workouttype='water',
|
||||||
user=r,date=nu.strftime('%Y-%m-%d'),
|
user=r,date=nu.strftime('%Y-%m-%d'),
|
||||||
starttime=nu.strftime('%H:%M:%S'),
|
starttime=nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000)
|
duration="0:55:00",distance=8000)
|
||||||
|
|
||||||
def c2_notokentest(self):
|
def c2_notokentest(self):
|
||||||
thetoken = c2_open(self.u)
|
thetoken = c2_open(self.u)
|
||||||
# should raise NoTokenError
|
# should raise NoTokenError
|
||||||
self.assertRaises(NoTokenError)
|
self.assertRaises(NoTokenError)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -53,25 +58,25 @@ class C2Tests(TestCase):
|
|||||||
class subroutinetests(TestCase):
|
class subroutinetests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u)
|
r = Rower.objects.create(user=u)
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
self.w = Workout.objects.create(name='testworkout',
|
self.w = Workout.objects.create(name='testworkout',
|
||||||
workouttype='water',
|
workouttype='water',
|
||||||
user=r,date=nu.strftime('%Y-%m-%d'),
|
user=r,date=nu.strftime('%Y-%m-%d'),
|
||||||
starttime=nu.strftime('%H:%M:%S'),
|
starttime=nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=filename)
|
csvfilename=filename)
|
||||||
|
|
||||||
|
|
||||||
def c2stuff(self):
|
def c2stuff(self):
|
||||||
data = c2stuff.createc2workoutdata(self.w)
|
data = c2stuff.createc2workoutdata(self.w)
|
||||||
jsond = json.dumps(data)
|
jsond = json.dumps(data)
|
||||||
data = c2stuff.createc2workoutdata_as_splits(w)
|
data = c2stuff.createc2workoutdata_as_splits(w)
|
||||||
jsond = json.dumps(data)
|
jsond = json.dumps(data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -7,7 +12,7 @@ nu = datetime.datetime.now()
|
|||||||
@override_settings(TESTING=True)
|
@override_settings(TESTING=True)
|
||||||
class NewUserRegistrationTest(TestCase):
|
class NewUserRegistrationTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
@@ -19,9 +24,9 @@ class NewUserRegistrationTest(TestCase):
|
|||||||
@patch('rowers.dataprep.workout_summary_to_df',side_effect=mock_workout_summaries)
|
@patch('rowers.dataprep.workout_summary_to_df',side_effect=mock_workout_summaries)
|
||||||
def test_newuser(self,mock_workout_summaries):
|
def test_newuser(self,mock_workout_summaries):
|
||||||
form_data = {
|
form_data = {
|
||||||
'first_name':'Jan',
|
'first_name':'Jan',
|
||||||
'last_name':'Roeiert',
|
'last_name':'Roeiert',
|
||||||
'email':'jan@loop.nl',
|
'email':'jan@loop.nl',
|
||||||
'username':'janderoeiert',
|
'username':'janderoeiert',
|
||||||
'password1':'aapindewei2',
|
'password1':'aapindewei2',
|
||||||
'password2':'aapindewei2',
|
'password2':'aapindewei2',
|
||||||
@@ -31,16 +36,16 @@ class NewUserRegistrationTest(TestCase):
|
|||||||
'sex':'male',
|
'sex':'male',
|
||||||
'next':'/rowers/list-workouts',
|
'next':'/rowers/list-workouts',
|
||||||
'birthdate':datetime.datetime(year=1970,month=4,day=2)
|
'birthdate':datetime.datetime(year=1970,month=4,day=2)
|
||||||
}
|
}
|
||||||
|
|
||||||
form = RegistrationFormUniqueEmail(form_data)
|
form = RegistrationFormUniqueEmail(form_data)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
response = self.c.post('/rowers/register/', form_data, follow=True)
|
response = self.c.post('/rowers/register/', form_data, follow=True)
|
||||||
|
|
||||||
self.assertRedirects(response,
|
self.assertRedirects(response,
|
||||||
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
|
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
|
||||||
status_code=302,target_status_code=200)
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
|
||||||
url = '/rowers/me/gdpr-optin-confirm/?next=/rowers/list-workouts/'
|
url = '/rowers/me/gdpr-optin-confirm/?next=/rowers/list-workouts/'
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -504,7 +509,7 @@ class PaymentTest(TestCase):
|
|||||||
|
|
||||||
form = BillingForm(form_data)
|
form = BillingForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
login = self.c.login(username=u.username, password=self.password)
|
login = self.c.login(username=u.username, password=self.password)
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
nu = datetime.datetime.now(tz=timezone.utc)
|
nu = datetime.datetime.now(tz=timezone.utc)
|
||||||
|
|
||||||
@@ -391,7 +396,7 @@ class PermissionsViewTests(TestCase):
|
|||||||
|
|
||||||
form = TeamForm(form_data)
|
form = TeamForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
@@ -413,7 +418,7 @@ class PermissionsViewTests(TestCase):
|
|||||||
|
|
||||||
form = TeamForm(form_data)
|
form = TeamForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
@@ -542,20 +547,20 @@ class PermissionsViewTests(TestCase):
|
|||||||
response = self.c.get(url)
|
response = self.c.get(url)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
f = open(filename,'rb')
|
f = open(filename,'rb')
|
||||||
file_data = {'file': f}
|
file_data = {'file': f}
|
||||||
form_data = {
|
form_data = {
|
||||||
'title':'test',
|
'title':'test',
|
||||||
'workouttype':'rower',
|
'workouttype':'rower',
|
||||||
'boattype':'1x',
|
'boattype':'1x',
|
||||||
'notes':'aap noot mies',
|
'notes':'aap noot mies',
|
||||||
'make_plot':False,
|
'make_plot':False,
|
||||||
'upload_to_c2':False,
|
'upload_to_c2':False,
|
||||||
'plottype':'timeplot',
|
'plottype':'timeplot',
|
||||||
'file': f,
|
'file': f,
|
||||||
'user': self.ubasic.id
|
'user': self.ubasic.id
|
||||||
}
|
}
|
||||||
|
|
||||||
response = self.c.post(url, form_data, follow=True)
|
response = self.c.post(url, form_data, follow=True)
|
||||||
f.close()
|
f.close()
|
||||||
@@ -586,20 +591,20 @@ class PermissionsViewTests(TestCase):
|
|||||||
response = self.c.get(url)
|
response = self.c.get(url)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
f = open(filename,'rb')
|
f = open(filename,'rb')
|
||||||
file_data = {'file': f}
|
file_data = {'file': f}
|
||||||
form_data = {
|
form_data = {
|
||||||
'title':'test',
|
'title':'test',
|
||||||
'workouttype':'rower',
|
'workouttype':'rower',
|
||||||
'boattype':'1x',
|
'boattype':'1x',
|
||||||
'notes':'aap noot mies',
|
'notes':'aap noot mies',
|
||||||
'make_plot':False,
|
'make_plot':False,
|
||||||
'upload_to_c2':False,
|
'upload_to_c2':False,
|
||||||
'plottype':'timeplot',
|
'plottype':'timeplot',
|
||||||
'file': f,
|
'file': f,
|
||||||
'user': self.ubasic.id
|
'user': self.ubasic.id
|
||||||
}
|
}
|
||||||
|
|
||||||
response = self.c.post(url, form_data, follow=True)
|
response = self.c.post(url, form_data, follow=True)
|
||||||
f.close()
|
f.close()
|
||||||
@@ -649,7 +654,7 @@ class PermissionsViewTests(TestCase):
|
|||||||
|
|
||||||
form = TeamForm(form_data)
|
form = TeamForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
@@ -671,7 +676,7 @@ class PermissionsViewTests(TestCase):
|
|||||||
|
|
||||||
form = TeamForm(form_data)
|
form = TeamForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
@@ -786,7 +791,7 @@ class PermissionsViewTests(TestCase):
|
|||||||
|
|
||||||
form = TeamForm(form_data)
|
form = TeamForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
@@ -808,7 +813,7 @@ class PermissionsViewTests(TestCase):
|
|||||||
|
|
||||||
form = TeamForm(form_data)
|
form = TeamForm(form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
|
|||||||
+20
-15
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
from rowers.utils import allmonths,allsundays
|
from rowers.utils import allmonths,allsundays
|
||||||
|
|
||||||
@@ -27,7 +32,7 @@ class TrainingPlanTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_createplan(self):
|
def test_createplan(self):
|
||||||
@@ -78,7 +83,7 @@ class TrainingPlanTest(TestCase):
|
|||||||
for url in urls:
|
for url in urls:
|
||||||
if 'macrocycle' in url and 'delete' not in url:
|
if 'macrocycle' in url and 'delete' not in url:
|
||||||
macrourl = url
|
macrourl = url
|
||||||
print macrourl
|
print(macrourl)
|
||||||
response = self.c.get(macrourl)
|
response = self.c.get(macrourl)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
@@ -106,7 +111,7 @@ class TrainingPlanTest(TestCase):
|
|||||||
|
|
||||||
for url in urls:
|
for url in urls:
|
||||||
if 'planbymonths' in url:
|
if 'planbymonths' in url:
|
||||||
print url
|
print(url)
|
||||||
response = self.c.get(url,follow=True)
|
response = self.c.get(url,follow=True)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
|
|
||||||
@@ -120,7 +125,7 @@ class TrainingPlanTest(TestCase):
|
|||||||
|
|
||||||
for url in urls:
|
for url in urls:
|
||||||
if 'planbyweeks' in url and not tested:
|
if 'planbyweeks' in url and not tested:
|
||||||
print url
|
print(url)
|
||||||
response = self.c.get(url,follow=True)
|
response = self.c.get(url,follow=True)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
tested = True
|
tested = True
|
||||||
@@ -153,7 +158,7 @@ class TrainingPlanTest(TestCase):
|
|||||||
'name': faker.word(),
|
'name': faker.word(),
|
||||||
}
|
}
|
||||||
|
|
||||||
print 'posting to sessions/create'
|
print('posting to sessions/create')
|
||||||
|
|
||||||
form = PlannedSessionForm(post_data)
|
form = PlannedSessionForm(post_data)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
@@ -211,7 +216,7 @@ class SessionLinkTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_plannedsessions(self):
|
def test_plannedsessions(self):
|
||||||
@@ -440,7 +445,7 @@ class SessionCompleteTest(TestCase):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
try:
|
try:
|
||||||
os.remove(self.w1.csvfilename)
|
os.remove(self.w1.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_session1_complete(self):
|
def test_session1_complete(self):
|
||||||
@@ -695,7 +700,7 @@ class ChallengeCompleteTest(TestCase):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
try:
|
try:
|
||||||
os.remove(self.w1.csvfilename)
|
os.remove(self.w1.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_challenge1_complete(self):
|
def test_challenge1_complete(self):
|
||||||
@@ -919,7 +924,7 @@ class MandatoryTestCompleteTest(TestCase):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
try:
|
try:
|
||||||
os.remove(self.w1.csvfilename)
|
os.remove(self.w1.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_mandatorytest1_complete(self):
|
def test_mandatorytest1_complete(self):
|
||||||
@@ -1243,7 +1248,7 @@ class PlannedSessionsView(TestCase):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
try:
|
try:
|
||||||
os.remove(self.w1.csvfilename)
|
os.remove(self.w1.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_clone_view(self):
|
def test_clone_view(self):
|
||||||
@@ -1407,17 +1412,17 @@ class PlannedSessionsView(TestCase):
|
|||||||
|
|
||||||
form = PlannedSessionForm(form_data,instance=self.ps_trimp)
|
form = PlannedSessionForm(form_data,instance=self.ps_trimp)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
form = PlannedSessionTeamForm(self.u,form_data)
|
form = PlannedSessionTeamForm(self.u,form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
form = PlannedSessionTeamMemberForm(self.ps_trimp,form_data)
|
form = PlannedSessionTeamMemberForm(self.ps_trimp,form_data)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
response = self.c.post(url,follow=True)
|
response = self.c.post(url,follow=True)
|
||||||
self.assertEqual(response.status_code,200)
|
self.assertEqual(response.status_code,200)
|
||||||
@@ -1555,7 +1560,7 @@ class PlannedSessionsView(TestCase):
|
|||||||
|
|
||||||
form = PlannedSessionForm(form_data,instance=self.ps_time)
|
form = PlannedSessionForm(form_data,instance=self.ps_time)
|
||||||
if not form.is_valid():
|
if not form.is_valid():
|
||||||
print form.errors
|
print(form.errors)
|
||||||
|
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
from rowers.views import hasplannedsessions,iscoachmember,ispromember
|
from rowers.views import hasplannedsessions,iscoachmember,ispromember
|
||||||
@@ -24,7 +29,7 @@ class TrialsTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_basictrial(self):
|
def test_basictrial(self):
|
||||||
|
|||||||
+105
-100
@@ -1,135 +1,140 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
|
|
||||||
|
|
||||||
#@pytest.mark.django_db
|
#@pytest.mark.django_db
|
||||||
class DataTest(TestCase):
|
class DataTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u,gdproptin=True,
|
r = Rower.objects.create(user=u,gdproptin=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
|
|
||||||
def test_workoutform(self):
|
def test_workoutform(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'name':'test',
|
'name':'test',
|
||||||
'date':'2016-05-01',
|
'date':'2016-05-01',
|
||||||
'starttime':'07:53:00',
|
'starttime':'07:53:00',
|
||||||
'timezone':'UTC',
|
'timezone':'UTC',
|
||||||
'duration':'0:55:00.1',
|
'duration':'0:55:00.1',
|
||||||
'distance':8000,
|
'distance':8000,
|
||||||
'notes':'Aap noot \n mies',
|
'notes':'Aap noot \n mies',
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
'adaptiveclass': 'PR1',
|
'adaptiveclass': 'PR1',
|
||||||
'workouttype':'water',
|
'workouttype':'water',
|
||||||
'boattype':'1x',
|
'boattype':'1x',
|
||||||
'private':False,
|
'private':False,
|
||||||
}
|
}
|
||||||
form = WorkoutForm(data=form_data)
|
form = WorkoutForm(data=form_data)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
def test_rower_form_withvalidnumbers(self):
|
def test_rower_form_withvalidnumbers(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'max':192,
|
'max':192,
|
||||||
'rest':48,
|
'rest':48,
|
||||||
'ut2':105,
|
'ut2':105,
|
||||||
'ut1':148,
|
'ut1':148,
|
||||||
'at':160,
|
'at':160,
|
||||||
'tr':167,
|
'tr':167,
|
||||||
'an':180,
|
'an':180,
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
}
|
}
|
||||||
form = RowerForm(data=form_data)
|
form = RowerForm(data=form_data)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
|
|
||||||
def test_rower_form_twoequalvalues(self):
|
def test_rower_form_twoequalvalues(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'max':192,
|
'max':192,
|
||||||
'rest':48,
|
'rest':48,
|
||||||
'ut2':105,
|
'ut2':105,
|
||||||
'ut1':105,
|
'ut1':105,
|
||||||
'at':160,
|
'at':160,
|
||||||
'an':180,
|
'an':180,
|
||||||
'tr':167,
|
'tr':167,
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
}
|
}
|
||||||
form = RowerForm(data=form_data)
|
form = RowerForm(data=form_data)
|
||||||
self.assertFalse(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
|
|
||||||
def test_rower_form_abovemaxallowed(self):
|
def test_rower_form_abovemaxallowed(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'max':300,
|
'max':300,
|
||||||
'rest':48,
|
'rest':48,
|
||||||
'ut2':105,
|
'ut2':105,
|
||||||
'ut1':148,
|
'ut1':148,
|
||||||
'at':160,
|
'at':160,
|
||||||
'an':180,
|
'an':180,
|
||||||
'tr':167,
|
'tr':167,
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
}
|
}
|
||||||
form = RowerForm(data=form_data)
|
form = RowerForm(data=form_data)
|
||||||
self.assertFalse(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
|
|
||||||
def test_rower_form_wrongorder(self):
|
def test_rower_form_wrongorder(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'max':192,
|
'max':192,
|
||||||
'rest':48,
|
'rest':48,
|
||||||
'ut2':20,
|
'ut2':20,
|
||||||
'ut1':148,
|
'ut1':148,
|
||||||
'at':160,
|
'at':160,
|
||||||
'an':180,
|
'an':180,
|
||||||
'tr':167,
|
'tr':167,
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
}
|
}
|
||||||
form = RowerForm(data=form_data)
|
form = RowerForm(data=form_data)
|
||||||
self.assertFalse(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
|
|
||||||
def test_rower_form_belowminalloed(self):
|
def test_rower_form_belowminalloed(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'max':192,
|
'max':192,
|
||||||
'rest':2,
|
'rest':2,
|
||||||
'ut2':105,
|
'ut2':105,
|
||||||
'ut1':148,
|
'ut1':148,
|
||||||
'at':160,
|
'at':160,
|
||||||
'an':180,
|
'an':180,
|
||||||
'tr':167,
|
'tr':167,
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
}
|
}
|
||||||
form = RowerForm(data=form_data)
|
form = RowerForm(data=form_data)
|
||||||
self.assertFalse(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
|
|
||||||
def test_rower_form_wrongorder2(self):
|
def test_rower_form_wrongorder2(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
'max':192,
|
'max':192,
|
||||||
'rest':48,
|
'rest':48,
|
||||||
'ut2':105,
|
'ut2':105,
|
||||||
'ut1':170,
|
'ut1':170,
|
||||||
'at':160,
|
'at':160,
|
||||||
'an':180,
|
'an':180,
|
||||||
'tr':167,
|
'tr':167,
|
||||||
'weightcategory':'lwt',
|
'weightcategory':'lwt',
|
||||||
}
|
}
|
||||||
form = RowerForm(data=form_data)
|
form = RowerForm(data=form_data)
|
||||||
self.assertFalse(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
|
|
||||||
def test_painsled_form(self):
|
def test_painsled_form(self):
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
f = open(filename,'rb')
|
f = open(filename,'rb')
|
||||||
file_data = {'file': SimpleUploadedFile(f.name, f.read())}
|
file_data = {'file': SimpleUploadedFile(f.name, f.read())}
|
||||||
form_data = {
|
form_data = {
|
||||||
'title':'test',
|
'title':'test',
|
||||||
'workouttype':'water',
|
'workouttype':'water',
|
||||||
'boattype':'1x',
|
'boattype':'1x',
|
||||||
'notes':'aap noot mies',
|
'notes':'aap noot mies',
|
||||||
}
|
}
|
||||||
|
|
||||||
form = DocumentsForm(form_data,file_data)
|
form = DocumentsForm(form_data,file_data)
|
||||||
self.assertTrue(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
f.close()
|
f.close()
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -28,7 +33,7 @@ class SimpleViewTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+260
-255
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
|
|
||||||
@@ -7,334 +12,334 @@ nu = datetime.datetime.now()
|
|||||||
class PlotTests(TestCase):
|
class PlotTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
r = Rower.objects.create(user=u)
|
r = Rower.objects.create(user=u)
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
self.wotw = Workout.objects.create(name='testworkout',
|
self.wotw = Workout.objects.create(name='testworkout',
|
||||||
workouttype='water',
|
workouttype='water',
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=filename)
|
csvfilename=filename)
|
||||||
|
|
||||||
self.wote = Workout.objects.create(name='testworkout',
|
self.wote = Workout.objects.create(name='testworkout',
|
||||||
workouttype='Indoor Rower',
|
workouttype='Indoor Rower',
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
duration="0:55:00",distance=8000,
|
duration="0:55:00",distance=8000,
|
||||||
csvfilename=filename)
|
csvfilename=filename)
|
||||||
|
|
||||||
# timestr = strftime("%Y%m%d-%H%M%S")
|
# timestr = strftime("%Y%m%d-%H%M%S")
|
||||||
# imagename = f1+timestr+'.png'
|
# imagename = f1+timestr+'.png'
|
||||||
# fullpathimagename = 'static/plots/'+imagename
|
# fullpathimagename = 'static/plots/'+imagename
|
||||||
powerperc = 100*np.array([r.pw_ut2,
|
powerperc = 100*np.array([r.pw_ut2,
|
||||||
r.pw_ut1,
|
r.pw_ut1,
|
||||||
r.pw_at,
|
r.pw_at,
|
||||||
r.pw_tr,r.pw_an])/r.ftp
|
r.pw_tr,r.pw_an])/r.ftp
|
||||||
|
|
||||||
|
|
||||||
self.hrdata = {
|
self.hrdata = {
|
||||||
'hrmax':r.max,
|
'hrmax':r.max,
|
||||||
'hrut2':r.ut2,
|
'hrut2':r.ut2,
|
||||||
'hrut1':r.ut1,
|
'hrut1':r.ut1,
|
||||||
'hrat':r.at,
|
'hrat':r.at,
|
||||||
'hrtr':r.tr,
|
'hrtr':r.tr,
|
||||||
'hran':r.an,
|
'hran':r.an,
|
||||||
'ftp':r.ftp,
|
'ftp':r.ftp,
|
||||||
'powerperc':serialize_list(powerperc),
|
'powerperc':serialize_list(powerperc),
|
||||||
'powerzones':serialize_list(r.powerzones),
|
'powerzones':serialize_list(r.powerzones),
|
||||||
}
|
}
|
||||||
|
|
||||||
@patch('rowers.tasks.rdata')
|
@patch('rowers.tasks.rdata')
|
||||||
@patch('rowers.tasks.FigureCanvas')
|
@patch('rowers.tasks.FigureCanvas')
|
||||||
def test_ote_plots(self, mocked_rowingdata, mocked_canvas):
|
def test_ote_plots(self, mocked_rowingdata, mocked_canvas):
|
||||||
w = self.wote
|
w = self.wote
|
||||||
f1 = 'testdata.csv'[:-4]
|
f1 = 'testdata.csv'[:-4]
|
||||||
timestr = strftime("%Y%m%d-%H%M%S")
|
timestr = strftime("%Y%m%d-%H%M%S")
|
||||||
imagename = f1+timestr+'.png'
|
imagename = f1+timestr+'.png'
|
||||||
fullpathimagename = 'static/plots/'+imagename
|
fullpathimagename = 'static/plots/'+imagename
|
||||||
# make plot - asynchronous task
|
# make plot - asynchronous task
|
||||||
plotnr = 1
|
plotnr = 1
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 1
|
plotnr = 1
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 2
|
plotnr = 2
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 3
|
plotnr = 3
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 4
|
plotnr = 4
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 5
|
plotnr = 5
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 6
|
plotnr = 6
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 7
|
plotnr = 7
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 8
|
plotnr = 8
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 13
|
plotnr = 13
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@patch('rowers.tasks.rdata')
|
@patch('rowers.tasks.rdata')
|
||||||
@patch('rowers.tasks.FigureCanvas')
|
@patch('rowers.tasks.FigureCanvas')
|
||||||
def test_otw_plots(self, mocked_rowingdata, mocked_canvas):
|
def test_otw_plots(self, mocked_rowingdata, mocked_canvas):
|
||||||
w = self.wotw
|
w = self.wotw
|
||||||
f1 = 'testdata.csv'[:-4]
|
f1 = 'testdata.csv'[:-4]
|
||||||
timestr = strftime("%Y%m%d-%H%M%S")
|
timestr = strftime("%Y%m%d-%H%M%S")
|
||||||
imagename = f1+timestr+'.png'
|
imagename = f1+timestr+'.png'
|
||||||
fullpathimagename = 'static/plots/'+imagename
|
fullpathimagename = 'static/plots/'+imagename
|
||||||
# make plot - asynchronous task
|
# make plot - asynchronous task
|
||||||
plotnr = 1
|
plotnr = 1
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 1
|
plotnr = 1
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 2
|
plotnr = 2
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 3
|
plotnr = 3
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 4
|
plotnr = 4
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 5
|
plotnr = 5
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 6
|
plotnr = 6
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 7
|
plotnr = 7
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 8
|
plotnr = 8
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 9
|
plotnr = 9
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
plotnr = 13
|
plotnr = 13
|
||||||
if (w.workouttype=='water'):
|
if (w.workouttype=='water'):
|
||||||
plotnr = plotnr+3
|
plotnr = plotnr+3
|
||||||
|
|
||||||
res = handle_makeplot(f1,w.csvfilename,
|
res = handle_makeplot(f1,w.csvfilename,
|
||||||
w.name,self.hrdata,plotnr,imagename)
|
w.name,self.hrdata,plotnr,imagename)
|
||||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||||
filename=fullpathimagename)
|
filename=fullpathimagename)
|
||||||
try:
|
try:
|
||||||
os.remove(fullpathimagename)
|
os.remove(fullpathimagename)
|
||||||
except (WindowsError,OSError):
|
except (FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|||||||
+17
-12
@@ -1,4 +1,9 @@
|
|||||||
from statements import *
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .statements import *
|
||||||
|
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
@@ -82,7 +87,7 @@ class TeamTest(TestCase):
|
|||||||
for csvfilename in self.csvfilenames:
|
for csvfilename in self.csvfilenames:
|
||||||
try:
|
try:
|
||||||
os.remove(csvfilename)
|
os.remove(csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_manager_drop_member(self):
|
def test_manager_drop_member(self):
|
||||||
@@ -138,9 +143,9 @@ class TeamTest(TestCase):
|
|||||||
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||||
response = self.c.get(u)
|
response = self.c.get(u)
|
||||||
if response.status_code not in [200,302]:
|
if response.status_code not in [200,302]:
|
||||||
print url
|
print(url)
|
||||||
print u
|
print(u)
|
||||||
print response.status_code
|
print(response.status_code)
|
||||||
self.assertIn(response.status_code,[200,302])
|
self.assertIn(response.status_code,[200,302])
|
||||||
|
|
||||||
login = self.c.login(username=self.users[1].username,
|
login = self.c.login(username=self.users[1].username,
|
||||||
@@ -157,9 +162,9 @@ class TeamTest(TestCase):
|
|||||||
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||||
response = self.c.get(u)
|
response = self.c.get(u)
|
||||||
if response.status_code not in [200,302]:
|
if response.status_code not in [200,302]:
|
||||||
print url
|
print(url)
|
||||||
print u
|
print(u)
|
||||||
print response.status_code
|
print(response.status_code)
|
||||||
self.assertIn(response.status_code,[200,302])
|
self.assertIn(response.status_code,[200,302])
|
||||||
|
|
||||||
def test_teamsview_manager(self):
|
def test_teamsview_manager(self):
|
||||||
@@ -179,9 +184,9 @@ class TeamTest(TestCase):
|
|||||||
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||||
response = self.c.get(u)
|
response = self.c.get(u)
|
||||||
if response.status_code not in [200,302]:
|
if response.status_code not in [200,302]:
|
||||||
print url
|
print(url)
|
||||||
print u
|
print(u)
|
||||||
print response.status_code
|
print(response.status_code)
|
||||||
self.assertIn(response.status_code,[200,302])
|
self.assertIn(response.status_code,[200,302])
|
||||||
|
|
||||||
def test_teamview_member_request(self):
|
def test_teamview_member_request(self):
|
||||||
@@ -290,7 +295,7 @@ class TeamTestLowLevel(TestCase):
|
|||||||
for csvfilename in self.csvfilenames:
|
for csvfilename in self.csvfilenames:
|
||||||
try:
|
try:
|
||||||
os.remove(csvfilename)
|
os.remove(csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, FileNotFoundError,OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_lowlevel_update_team(self):
|
def test_lowlevel_update_team(self):
|
||||||
|
|||||||
+500
-495
File diff suppressed because it is too large
Load Diff
+38
-33
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
|
|
||||||
@@ -13,47 +18,47 @@ tested = [
|
|||||||
class URLTests(TestCase):
|
class URLTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
redis_connection.publish('tasks','KILL')
|
redis_connection.publish('tasks','KILL')
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot',
|
'koeinsloot',
|
||||||
)
|
)
|
||||||
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,
|
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,
|
||||||
gdproptindate=timezone.now())
|
gdproptindate=timezone.now())
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
|
|
||||||
|
self.nu = datetime.datetime.now()
|
||||||
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
self.wotw = Workout.objects.create(name='testworkout',
|
||||||
|
workouttype='water',
|
||||||
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
|
duration="0:55:00",distance=8000,
|
||||||
|
csvfilename=filename)
|
||||||
|
|
||||||
|
self.wote = Workout.objects.create(name='testworkout',
|
||||||
|
workouttype='Indoor Rower',
|
||||||
|
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=self.nu.strftime('%H:%M:%S'),
|
||||||
|
duration="0:55:00",distance=8000,
|
||||||
|
csvfilename=filename)
|
||||||
|
|
||||||
self.nu = datetime.datetime.now()
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
|
||||||
self.wotw = Workout.objects.create(name='testworkout',
|
|
||||||
workouttype='water',
|
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
|
||||||
duration="0:55:00",distance=8000,
|
|
||||||
csvfilename=filename)
|
|
||||||
|
|
||||||
self.wote = Workout.objects.create(name='testworkout',
|
|
||||||
workouttype='Indoor Rower',
|
|
||||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
|
||||||
starttime=self.nu.strftime('%H:%M:%S'),
|
|
||||||
duration="0:55:00",distance=8000,
|
|
||||||
csvfilename=filename)
|
|
||||||
|
|
||||||
powerperc = 100*np.array([r.pw_ut2,
|
powerperc = 100*np.array([r.pw_ut2,
|
||||||
r.pw_ut1,
|
r.pw_ut1,
|
||||||
r.pw_at,
|
r.pw_at,
|
||||||
r.pw_tr,r.pw_an])/r.ftp
|
r.pw_tr,r.pw_an])/r.ftp
|
||||||
|
|
||||||
|
|
||||||
self.hrdata = {
|
self.hrdata = {
|
||||||
'hrmax':r.max,
|
'hrmax':r.max,
|
||||||
'hrut2':r.ut2,
|
'hrut2':r.ut2,
|
||||||
'hrut1':r.ut1,
|
'hrut1':r.ut1,
|
||||||
'hrat':r.at,
|
'hrat':r.at,
|
||||||
'hrtr':r.tr,
|
'hrtr':r.tr,
|
||||||
'hran':r.an,
|
'hran':r.an,
|
||||||
'ftp':r.ftp,
|
'ftp':r.ftp,
|
||||||
'powerperc':serialize_list(powerperc),
|
'powerperc':serialize_list(powerperc),
|
||||||
'powerzones':serialize_list(r.powerzones),
|
'powerzones':serialize_list(r.powerzones),
|
||||||
}
|
}
|
||||||
|
|
||||||
urlstotest = [
|
urlstotest = [
|
||||||
'/rowers/400/',
|
'/rowers/400/',
|
||||||
@@ -98,7 +103,7 @@ class URLTests(TestCase):
|
|||||||
'/rowers/help/',
|
'/rowers/help/',
|
||||||
'/rowers/histo/',
|
'/rowers/histo/',
|
||||||
'/rowers/histo/user/1/',
|
'/rowers/histo/user/1/',
|
||||||
# '/rowers/histo/user/1/2016-01-01/2016-12-31/',
|
# '/rowers/histo/user/1/2016-01-01/2016-12-31/',
|
||||||
'/rowers/histodata/',
|
'/rowers/histodata/',
|
||||||
# '/rowers/job-kill/1/',
|
# '/rowers/job-kill/1/',
|
||||||
# '/rowers/jobs-status/',
|
# '/rowers/jobs-status/',
|
||||||
@@ -259,7 +264,7 @@ class URLTests(TestCase):
|
|||||||
mock_post):
|
mock_post):
|
||||||
|
|
||||||
if url not in tested:
|
if url not in tested:
|
||||||
login = self.c.login(username='john',password='koeinsloot')
|
login = self.c.login(username='john',password='koeinsloot')
|
||||||
self.assertTrue(login)
|
self.assertTrue(login)
|
||||||
response = self.c.get(url,follow=True)
|
response = self.c.get(url,follow=True)
|
||||||
if response.status_code != expected:
|
if response.status_code != expected:
|
||||||
|
|||||||
+37
-32
@@ -1,5 +1,10 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
#from __future__ import print_function
|
#from __future__ import print_function
|
||||||
from statements import *
|
from .statements import *
|
||||||
nu = datetime.datetime.now()
|
nu = datetime.datetime.now()
|
||||||
|
|
||||||
from rowingdata import rowingdata as rdata
|
from rowingdata import rowingdata as rdata
|
||||||
@@ -9,44 +14,44 @@ from rowers.models import User,Rower, Workout
|
|||||||
|
|
||||||
class UserMiddleWareTest(TestCase):
|
class UserMiddleWareTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
self.r = Rower.objects.create(user=u)
|
self.r = Rower.objects.create(user=u)
|
||||||
|
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
self.nu = datetime.datetime.now()
|
self.nu = datetime.datetime.now()
|
||||||
|
|
||||||
filename = 'rowers/tests/testdata/testdata.csv'
|
filename = 'rowers/tests/testdata/testdata.csv'
|
||||||
|
|
||||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||||
hrut1=self.r.ut1,hrat=self.r.at,
|
hrut1=self.r.ut1,hrat=self.r.at,
|
||||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||||
row = rdata(filename,rower=rr)
|
row = rdata(filename,rower=rr)
|
||||||
totaldist = row.df['cum_dist'].max()
|
totaldist = row.df['cum_dist'].max()
|
||||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||||
|
|
||||||
|
|
||||||
hours = int(totaltime/3600.)
|
hours = int(totaltime/3600.)
|
||||||
minutes = int((totaltime - 3600.*hours)/60.)
|
minutes = int((totaltime - 3600.*hours)/60.)
|
||||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||||
|
|
||||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||||
|
|
||||||
|
|
||||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||||
|
|
||||||
self.w = Workout.objects.create(
|
self.w = Workout.objects.create(
|
||||||
name='testworkout',workouttype='water',
|
name='testworkout',workouttype='water',
|
||||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
starttime=workoutstarttime,
|
starttime=workoutstarttime,
|
||||||
startdatetime=row.rowdatetime,
|
startdatetime=row.rowdatetime,
|
||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -57,9 +62,9 @@ class UserMiddleWareTest(TestCase):
|
|||||||
|
|
||||||
class UserTestsNoRower(TestCase):
|
class UserTestsNoRower(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
u = User.objects.create_user('john',
|
u = User.objects.create_user('john',
|
||||||
'sander@ds.ds',
|
'sander@ds.ds',
|
||||||
'koeinsloot')
|
'koeinsloot')
|
||||||
|
|
||||||
self.c = Client()
|
self.c = Client()
|
||||||
self.c.login(username='john',password='koeinsloot')
|
self.c.login(username='john',password='koeinsloot')
|
||||||
@@ -90,7 +95,7 @@ class UserPreferencesTest(TestCase):
|
|||||||
for workout in self.user_workouts:
|
for workout in self.user_workouts:
|
||||||
try:
|
try:
|
||||||
os.remove(workout.csvfilename)
|
os.remove(workout.csvfilename)
|
||||||
except (IOError, WindowsError,OSError):
|
except (IOError, OSError, FileNotFoundError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_accountsettings(self):
|
def test_accountsettings(self):
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
# All the functionality needed to connect to Runkeeper
|
# All the functionality needed to connect to Runkeeper
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
import re
|
import re
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
from rowers.imports import *
|
from rowers.imports import *
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
# for actions related to uploads
|
# for actions related to uploads
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils import timezone,translation
|
from django.utils import timezone,translation
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|||||||
+7
-2
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import math
|
import math
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@@ -201,7 +206,7 @@ def uniqify(seq, idfun=None):
|
|||||||
|
|
||||||
def serialize_list(value,token=','):
|
def serialize_list(value,token=','):
|
||||||
assert(isinstance(value, list) or isinstance(value, tuple) or isinstance(value,np.ndarray))
|
assert(isinstance(value, list) or isinstance(value, tuple) or isinstance(value,np.ndarray))
|
||||||
return token.join([unicode(s) for s in value])
|
return token.join([str(s) for s in value])
|
||||||
|
|
||||||
def deserialize_list(value,token=','):
|
def deserialize_list(value,token=','):
|
||||||
if isinstance(value, list):
|
if isinstance(value, list):
|
||||||
@@ -493,7 +498,7 @@ def allmonths(startdate,enddate):
|
|||||||
d = startdate
|
d = startdate
|
||||||
while d<enddate:
|
while d<enddate:
|
||||||
yield d
|
yield d
|
||||||
d = datetime.date(d.year+(d.month / 12),((d.month % 12) + 1),1)
|
d = datetime.date(d.year+(d.month // 12),((d.month % 12) + 1),1)
|
||||||
|
|
||||||
def allsundays(startdate,enddate):
|
def allsundays(startdate,enddate):
|
||||||
d = startdate
|
d = startdate
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from .analysisviews import *
|
from .analysisviews import *
|
||||||
from .apiviews import *
|
from .apiviews import *
|
||||||
from .errorviews import *
|
from .errorviews import *
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
@@ -2406,7 +2410,7 @@ def multiflex_data(request,userid=0,
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldlist,fielddict = dataprep.getstatsfields()
|
fieldlist,fielddict = dataprep.getstatsfields()
|
||||||
@@ -3021,7 +3025,7 @@ def boxplot_view_data(request,userid=0,
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
# Custom error pages with Rowsandall headers
|
# Custom error pages with Rowsandall headers
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
@@ -31,10 +36,13 @@ def plannedsession_comment_view(request,id=0,userid=0):
|
|||||||
cd = form.cleaned_data
|
cd = form.cleaned_data
|
||||||
comment = cd['comment']
|
comment = cd['comment']
|
||||||
comment = bleach.clean(comment)
|
comment = bleach.clean(comment)
|
||||||
if isinstance(comment,unicode):
|
try:
|
||||||
comment = comment.encode('utf8')
|
if isinstance(comment,unicode):
|
||||||
elif isinstance(comment, str):
|
comment = comment.encode('utf8')
|
||||||
comment = comment.decode('utf8')
|
elif isinstance(comment, str):
|
||||||
|
comment = comment.decode('utf8')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
notification = cd['notification']
|
notification = cd['notification']
|
||||||
c = PlannedSessionComment(plannedsession=ps,user=request.user,comment=comment,
|
c = PlannedSessionComment(plannedsession=ps,user=request.user,comment=comment,
|
||||||
@@ -1216,7 +1224,7 @@ def plannedsessions_manage_view(request,userid=0,
|
|||||||
plannedsessionstuple = []
|
plannedsessionstuple = []
|
||||||
|
|
||||||
for ps in sps:
|
for ps in sps:
|
||||||
sessiontpl = (ps.id,ps.__unicode__())
|
sessiontpl = (ps.id,ps.__str__())
|
||||||
plannedsessionstuple.append(sessiontpl)
|
plannedsessionstuple.append(sessiontpl)
|
||||||
|
|
||||||
plannedsessionstuple = tuple(plannedsessionstuple)
|
plannedsessionstuple = tuple(plannedsessionstuple)
|
||||||
@@ -1227,7 +1235,7 @@ def plannedsessions_manage_view(request,userid=0,
|
|||||||
choices = []
|
choices = []
|
||||||
|
|
||||||
for w in ws:
|
for w in ws:
|
||||||
wtpl = (w.id, w.__unicode__())
|
wtpl = (w.id, w.__str__())
|
||||||
choices.append(wtpl)
|
choices.append(wtpl)
|
||||||
if w.id in initialworkouts:
|
if w.id in initialworkouts:
|
||||||
workoutdata['initial'].append(w.id)
|
workoutdata['initial'].append(w.id)
|
||||||
|
|||||||
+23
-46
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
@@ -182,10 +187,6 @@ def course_edit_view(request,id=0):
|
|||||||
name = form.cleaned_data['name']
|
name = form.cleaned_data['name']
|
||||||
country = form.cleaned_data['country']
|
country = form.cleaned_data['country']
|
||||||
notes = form.cleaned_data['notes']
|
notes = form.cleaned_data['notes']
|
||||||
if isinstance(name,unicode):
|
|
||||||
name = name.encode('utf8')
|
|
||||||
elif isinstance(name, str):
|
|
||||||
name = name.decode('utf8')
|
|
||||||
|
|
||||||
course.name = name
|
course.name = name
|
||||||
course.country = country
|
course.country = country
|
||||||
@@ -1712,25 +1713,14 @@ def indoorvirtualevent_create_view(request):
|
|||||||
dotweet = False
|
dotweet = False
|
||||||
else:
|
else:
|
||||||
dotweet = True
|
dotweet = True
|
||||||
try:
|
sa = SiteAnnouncement(
|
||||||
sa = SiteAnnouncement(
|
announcement = "New Virtual Indoor Race on rowsandall.com: {name}".format(
|
||||||
announcement = "New Virtual Indoor Race on rowsandall.com: {name}".format(
|
name = name,
|
||||||
name = name.encode('utf8'),
|
),
|
||||||
),
|
dotweet = dotweet
|
||||||
dotweet = dotweet
|
)
|
||||||
)
|
|
||||||
|
sa.save()
|
||||||
sa.save()
|
|
||||||
except UnicodeEncodeError:
|
|
||||||
sa = SiteAnnouncement(
|
|
||||||
announcement = "New Virtual Indoor Race on rowsandall.com: {name}".format(
|
|
||||||
name = name,
|
|
||||||
),
|
|
||||||
dotweet = dotweet
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
sa.save()
|
|
||||||
|
|
||||||
url = reverse('virtualevents_view')
|
url = reverse('virtualevents_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
@@ -1845,28 +1835,15 @@ def virtualevent_create_view(request):
|
|||||||
dotweet = False
|
dotweet = False
|
||||||
else:
|
else:
|
||||||
dotweet = True
|
dotweet = True
|
||||||
try:
|
sa = SiteAnnouncement(
|
||||||
sa = SiteAnnouncement(
|
announcement = "New Virtual Race on rowsandall.com: {name} on course {course}".format(
|
||||||
announcement = "New Virtual Race on rowsandall.com: {name} on course {course}".format(
|
name = name,
|
||||||
name = name.encode('utf8'),
|
course = course.name,
|
||||||
course = course.name.encode('utf8')
|
),
|
||||||
),
|
dotweet = dotweet
|
||||||
dotweet = dotweet
|
|
||||||
)
|
)
|
||||||
|
|
||||||
sa.save()
|
sa.save()
|
||||||
except UnicodeEncodeError:
|
|
||||||
sa = SiteAnnouncement(
|
|
||||||
announcement = "New Virtual Race on rowsandall.com: {name} on course {course}".format(
|
|
||||||
name = name,
|
|
||||||
course = str(course.name.encode('utf8','ignore'))
|
|
||||||
),
|
|
||||||
dotweet = dotweet
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
sa.save()
|
|
||||||
|
|
||||||
url = reverse('virtualevents_view')
|
url = reverse('virtualevents_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
else:
|
else:
|
||||||
@@ -2129,7 +2106,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
|||||||
entrychoices = []
|
entrychoices = []
|
||||||
|
|
||||||
for record in records:
|
for record in records:
|
||||||
rtpl = (record.id, record.__unicode__())
|
rtpl = (record.id, record.__str__())
|
||||||
entrychoices.append(rtpl)
|
entrychoices.append(rtpl)
|
||||||
|
|
||||||
entries = {}
|
entries = {}
|
||||||
@@ -2176,7 +2153,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
|||||||
choices = []
|
choices = []
|
||||||
|
|
||||||
for w in ws:
|
for w in ws:
|
||||||
wtpl = (w.id, w.__unicode__())
|
wtpl = (w.id, w.__str__())
|
||||||
choices.append(wtpl)
|
choices.append(wtpl)
|
||||||
if w.id in initialworkouts:
|
if w.id in initialworkouts:
|
||||||
workoutdata['initial'].append(w.id)
|
workoutdata['initial'].append(w.id)
|
||||||
|
|||||||
@@ -726,7 +726,10 @@ def get_stored_tasks_status(request):
|
|||||||
taskstatus = []
|
taskstatus = []
|
||||||
for id,func_name in reversed(taskids):
|
for id,func_name in reversed(taskids):
|
||||||
progress = 0
|
progress = 0
|
||||||
cached_progress = cache.get(id)
|
try:
|
||||||
|
cached_progress = cache.get(id)
|
||||||
|
except ValueError:
|
||||||
|
cached_progress = 0
|
||||||
finished = get_job_status(id)['finished']
|
finished = get_job_status(id)['finished']
|
||||||
if finished:
|
if finished:
|
||||||
cache.set(id,100)
|
cache.set(id,100)
|
||||||
@@ -819,15 +822,26 @@ def get_blog_posts(request):
|
|||||||
image_url = ''
|
image_url = ''
|
||||||
|
|
||||||
|
|
||||||
title = postdata['title']['rendered'].encode(
|
try:
|
||||||
'ascii','xmlcharrefreplace')
|
title = postdata['title']['rendered'].encode(
|
||||||
|
'ascii','xmlcharrefreplace')
|
||||||
|
|
||||||
excerpt = postdata['excerpt']['rendered'].encode(
|
excerpt = postdata['excerpt']['rendered'].encode(
|
||||||
'ascii','xmlcharrefreplace')
|
'ascii','xmlcharrefreplace')
|
||||||
|
|
||||||
ptester = re.compile('\<p\>(\w.*)\<\/p\>')
|
ptester = re.compile('\<p\>(\w.*)\<\/p\>')
|
||||||
excerpt_first = ptester.match(excerpt).group(1)
|
excerpt_first = ptester.match(excerpt).group(1)
|
||||||
|
except TypeError:
|
||||||
|
title = postdata['title']['rendered'].encode(
|
||||||
|
'ascii','xmlcharrefreplace').decode('utf-8')
|
||||||
|
|
||||||
|
excerpt = postdata['excerpt']['rendered'].encode(
|
||||||
|
'ascii','xmlcharrefreplace').decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
ptester = re.compile('\<p\>(\w.*)\<\/p\>')
|
||||||
|
excerpt_first = ptester.match(excerpt).group(1)
|
||||||
|
|
||||||
thedict = {
|
thedict = {
|
||||||
'title': title,
|
'title': title,
|
||||||
'author': '',
|
'author': '',
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from rowers.views.statements import *
|
from rowers.views.statements import *
|
||||||
import rowers.teams as teams
|
import rowers.teams as teams
|
||||||
|
|
||||||
@@ -869,7 +874,7 @@ def virtualevent_compare_view(request,id=0):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
|
|
||||||
chartform = ChartParamChoiceForm(
|
chartform = ChartParamChoiceForm(
|
||||||
@@ -901,7 +906,7 @@ def virtualevent_compare_view(request,id=0):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
raise HttpResponse('Only GET and POST allowed',status=405)
|
raise HttpResponse('Only GET and POST allowed',status=405)
|
||||||
@@ -983,7 +988,7 @@ def plannedsession_compare_view(request,id=0,userid=0):
|
|||||||
ids = [int(w.id) for w in workouts]
|
ids = [int(w.id) for w in workouts]
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
|
|
||||||
xparam = 'time'
|
xparam = 'time'
|
||||||
@@ -1028,7 +1033,7 @@ def multi_compare_view(request,id=0,userid=0):
|
|||||||
request.session['ids'] = ids
|
request.session['ids'] = ids
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1050,7 +1055,7 @@ def multi_compare_view(request,id=0,userid=0):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
elif 'ids' in request.session and 'plottype' in request.session:
|
elif 'ids' in request.session and 'plottype' in request.session:
|
||||||
xparam = request.session['xparam']
|
xparam = request.session['xparam']
|
||||||
@@ -1066,7 +1071,7 @@ def multi_compare_view(request,id=0,userid=0):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
labeldict = {
|
labeldict = {
|
||||||
int(w.id): w.__unicode__() for w in workouts
|
int(w.id): w.__str__() for w in workouts
|
||||||
}
|
}
|
||||||
chartform = ChartParamChoiceForm(
|
chartform = ChartParamChoiceForm(
|
||||||
initial = {
|
initial = {
|
||||||
@@ -2421,12 +2426,12 @@ def workout_data_view(request, id=0):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
# pd.set_option('display.width', 1000)
|
# pd.set_option('display.width', 1000)
|
||||||
pd.set_option('colheader_justify', 'left')
|
#pd.set_option('colheader_justify', 'left')
|
||||||
|
|
||||||
htmltable = datadf.to_html(
|
htmltable = datadf.to_html(
|
||||||
bold_rows=True,
|
bold_rows=True,
|
||||||
show_dimensions=True,border=1,
|
show_dimensions=True,border=1,
|
||||||
classes='pandastable',justify='justify'
|
classes=['pandastable'],justify='justify'
|
||||||
)
|
)
|
||||||
|
|
||||||
return render(request,
|
return render(request,
|
||||||
@@ -2505,7 +2510,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
|
|||||||
fielddict.pop('workoutstate')
|
fielddict.pop('workoutstate')
|
||||||
fielddict.pop('workoutid')
|
fielddict.pop('workoutid')
|
||||||
|
|
||||||
for field,verbosename in fielddict.iteritems():
|
for field,verbosename in fielddict.items():
|
||||||
thedict = {
|
thedict = {
|
||||||
'mean':datadf[field].mean(),
|
'mean':datadf[field].mean(),
|
||||||
'wmean': wavg(datadf, field, 'deltat'),
|
'wmean': wavg(datadf, field, 'deltat'),
|
||||||
@@ -2523,9 +2528,9 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
|
|||||||
cor = datadf.corr(method='spearman')
|
cor = datadf.corr(method='spearman')
|
||||||
cor.fillna(value=0,inplace=True)
|
cor.fillna(value=0,inplace=True)
|
||||||
cordict = {}
|
cordict = {}
|
||||||
for field1,verbosename in fielddict.iteritems():
|
for field1,verbosename in fielddict.items():
|
||||||
thedict = {}
|
thedict = {}
|
||||||
for field2,verbosename in fielddict.iteritems():
|
for field2,verbosename in fielddict.items():
|
||||||
try:
|
try:
|
||||||
thedict[field2] = cor.loc[field1,field2]
|
thedict[field2] = cor.loc[field1,field2]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -3206,10 +3211,14 @@ def workout_comment_view(request,id=0):
|
|||||||
cd = form.cleaned_data
|
cd = form.cleaned_data
|
||||||
comment = cd['comment']
|
comment = cd['comment']
|
||||||
comment = bleach.clean(comment)
|
comment = bleach.clean(comment)
|
||||||
if isinstance(comment,unicode):
|
try:
|
||||||
comment = comment.encode('utf8')
|
if isinstance(comment,unicode):
|
||||||
elif isinstance(comment, str):
|
comment = comment.encode('utf8')
|
||||||
comment = comment.decode('utf8')
|
elif isinstance(comment, str):
|
||||||
|
comment = comment.decode('utf8')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
notification = cd['notification']
|
notification = cd['notification']
|
||||||
c = WorkoutComment(workout=w,user=request.user,comment=comment,
|
c = WorkoutComment(workout=w,user=request.user,comment=comment,
|
||||||
@@ -4973,7 +4982,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
iunits = []
|
iunits = []
|
||||||
itypes = []
|
itypes = []
|
||||||
iresults = []
|
iresults = []
|
||||||
for i in xrange(nrintervals):
|
for i in range(nrintervals):
|
||||||
try:
|
try:
|
||||||
t = datetime.datetime.strptime(request.POST['intervalt_%s' % i],"%H:%M:%S.%f")
|
t = datetime.datetime.strptime(request.POST['intervalt_%s' % i],"%H:%M:%S.%f")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -5037,7 +5046,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
iunits = []
|
iunits = []
|
||||||
itypes = []
|
itypes = []
|
||||||
iresults = []
|
iresults = []
|
||||||
for i in xrange(nrintervals):
|
for i in range(nrintervals):
|
||||||
t = cd['intervalt_%s' % i]
|
t = cd['intervalt_%s' % i]
|
||||||
timesecs = t.total_seconds()
|
timesecs = t.total_seconds()
|
||||||
itime += [timesecs]
|
itime += [timesecs]
|
||||||
@@ -5071,7 +5080,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
|
|
||||||
|
|
||||||
initial = {}
|
initial = {}
|
||||||
for i in xrange(nrintervals):
|
for i in range(nrintervals):
|
||||||
try:
|
try:
|
||||||
initial['intervald_%s' % i] = idist[i]
|
initial['intervald_%s' % i] = idist[i]
|
||||||
initial['intervalt_%s' % i] = get_time(itime[i])
|
initial['intervalt_%s' % i] = get_time(itime[i])
|
||||||
|
|||||||
-18619
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Django settings for rowsandall_app project.
|
Django settings for rowsandall_app project.
|
||||||
@@ -43,7 +47,7 @@ ALLOWED_HOSTS = CFG['allowed_hosts']
|
|||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'rowers',
|
'rowers',
|
||||||
'cvkbrno',
|
# 'cvkbrno',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
@@ -59,7 +63,7 @@ INSTALLED_APPS = [
|
|||||||
'django_mailbox',
|
'django_mailbox',
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
'datetimewidget',
|
'datetimewidget',
|
||||||
# 'rest_framework_swagger',
|
'rest_framework_swagger',
|
||||||
'oauth2_provider',
|
'oauth2_provider',
|
||||||
'corsheaders',
|
'corsheaders',
|
||||||
'analytical',
|
'analytical',
|
||||||
@@ -199,7 +203,7 @@ TZ_DETECT_COUNTRIES = ('US','DE','GB','CZ','FR','IT')
|
|||||||
|
|
||||||
LOCALE_PATHS = (
|
LOCALE_PATHS = (
|
||||||
os.path.join(BASE_DIR, 'locale'),
|
os.path.join(BASE_DIR, 'locale'),
|
||||||
os.path.join(BASE_DIR, 'cvkbrno/locale'),
|
# os.path.join(BASE_DIR, 'cvkbrno/locale'),
|
||||||
)
|
)
|
||||||
|
|
||||||
LANGUAGES = (
|
LANGUAGES = (
|
||||||
|
|||||||
Reference in New Issue
Block a user