Skip to content

Commit

Permalink
split base concerns into separate apps
Browse files Browse the repository at this point in the history
  • Loading branch information
djbrown committed Jul 10, 2018
1 parent 0b0d419 commit d61dfd5
Show file tree
Hide file tree
Showing 104 changed files with 1,111 additions and 764 deletions.
Empty file added associations/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions associations/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.contrib import admin

from . import models

admin.site.register(models.Association)
5 changes: 5 additions & 0 deletions associations/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class AssociationsConfig(AppConfig):
name = 'associations'
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{% block title %}{{ association.name }} | {{ super() }}{% endblock %}
{% block content %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ url('associations') }}">Verbände</a></li>
<li class="breadcrumb-item"><a href="{{ url('associations:list') }}">Verbände</a></li>
<li class="breadcrumb-item active"><a>{{ association.abbreviation }}</a></li>
</ol>
<h1>{{ association.name }}&nbsp;<a href="{{ association.source_url() }}"><i class="fas fa-link" title="Datenquelle"></i></a></h1>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{% block title %}Verbände | {{ super() }}{% endblock %}
{% block content %}
<ol class="breadcrumb">
<li class="breadcrumb-item active"><a href="{{ url('associations') }}">Verbände</a></li>
<li class="breadcrumb-item active"><a>Verbände</a></li>
</ol>
<h1>Verbände&nbsp;<a href="https://spo.handball4all.de/"><i class="fas fa-link" title="Datenquelle"></i></a></h1>
<ul>
Expand Down
23 changes: 23 additions & 0 deletions associations/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 2.0.7 on 2018-07-10 23:19

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Association',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(unique=True)),
('abbreviation', models.TextField()),
('bhv_id', models.IntegerField(unique=True)),
],
),
]
Empty file.
22 changes: 22 additions & 0 deletions associations/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from django.conf import settings
from django.db import models
from django.urls import reverse


class Association(models.Model):
name = models.TextField(unique=True)
abbreviation = models.TextField()
bhv_id = models.IntegerField(unique=True)

def __str__(self):
return '{} {}'.format(self.bhv_id, self.abbreviation)

def get_absolute_url(self):
return reverse('associations:detail', kwargs={'bhv_id': self.bhv_id})

@staticmethod
def build_source_url(bhv_id):
return settings.ROOT_SOURCE_URL + 'Spielbetrieb/index.php?orgGrpID={}'.format(bhv_id)

def source_url(self):
return self.build_source_url(self.bhv_id)
11 changes: 11 additions & 0 deletions associations/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.test import TestCase


class TestViews(TestCase):
def test_list(self):
response = self.client.get('/verbaende/')
self.assertEqual(response.status_code, 200)

def test_detail(self):
response = self.client.get('/verbaende/1/')
self.assertEqual(response.status_code, 404)
12 changes: 12 additions & 0 deletions associations/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django.urls import path, include

from .views import list, detail

app_name = 'associations'

urlpatterns = [
path('', list, name='list'),
path('<int:bhv_id>/', include([
path('', detail, name='detail'),
])),
]
13 changes: 13 additions & 0 deletions associations/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from django.shortcuts import render, get_object_or_404

from .models import Association


def list(request):
associations = Association.objects.all()
return render(request, 'associations/list.html', {'associations': associations})


def detail(request, bhv_id):
association = get_object_or_404(Association, bhv_id=bhv_id)
return render(request, 'associations/detail.html', {'association': association})
9 changes: 0 additions & 9 deletions base/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,3 @@
from base.models import *

admin.site.register(Env)
admin.site.register(Association)
admin.site.register(District)
admin.site.register(League)
admin.site.register(Season)
admin.site.register(Team)
admin.site.register(Player)
admin.site.register(SportsHall)
admin.site.register(Game)
admin.site.register(Score)
4 changes: 2 additions & 2 deletions base/jinja2/base/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<a id="nav-statistics" class="nav-link dropdown-toggle" href="#/" data-toggle="dropdown">Statistik</a>
<div class="dropdown-menu">
<a class="dropdown-item disabled" href="#/">Tabellen & Begegnungen</a>
<a class="dropdown-item active" href="{{ url('associations') }}">Torjäger</a>
<a class="dropdown-item active" href="{{ url('associations:list') }}">Torjäger</a>
<a class="dropdown-item disabled" href="#/">Torhüter</a>
<a class="dropdown-item disabled" href="#/">Strafen</a>
<a class="dropdown-item disabled" href="#/">Rekorde</a>
Expand Down Expand Up @@ -76,7 +76,7 @@
<a class="nav-link disabled" href="#/">Tabellen & Begegnungen</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="{{ url('associations') }}">Torjäger</a>
<a class="nav-link active" href="{{ url('associations:list') }}">Torjäger</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#/">Torhüter</a>
Expand Down
2 changes: 1 addition & 1 deletion base/jinja2/base/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ <h1>HbScorez entdecken</h1>
<div class="col-6 col-sm-3 placeholder">
<img src="{{ static('base/images/thumbnail-players.png') }}" width="200"
height="200" class="img-fluid rounded-circle" alt="Torjäger">
<a class="btn btn-lg btn-block btn-primary" href="{{ url('associations') }}">Torjäger</a>
<a class="btn btn-lg btn-block btn-primary" href="{{ url('associations:list') }}">Torjäger</a>
</div>
<div class="col-6 col-sm-3 placeholder">
<img src="{{ static('base/images/thumbnail-in-progress.png') }}" width="200"
Expand Down
13 changes: 0 additions & 13 deletions base/jinja2/base/league/overview.html

