Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2022-06-29 20:24:18 +02:00
parent a4926ccc72
commit 76dec8d3ac
8 changed files with 112 additions and 16 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-06-29 15:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('boatmovers', '0013_alter_crew_athletes'),
]
operations = [
migrations.AddField(
model_name='athlete',
name='dummy',
field=models.BooleanField(default=False),
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 3.2.12 on 2022-06-29 17:44
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('boatmovers', '0014_athlete_dummy'),
]
operations = [
migrations.AlterUniqueTogether(
name='athlete',
unique_together={('first_name', 'last_name', 'birth_year', 'gender')},
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-06-29 18:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('boatmovers', '0015_alter_athlete_unique_together'),
]
operations = [
migrations.AddField(
model_name='race',
name='gender',
field=models.CharField(choices=[('m', 'M'), ('f', 'F')], default='m', max_length=200),
),
]

View File

@@ -25,16 +25,20 @@ class Athlete(models.Model):
trueskill_exposed = models.FloatField(default=0) trueskill_exposed = models.FloatField(default=0)
birth_year = models.IntegerField(default=1972) birth_year = models.IntegerField(default=1972)
gender = models.CharField(max_length=200, choices=(('m','M'),('f','F'))) gender = models.CharField(max_length=200, choices=(('m','M'),('f','F')))
dummy = models.BooleanField(default=False)
class Meta: class Meta:
unique_together = ('first_name','last_name','birth_year') unique_together = ('first_name','last_name','birth_year','gender')
def __str__(self): def __str__(self):
return u'{f} {l}'.format(f = self.first_name, l=self.last_name) return u'{f} {l}'.format(f = self.first_name, l=self.last_name)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
name = '{f} {l}'.format(f = self.first_name, l = self.last_name) name = '{f} {l}'.format(f = self.first_name, l = self.last_name)
for a in Athlete.objects.filter(gender=self.gender): athletes = Athlete.objects.filter(gender=self.gender)
if self.pk is not None:
athletes = athletes.exclude(pk=self.pk)
for a in athletes:
aname = '{f} {l}'.format(f = a.first_name, l = a.last_name) aname = '{f} {l}'.format(f = a.first_name, l = a.last_name)
if name == aname: if name == aname:
raise ValidationError("Duplicate:{id}".format(id=a.id)) raise ValidationError("Duplicate:{id}".format(id=a.id))
@@ -78,6 +82,7 @@ class Race(models.Model):
choices=((1,1),(2,2),(4,4),(8,8))) choices=((1,1),(2,2),(4,4),(8,8)))
verified = models.BooleanField(default=False) verified = models.BooleanField(default=False)
processed = models.BooleanField(default=False) processed = models.BooleanField(default=False)
gender = models.CharField(max_length=200,choices=(('m','M'),('f','F')),default='m')
class Meta: class Meta:
unique_together = ('date','name') unique_together = ('date','name')
@@ -106,8 +111,10 @@ class Race(models.Model):
super(Race, self).save(*args, **kwargs) super(Race, self).save(*args, **kwargs)
def validate(self): def validate(self, verbose=False):
if len(self.results.all()) < 2: if len(self.results.all()) < 2:
if verbose:
print('False: Less than 2 results')
self.verified = False self.verified = False
self.save() self.save()
return False return False
@@ -115,11 +122,15 @@ class Race(models.Model):
l = self.results.all()[0].crew.size() l = self.results.all()[0].crew.size()
for result in self.results.all(): for result in self.results.all():
if result.crew.size() != l: if result.crew.size() != l:
if verbose:
print('False: crew {c} has different crew size'.format(c=result.crew))
self.verified = False self.verified = False
self.save() self.save()
return False return False
if l not in [1,2,4,8]: if l not in [1,2,4,8]:
if verbose:
print('False: Crew size not in 1, 2, 4, or 8')
self.verified = False self.verified = False
self.save() self.save()
return False return False
@@ -130,14 +141,19 @@ class Race(models.Model):
for result in results: for result in results:
crews.append(result.crew.id) crews.append(result.crew.id)
for athlete in result.crew.athletes.all(): for athlete in result.crew.athletes.all():
athletes.append(athlete.id) if not athlete.dummy:
athletes.append(athlete.id)
if len(crews) != len(set(crews)): if len(crews) != len(set(crews)):
if verbose:
print('False: Same crew competing twice')
self.verified = False self.verified = False
self.save() self.save()
return False return False
if len(athletes) != len(set(athletes)): if len(athletes) != len(set(athletes)):
if verbose:
print('False: Duplicate athletes')
self.verified = False self.verified = False
self.save() self.save()
return False return False
@@ -196,7 +212,7 @@ class Race(models.Model):
class raceForm(forms.ModelForm): class raceForm(forms.ModelForm):
class Meta: class Meta:
model = Race model = Race
fields = ['name','date','resulturl','crew_size'] fields = ['name','date','resulturl','crew_size','gender']
class Result(models.Model): class Result(models.Model):

View File

