From a4926ccc72e988583a792d42b0634a1b4021b532 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 29 Jun 2022 16:35:47 +0200 Subject: [PATCH] better check for duplicate athletes --- boatmovers/models.py | 5 +++++ boatmovers/scrapers.py | 28 +++++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/boatmovers/models.py b/boatmovers/models.py index 616ee1ef..fa119fad 100644 --- a/boatmovers/models.py +++ b/boatmovers/models.py @@ -33,6 +33,11 @@ class Athlete(models.Model): return u'{f} {l}'.format(f = self.first_name, l=self.last_name) def save(self, *args, **kwargs): + name = '{f} {l}'.format(f = self.first_name, l = self.last_name) + for a in Athlete.objects.filter(gender=self.gender): + aname = '{f} {l}'.format(f = a.first_name, l = a.last_name) + if name == aname: + raise ValidationError("Duplicate:{id}".format(id=a.id)) rating = trueskill.Rating(self.trueskill_mu, self.trueskill_sigma) self.trueskill_exposed = trueskill.expose(rating) diff --git a/boatmovers/scrapers.py b/boatmovers/scrapers.py index 8e00011c..44f469c1 100644 --- a/boatmovers/scrapers.py +++ b/boatmovers/scrapers.py @@ -3,11 +3,12 @@ from bs4 import BeautifulSoup import requests from boatmovers.models import * import pandas as pd +from django.core.exceptions import ValidationError url_heineken = '' -def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos'): +def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos',gender='m'): race = Race.objects.get(id=raceid) nr = race.crew_size @@ -33,14 +34,21 @@ def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos'): first_name = 'Unknown' last_name = 'Athlete' athletes = Athlete.objects.filter(first_name = first_name, - last_name = last_name) + last_name = last_name, + gender=gender) if len(athletes) >= 1: athlete = athletes[0] else: athlete = Athlete(first_name=first_name, last_name=last_name, - club = crewname) - athlete.save() + club = crewname, + gender=gender) + try: + athlete.save() + except ValidationError as e: + text, id = e.message.split(':') + athlete = Athlete.objects.get(id=id) + print(athlete) crew.athletes.add(athlete) @@ -56,7 +64,7 @@ def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos'): print(e) -def time_team_scraper(url,raceid): +def time_team_scraper(url,raceid,gender='m'): race = Race.objects.get(id=raceid) nr = race.crew_size r = requests.get(url) @@ -105,8 +113,14 @@ def time_team_scraper(url,raceid): else: athlete = Athlete(first_name=first_name, last_name=last_name, - club = name) - athlete.save() + club = name, + gender=gender) + try: + athlete.save() + except ValidationError as e: + text, id = e.message.split(':') + athlete = Athlete.objects.get(id=id) + print(athlete) crew.athletes.add(athlete)