This file was deleted.

25 changes: 13 additions & 12 deletions base/logic.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import re
# import time
from typing import Callable

import requests
from django.db import transaction
from lxml import html

from base import models
from games.models import Game
from players.models import Player, Score
from teams.models import Team


def get_html(url):
Expand Down Expand Up @@ -67,21 +68,21 @@ def move_player(team_bhv_id: int, old_name: str, new_name: str, log_fun: Callabl
log_fun("SKIPPING: identical names")
return

team_matches = models.Team.objects.filter(bhv_id=team_bhv_id)
team_matches = Team.objects.filter(bhv_id=team_bhv_id)
if not team_matches.exists():
log_fun("SKIPPING: team not found")
return

team = team_matches[0]

old_player_matches = models.Player.objects.filter(name=old_name, team=team)
old_player_matches = Player.objects.filter(name=old_name, team=team)
if not old_player_matches.exists():
log_fun("SKIPPING: player not found")
return

old_player = old_player_matches[0]

new_player, created = models.Player.objects.get_or_create(name=new_name, team=team)
new_player, created = Player.objects.get_or_create(name=new_name, team=team)

for score in old_player.score_set.all():
score.player = new_player
Expand All @@ -90,26 +91,26 @@ def move_player(team_bhv_id: int, old_name: str, new_name: str, log_fun: Callabl
log_fun("RENAMED Player: {} to {}".format(old_player, new_player))


def add_score(game: models.Game, team: models.Team, player_name: str, player_number: int,
def add_score(game: Game, team: Team, player_name: str, player_number: int,
goals: int = 0, penalty_goals: int = 0, penalty_tries: int = 0,
warning_time: str = None, first_suspension_time: str = None, second_suspension_time: str = None,
third_suspension_time: str = None, disqualification_time: str = None, report_time: str = None,
team_suspension_time: str = None, log_fun: Callable = print):
log_fun('CREATING Score: {} {}'.format(game, player_name))

divided_players = team.player_set.filter(name__regex="^{} \(\d+\)$".format(player_name))
duplicate_scores = models.Score.objects.filter(player__name=player_name, player__team=team, game=game)
duplicate_scores = Score.objects.filter(player__name=player_name, player__team=team, game=game)
if divided_players.exists() or duplicate_scores.exists():
split_by_number(player_name, team)
player_name = '{} ({})'.format(player_name, player_number)

player, created = models.Player.objects.get_or_create(name=player_name, team=team)
player, created = Player.objects.get_or_create(name=player_name, team=team)
if created:
log_fun('CREATED Player: {}'.format(player))
else:
log_fun('EXISTING Player: {}'.format(player))

models.Score.objects.create(
Score.objects.create(
player=player,
player_number=player_number,
game=game,
Expand All @@ -127,18 +128,18 @@ def add_score(game: models.Game, team: models.Team, player_name: str, player_num


@transaction.atomic
def split_by_number(original_name: str, team: models.Team, log_fun: Callable = print):
def split_by_number(original_name: str, team: Team, log_fun: Callable = print):
log_fun("DIVIDING Player: {} ({})".format(original_name, team))

matches = models.Player.objects.filter(name=original_name, team=team)
matches = Player.objects.filter(name=original_name, team=team)
if not matches.exists():
log_fun("SKIPPING Player (not found): {} ({})".format(original_name, team))
return

original_player = matches[0]
for score in original_player.score_set.all():
new_name = "{} ({})".format(original_player.name, score.player_number)
new_player, created = models.Player.objects.get_or_create(name=new_name, team=original_player.team)
new_player, created = Player.objects.get_or_create(name=new_name, team=original_player.team)
if created:
log_fun("CREATED Player: {}".format(new_player))
score.player = new_player
Expand Down

0 comments on commit d61dfd5

Please sign in to comment.