@@ -8,7 +8,8 @@ from django.core.exceptions import ValidationError
url_heineken = '' url_heineken = ''
def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos',gender='m'): def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos',gender='m',
startorder=1):
race = Race.objects.get(id=raceid) race = Race.objects.get(id=raceid)
nr = race.crew_size nr = race.crew_size
@@ -26,13 +27,16 @@ def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos',ge
naam = row[df.columns.get_loc(bankjes[i])+1].split(' ') naam = row[df.columns.get_loc(bankjes[i])+1].split(' ')
first_name = ' '.join(naam[:-1]) first_name = ' '.join(naam[:-1])
last_name = naam[-1] last_name = naam[-1]
dummy = False
except AttributeError: except AttributeError:
try: try:
first_name = str(row.Slag) first_name = str(row.Slag)
last_name = '' last_name = ''
dummy=False
except TypeError: except TypeError:
first_name = 'Unknown' first_name = 'Unknown'
last_name = 'Athlete' last_name = 'Athlete'
dummy=True
athletes = Athlete.objects.filter(first_name = first_name, athletes = Athlete.objects.filter(first_name = first_name,
last_name = last_name, last_name = last_name,
gender=gender) gender=gender)
@@ -42,7 +46,8 @@ def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos',ge
athlete = Athlete(first_name=first_name, athlete = Athlete(first_name=first_name,
last_name=last_name, last_name=last_name,
club = crewname, club = crewname,
gender=gender) gender=gender,
dummy=dummy)
try: try:
athlete.save() athlete.save()
except ValidationError as e: except ValidationError as e:
@@ -59,12 +64,15 @@ def csv_reader(filename,raceid,clubcol='Ploeg',bankjes=['Slag'],uitslag='Pos',ge
order = order order = order
) )
try: try:
result.save() if order>=startorder:
result.save()
except ValidationError as e: except ValidationError as e:
print(e) print(e)
print(' ')
def time_team_scraper(url,raceid,gender='m'):
def time_team_scraper(url,raceid,gender='m',startorder=1):
race = Race.objects.get(id=raceid) race = Race.objects.get(id=raceid)
nr = race.crew_size nr = race.crew_size
r = requests.get(url) r = requests.get(url)
@@ -99,13 +107,16 @@ def time_team_scraper(url,raceid,gender='m'):
names = df['naam'][i].split(' ') names = df['naam'][i].split(' ')
first_name = ' '.join(names[:-1]) first_name = ' '.join(names[:-1])
last_name = names[-1] last_name = names[-1]
dummy=False
except AttributeError: except AttributeError:
try: try:
first_name = str(df['naam'][i]) first_name = str(df['naam'][i])
last_name = '' last_name = ''
dummy=False
except TypeError: except TypeError:
first_name = 'Unknown' first_name = 'Unknown'
last_name = 'Athlete' last_name = 'Athlete'
dummy=True
athletes = Athlete.objects.filter(first_name = first_name, athletes = Athlete.objects.filter(first_name = first_name,
last_name = last_name) last_name = last_name)
if len(athletes) >= 1: if len(athletes) >= 1:
@@ -114,7 +125,8 @@ def time_team_scraper(url,raceid,gender='m'):
athlete = Athlete(first_name=first_name, athlete = Athlete(first_name=first_name,
last_name=last_name, last_name=last_name,
club = name, club = name,
gender=gender) gender=gender,
dummy=dummy)
try: try:
athlete.save() athlete.save()
except ValidationError as e: except ValidationError as e:
@@ -130,10 +142,11 @@ def time_team_scraper(url,raceid,gender='m'):
race = race, race = race,
order = order order = order
) )
try: if order >= startorder:
result.save() try:
except ValidationError as e: result.save()
print(e) except ValidationError as e:
print(e)
order += 1 order += 1

View File

@@ -17,6 +17,11 @@
<h1> <h1>
Boat Movers Ranking Boat Movers Ranking
</h1> </h1>
<div>
<a href="/boatmovers/?filter=f">Women</a>
<a href="/boatmovers/?filter=m">Men</a>
<a href="/boatmovers/">All</a>
</div>
<div class="row"> <div class="row">
<div class="column"> <div class="column">
<p> <p>

View File

@@ -13,5 +13,6 @@ urlpatterns = [
url(r'race/(?P<id>\d+)/verify/$',views.race_verify,name='race_verify'), url(r'race/(?P<id>\d+)/verify/$',views.race_verify,name='race_verify'),
url(r'race/(?P<id>\d+)/process/$',views.race_process,name='race_process'), url(r'race/(?P<id>\d+)/process/$',views.race_process,name='race_process'),
url(r'crew/(?P<id>\d+)/$',views.crew_view,name='crew_view'), url(r'crew/(?P<id>\d+)/$',views.crew_view,name='crew_view'),
url(r'^$',views.boatmovers_view,name='boatmovers') url(r'^$',views.boatmovers_view,name='boatmovers'),
#url(r'(?P<filter>\b[0-9A-Fa-f]+\b)/$',views.boatmovers_view,name='boatmovers')
] ]

View File

@@ -56,7 +56,15 @@ class ResultCreateView(CreateView):
success_url = '/boatmovers/' success_url = '/boatmovers/'
def boatmovers_view(request): def boatmovers_view(request):
athletes = Athlete.objects.filter(trueskill_exposed__gt=0).order_by('-trueskill_exposed','-birth_year','last_name','first_name') athletes = Athlete.objects.filter(trueskill_exposed__gt=0,
dummy=False).order_by('-trueskill_exposed','-birth_year','last_name','first_name')
filter = request.GET.get('filter','all')
if filter == 'm':
athletes = athletes.exclude(gender='f')
elif filter == 'f':
athletes = athletes.exclude(gender='m')
races = Race.objects.filter(verified=True,processed=True).order_by('-date') races = Race.objects.filter(verified=True,processed=True).order_by('-date')
new_races = Race.objects.filter(processed=False).order_by('date') new_races = Race.objects.filter(processed=False).order_by('date')