From 1692d8c2e09224f4015c936207dde793d1dbd16b Mon Sep 17 00:00:00 2001 From: Tomas Gavenciak Date: Wed, 29 Jul 2015 11:46:08 +0200 Subject: [PATCH] Zakladni testy konzistence dat -- pridejte dalsi! --- seminar/templates/seminar/stav_databaze.html | 16 +++++++ seminar/urls.py | 2 + seminar/utils.py | 48 ++++++++++++++++++++ seminar/views.py | 13 +++++- 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 seminar/templates/seminar/stav_databaze.html diff --git a/seminar/templates/seminar/stav_databaze.html b/seminar/templates/seminar/stav_databaze.html new file mode 100644 index 00000000..2484a2ea --- /dev/null +++ b/seminar/templates/seminar/stav_databaze.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block content %} +
+

Stav databáze

+ +

Nastavení

+ +

Problémy

+ {% for p in problemy %} +
{{ p |safe }}
+ {% endfor %} + +
+{% endblock content %} + diff --git a/seminar/urls.py b/seminar/urls.py index 4890a6ba..d6021be5 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -17,6 +17,8 @@ urlpatterns = patterns('', url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'), + url(r'^stav$', views.StavDatabazeView, name='stav_databaze'), + url(r'^aesop-export/mam-rocnik-(?P\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'), url(r'^aesop-export/mam-sous-(?P[\d-]+)\.csv$', export.ExportSousView.as_view(), name='seminar_export_sous'), url(r'^aesop-export/index.csv$', export.ExportIndexView.as_view(), name='seminar_export_index'), diff --git a/seminar/utils.py b/seminar/utils.py index a4a4027a..6676fd84 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +import datetime + roman_numerals = zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1), ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')) @@ -18,3 +20,49 @@ def from_roman(rom): return i + from_roman(rom[len(n):]) raise Exception('Invalid roman numeral: "%s"', rom) + +def seznam_problemu(): + from .models import Problem, Resitel, Rocnik, Reseni, Cislo + problemy = [] + + # Pomocna fce k formatovani problemovych hlasek + def prb(cls, msg, objs=None): + s = u'%s: %s' % (cls.__name__, msg) + if objs: + s += u' [' + for o in objs: + try: + url = o.admin_url() + except: + url = None + if url: + s += u'%s, ' % (url, o.pk, ) + else: + s += u'%s, ' % (o.pk, ) + s = s[:-2] + u']' + problemy.append(s) + + # Duplicita jmen + jmena = {} + for r in Resitel.objects.all(): + j = r.plne_jmeno() + if j not in jmena: + jmena[j] = [] + jmena[j].append(r) + for j in jmena: + if len(jmena[j]) > 1: + prb(Resitel, u'Duplicitní jméno "%s"' % (j, ), jmena[j]) + + # Data maturity a narození + for r in Resitel.objects.all(): + if not r.rok_maturity: + prb(Resitel, u'Neznámý rok maturity', [r]) + if r.rok_maturity and (r.rok_maturity < 1990 or r.rok_maturity > datetime.date.today().year + 10): + prb(Resitel, u'Podezřelé datum maturity', [r]) + if r.datum_narozeni and (r.datum_narozeni.year < 1970 or r.datum_narozeni.year > datetime.date.today().year - 12): + prb(Resitel, u'Podezřelé datum narození', [r]) +# if not r.email: +# prb(Resitel, u'Neznámý email', [r]) + + return problemy + diff --git a/seminar/views.py b/seminar/views.py index f7e099dc..461cf1ba 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext as _ from django.http import Http404 from .models import Problem, Cislo, Reseni, VysledkyKCislu, Nastaveni, Rocnik, Soustredeni, Organizator - +from . import utils def AktualniZadaniView(request): nastaveni = get_object_or_404(Nastaveni) @@ -161,3 +161,14 @@ class SoustredeniListView(generic.ListView): class SoustredeniView(generic.DetailView): model = Soustredeni template_name = 'seminar/archiv/soustredeni.html' + +### Status + +def StavDatabazeView(request): +# nastaveni = Nastaveni.objects.get() + problemy = utils.seznam_problemu() + return render(request, 'seminar/stav_databaze.html', + { +# 'nastaveni': nastaveni, + 'problemy': problemy, + })