From f94dcec8517c648bb1924e9edda8d265607cf469 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 12 Feb 2019 10:17:37 +0100 Subject: [PATCH] improved courses kml download --- rowers/courses.py | 12 ++ rowers/tests/test_aavirtualevents.py | 166 ++++++++++++++++++++++++++ rowers/tests/testdata/testdata.csv.gz | Bin 12525 -> 11511 bytes rowers/views/racesviews.py | 1 + 4 files changed, 179 insertions(+) diff --git a/rowers/courses.py b/rowers/courses.py index 25e87620..606e9471 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -33,6 +33,11 @@ from rowers.utils import geo_distance ns = {'opengis': 'http://www.opengis.net/kml/2.2'} +xmlns_uris_dict = {'gx': 'http://www.google.com/kml/ext/2.2', + 'kml': 'http://www.google.com/kml/ext/2.2', + 'atom': "http://www.w3.org/2005/Atom", + '': "http://www.opengis.net/kml/2.2"} + from rowers.models import ( Rower, Workout, @@ -91,11 +96,18 @@ def get_polygons(polygonpms): 'points':points }) + return polygons def coursetokml(course): top = Element('kml') + for prefix, uri in xmlns_uris_dict.items(): + if prefix != '': + top.attrib['xmlns:' + prefix] = uri + else: + top.attrib['xmlns'] = uri + document = SubElement(top,'Document') name = SubElement(document, 'name') name.text = 'Courses.kml' diff --git a/rowers/tests/test_aavirtualevents.py b/rowers/tests/test_aavirtualevents.py index de2fce3d..93c046d4 100644 --- a/rowers/tests/test_aavirtualevents.py +++ b/rowers/tests/test_aavirtualevents.py @@ -1,3 +1,169 @@ #from __future__ import print_function from statements import * nu = datetime.datetime.now() + +@override_settings(TESTING=True) +class VirtualEventViewTest(TestCase): + def setUp(self): + # Main User + self.u = UserFactory() + + self.r = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='coach') + + self.c = Client + + self.user_workouts = WorkoutFactory.create_batch(5, user=self.r) + self.factory = RequestFactory() + self.password = faker.word() + self.u.set_password(self.password) + self.u.save() + + # Piet + self.upiet = UserFactory() + + self.rpiet = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='basic') + + self.piet_workouts = WorkoutFactory.create_batch(5, user=self.rpiet) + self.passwordpiet = faker.word() + self.upiet.set_password(self.passwordpiet) + self.upiet.save() + + # Klaas + self.uklaas = UserFactory() + + self.rklaas = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='basic') + + self.klaas_workouts = WorkoutFactory.create_batch(5, user=self.rklaas) + self.passwordklaas = faker.word() + self.uklaas.set_password(self.passwordklaas) + self.uklaas.save() + + # Henk + self.uhenk = UserFactory() + + self.rhenk = Rower.objects.create(user=self.u, + birthdate=faker.profile()['birthdate'], + gdproptin=True,gdproptindate=timezone.now(), + rowerplan='basic') + + self.henk_workouts = WorkoutFactory.create_batch(5, user=self.rhenk) + self.passwordhenk = faker.word() + self.uhenk.set_password(self.passwordhenk) + self.uhenk.save() + + # a few handy dates + yesterday = nu-datetime.timedelta(days=1) + tomorrow = nu+datetime.timedelta(days=1) + nextweek = nu+datetime.timedelta(days=7) + lastweek = nu-datetime.timedelta(days=7) + + # erg races + self.openergrace = VirtualRace.objects.create( + name = faker.word(), + startdate = tomorrow.date(), + endddate = nextweek.date(), + start_time = nu.time(), + end_time = nu.time(), + preferreddate = tomorrow.date(), + comment = faker.text(), + sessiontype = 'indoorrace', + sessionunit = 'm', + sessionmode = 'distance', + sessionvalue = 1000, + course = None, + timezone = 'UTC', + evaluation_closure = nextweek, + registration_closure = tomorrow, + country = 'Indoor', + manager = self.u + ) + + self.submitergrace = VirtualRace.objects.create( + name = faker.word(), + startdate = yesterday.date(), + endddate = nextweek.date(), + start_time = nu.time(), + end_time = nu.time(), + preferreddate = tomorrow.date(), + comment = faker.text(), + sessiontype = 'indoorrace', + sessionunit = 'm', + sessionmode = 'distance', + sessionvalue = 1000, + course = None, + timezone = 'UTC', + evaluation_closure = nextweek, + registration_closure = tomorrow, + country = 'Indoor', + manager = self.u + ) + + # register Piet for submitergrace + record = IndoorVirtualRaceResult.create( + userid = self.rpiet.id, + teamname = faker.word(), + race = self.submitergrace, + username = u'{f} {l}'.format( + f = self.upiet.first_name, + l = self.upiet.last_name + ), + weightcategory='hwt', + adaptiveclass=None, + duration=datetime.time(0,0), + boatclass='rower', + coursecompleted=False, + ) + + result = add_rower_race(self.rpiet,self.submitergrace) + + # register Henk for submitergrace + record = IndoorVirtualRaceResult.create( + userid = self.rhenk.id, + teamname = faker.word(), + race = self.submitergrace, + username = u'{f} {l}'.format( + f = self.uhenk.first_name, + l = self.uhenk.last_name + ), + weightcategory='hwt', + adaptiveclass=None, + duration=datetime.time(0,0), + boatclass='rower', + coursecompleted=False, + ) + + result = add_rower_race(self.rhenk,self.submitergrace) + + + # otw races + # course + # race,with entrants, open for submission + + +workouts +OTW matching course +OTW not matching course +OTE 1k +OTE different +Scenarios +races page +set up new OTE race +set up new otw race +register +withdraw +add boat (OTW) +submit result (OTE) +submit result (OTW) +standalone +calculate course adherence +other background jobs + diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index c4f8dc47ad7298ccdcb09cc4598f689b8f1ac32e..c2095809a9f4089ad79bf13d6975dcd2335de123 100644 GIT binary patch literal 11511 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 literal 12525 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

E>@Zpm<_Jc%b( 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 D631VL diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py index a82a6d17..0425a88c 100644 --- a/rowers/views/racesviews.py +++ b/rowers/views/racesviews.py @@ -437,6 +437,7 @@ def course_upload_view(request): cs = courses.kmltocourse(path_and_filename) + for course in cs: cname = name+' - '+course['name'] cnotes = notes+'\n\n'+course['description']