testutils: doplnění komentářů, debugování.
Aktuálně je to zaseklé na neexistenci čísel při generování témat při generování čísel. Je potřeba to odděli do samostatné funkce, která dostane už nagenerovaná čísla.
This commit is contained in:
parent
d14acdd77e
commit
11ef242141
1 changed files with 80 additions and 44 deletions
|
@ -6,12 +6,13 @@ import django.contrib.auth
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
import unidecode
|
import unidecode
|
||||||
|
|
||||||
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Osoba, Organizator
|
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Osoba, Organizator, Prijemce, Tema, Uloha
|
||||||
|
|
||||||
from django.contrib.flatpages.models import FlatPage
|
from django.contrib.flatpages.models import FlatPage
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
|
|
||||||
User = django.contrib.auth.get_user_model()
|
User = django.contrib.auth.get_user_model()
|
||||||
|
zlinska = None # tohle bude speciální škola, které později dodáme kontaktní osobu
|
||||||
|
|
||||||
def gen_osoby(rnd, size):
|
def gen_osoby(rnd, size):
|
||||||
jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel']
|
jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel']
|
||||||
|
@ -34,7 +35,9 @@ def gen_osoby(rnd, size):
|
||||||
'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza']
|
'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza']
|
||||||
|
|
||||||
osoby = []
|
osoby = []
|
||||||
for i in range(3 * size): # 3 je náhodná konstanta, size je použité na víc místech a říká, jak velká asi chceme testovací data
|
# 3 je náhodná konstanta, size je použité na víc místech a
|
||||||
|
# říká, jak velká asi chceme testovací data
|
||||||
|
for i in range(3 * size):
|
||||||
pohlavi = rnd.randint(0,1)
|
pohlavi = rnd.randint(0,1)
|
||||||
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi])
|
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi])
|
||||||
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi])
|
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi])
|
||||||
|
@ -77,10 +80,12 @@ def gen_skoly(): #TODO někdy to přepsat, aby jich bylo více
|
||||||
skoly.append(Skola.objects.create(mesto='Humenné', stat='SK', psc='012 34',
|
skoly.append(Skola.objects.create(mesto='Humenné', stat='SK', psc='012 34',
|
||||||
ulice='Pltká 1', nazev='Sredná škuola', je_zs=False, je_ss=True))
|
ulice='Pltká 1', nazev='Sredná škuola', je_zs=False, je_ss=True))
|
||||||
#FIXME pridat kontaktni osobu alespon nekde
|
#FIXME pridat kontaktni osobu alespon nekde
|
||||||
skoly.append(Skola.objects.create(mesto = 'Zlín', stat='CZ', psc='76001',
|
global zlinska
|
||||||
|
zlinska = Skola.objects.create(mesto = 'Zlín', stat='CZ', psc='76001',
|
||||||
ulice='náměstí T.G. Masaryka 2734-9',
|
ulice='náměstí T.G. Masaryka 2734-9',
|
||||||
nazev='Gymnázium a Střední jazyková škola s právem SJZ',
|
nazev='Gymnázium a Střední jazyková škola s právem SJZ',
|
||||||
kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True))
|
kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True)
|
||||||
|
skoly.append(zlinska)
|
||||||
return skoly
|
return skoly
|
||||||
|
|
||||||
def gen_resitele(rnd, osoby, skoly):
|
def gen_resitele(rnd, osoby, skoly):
|
||||||
|
@ -106,17 +111,20 @@ def gen_organizatori(rnd, osoby, last_rocnik, users):
|
||||||
rand = rnd.randint(0, 8)
|
rand = rnd.randint(0, 8)
|
||||||
if (rand % 8 == 0):
|
if (rand % 8 == 0):
|
||||||
pusobnost = rnd.randint(1, last_rocnik)
|
pusobnost = rnd.randint(1, last_rocnik)
|
||||||
od = 1993 + pusobnost
|
od = datetime.date(1993 + pusobnost, rnd.randint(1, 12), rnd.randint(1, 28))
|
||||||
do = od + rnd.randint(1, 6)
|
do = datetime.date(od.year + rnd.randint(1, 6), rnd.randint(1, 12),
|
||||||
|
rnd.randint(1, 28))
|
||||||
#aktualni organizatori jeste nemaji vyplnene organizuje_do
|
#aktualni organizatori jeste nemaji vyplnene organizuje_do
|
||||||
if do > datetime.datetime.now().year:
|
if do.year > datetime.datetime.now().year:
|
||||||
do = None
|
do = None
|
||||||
organizatori.append(Organizator.objects.create(osoba=os,
|
organizatori.append(Organizator.objects.create(osoba=os,
|
||||||
organizuje_od=od, organizuje_do=do))
|
organizuje_od=od, organizuje_do=do))
|
||||||
return organizatori
|
return organizatori
|
||||||
|
|
||||||
def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
|
def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
|
||||||
'''cislo = cislo cisla v rocniku, nikoli objekt Cislo '''
|
'''
|
||||||
|
cislo = cislo cisla v rocniku, nikoli objekt Cislo
|
||||||
|
'''
|
||||||
# ulohy resene v ci
|
# ulohy resene v ci
|
||||||
jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá",
|
jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá",
|
||||||
"Zákeřná", "Fyzikální"]
|
"Zákeřná", "Fyzikální"]
|
||||||
|
@ -138,23 +146,25 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
|
||||||
|
|
||||||
if cislo >= 3:
|
if cislo >= 3:
|
||||||
for pi in range(1, ((size + 1) // 2) + 1):
|
for pi in range(1, ((size + 1) // 2) + 1):
|
||||||
poc_op = rnd.randint(1, 4) #počet opravovatelů
|
poc_op = rnd.randint(1, 4) # počet opravovatelů
|
||||||
poc_oboru = rnd.randint(1, 2)
|
poc_oboru = rnd.randint(1, 2)
|
||||||
p = Uloha.objects.create(
|
p = Uloha.objects.create(
|
||||||
|
# atributy třídy Problem
|
||||||
nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]),
|
nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]),
|
||||||
stav=Problem.STAV_ZADANY,
|
stav=Problem.STAV_ZADANY,
|
||||||
zamereni=rnd.sample(zamereni, poc_oboru),
|
zamereni=rnd.sample(zamereni, poc_oboru),
|
||||||
autor=rnd.choice(organizatori),
|
autor=rnd.choice(organizatori),
|
||||||
garant=rnd.choice(organizatori),
|
garant=rnd.choice(organizatori),
|
||||||
opravovatele=rnd.sample(organizatori, poc_op),
|
|
||||||
kod=str(pi),
|
kod=str(pi),
|
||||||
|
# atributy třídy Uloha
|
||||||
cislo_zadani=slovnik_cisel[cislo-2],
|
cislo_zadani=slovnik_cisel[cislo-2],
|
||||||
cislo_reseni=slovnik_cisel[cislo],
|
cislo_reseni=slovnik_cisel[cislo],
|
||||||
cislo_deadline=slovnik_cisel[cislo],
|
cislo_deadline=slovnik_cisel[cislo],
|
||||||
max_body = rnd.randint(1, 8))
|
max_body = rnd.randint(1, 8))
|
||||||
p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),
|
p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),
|
||||||
rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)])
|
rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)])
|
||||||
p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])
|
p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])
|
||||||
|
p.opravovatele = rnd.sample(organizatori, poc_op)
|
||||||
p.save()
|
p.save()
|
||||||
|
|
||||||
# reseni ulohy
|
# reseni ulohy
|
||||||
|
@ -164,15 +174,22 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size):
|
||||||
# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni)
|
# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni)
|
||||||
res_vyber = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2))
|
res_vyber = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2))
|
||||||
for resitel in res_vyber:
|
for resitel in res_vyber:
|
||||||
res = Reseni.objects.create(problem = p,
|
# problem a resitele přiřadíme později, ManyToManyField
|
||||||
resitele=[resitel],
|
# se nedá vyplnit v create()
|
||||||
forma=rnd.choice(Reseni.FORMA_CHOICES))
|
res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES))
|
||||||
hod = Hodnoceni.objects.create(body=rnd.randint(0, p.max_body),
|
res.resitele = [resitel]
|
||||||
cislo_body=slovnik_cisel[cislo], reseni=res, problem=p)
|
res.problem = p
|
||||||
|
res.save()
|
||||||
|
hod = Hodnoceni.objects.create(
|
||||||
|
body=rnd.randint(0, p.max_body),
|
||||||
|
cislo_body=slovnik_cisel[cislo],
|
||||||
|
reseni=res, problem=p)
|
||||||
return
|
return
|
||||||
|
|
||||||
def gen_soustredeni():
|
def gen_soustredeni():
|
||||||
# TODO: vice soustredeni a k nim nahodne podmnoziny organizatoru a ucastniku
|
# TODO: vice soustredeni a k nim nahodne podmnoziny organizatoru a ucastniku
|
||||||
|
# TODO: pozor, organizatori a ucastnici jsou ManyToManyField, musí se přiřadit
|
||||||
|
# mimo create() a pak dát save()
|
||||||
sous = Soustredeni.objects.create(rocnik=Rocnik.objects.first(), verejne_db=True,
|
sous = Soustredeni.objects.create(rocnik=Rocnik.objects.first(), verejne_db=True,
|
||||||
misto=u'Někde', datum_zacatku=datetime.date(2000, 11, 23),
|
misto=u'Někde', datum_zacatku=datetime.date(2000, 11, 23),
|
||||||
datum_konce=datetime.date(2000, 11, 27))
|
datum_konce=datetime.date(2000, 11, 27))
|
||||||
|
@ -181,8 +198,6 @@ def gen_soustredeni():
|
||||||
Soustredeni_Ucastnici.objects.create(resitel=res, soustredeni=sous)
|
Soustredeni_Ucastnici.objects.create(resitel=res, soustredeni=sous)
|
||||||
sous.save()
|
sous.save()
|
||||||
|
|
||||||
nastaveni = Nastaveni.objects.create(aktualni_rocnik = Rocnik.objects.last(),
|
|
||||||
aktualni_cislo = Cislo.objects.all()[1])
|
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def create_test_data(size = 6, rnd = None):
|
def create_test_data(size = 6, rnd = None):
|
||||||
|
@ -222,8 +237,9 @@ def create_test_data(size = 6, rnd = None):
|
||||||
organizatori = gen_organizatori(rnd, osoby, last_rocnik, users)
|
organizatori = gen_organizatori(rnd, osoby, last_rocnik, users)
|
||||||
|
|
||||||
# prijemci
|
# prijemci
|
||||||
prijemci = gen_prijemci(rnd)
|
prijemci = gen_prijemci(rnd, osoby)
|
||||||
|
|
||||||
|
global zlinska
|
||||||
zlinska.kontaktni_osoba=rnd.choice(osoby)
|
zlinska.kontaktni_osoba=rnd.choice(osoby)
|
||||||
zlinska.save()
|
zlinska.save()
|
||||||
|
|
||||||
|
@ -235,17 +251,25 @@ def create_test_data(size = 6, rnd = None):
|
||||||
cisel = rnd.randint(4, 8)
|
cisel = rnd.randint(4, 8)
|
||||||
slovnik_cisel = {}
|
slovnik_cisel = {}
|
||||||
for ci in range(1, cisel + 1):
|
for ci in range(1, cisel + 1):
|
||||||
if ci >= 3:
|
# první číslo vydáváme typicky okolo prázdnin
|
||||||
vydano = datetime.date(r.prvni_rok, ci + 6, rnd.randint(1, 28))
|
# (ci - 1)*2 zaručuje první číslo v červnu a všechna
|
||||||
deadline = datetime.date(r.prvni_rok, ci + 8, rnd.randint(1, 28))
|
# další po dvou měsících (což je rozumná aproximace)
|
||||||
else:
|
mesic_vydani = (ci - 1)*2 + 6
|
||||||
vydano = datetime.date(r.druhy_rok, ci - 3, rnd.randint(1, 28))
|
# celociselné dělení mi řekne, jestli to je první nebo druhý rok ročníku
|
||||||
# posledni 2 cisla v rocniku nemaji deadline
|
vydano = datetime.date(r.prvni_rok + mesic_vydani // 12,
|
||||||
if (ci + 2 > cisel):
|
mesic_vydani,
|
||||||
deadline = datetime.date(r.druhy_rok, ci - 1,
|
rnd.randint(1, 28))
|
||||||
rnd.randint(1, 28))
|
deadline = datetime.date(r.prvni_rok + (mesic_vydani + 2) // 12,
|
||||||
else:
|
mesic_vydani + 2,
|
||||||
deadline = None
|
rnd.randint(1, 28))
|
||||||
|
|
||||||
|
# posledni 2 cisla v rocniku nemaji deadline
|
||||||
|
if (ci + 2 > cisel):
|
||||||
|
deadline = datetime.date(r.druhy_rok, ci - 1,
|
||||||
|
rnd.randint(1, 28))
|
||||||
|
else:
|
||||||
|
deadline = None
|
||||||
|
|
||||||
cislo = Cislo.objects.create(rocnik = r, cislo = str(ci),
|
cislo = Cislo.objects.create(rocnik = r, cislo = str(ci),
|
||||||
datum_vydani=vydano, datum_deadline=deadline,
|
datum_vydani=vydano, datum_deadline=deadline,
|
||||||
verejne_db=True)
|
verejne_db=True)
|
||||||
|
@ -254,7 +278,8 @@ def create_test_data(size = 6, rnd = None):
|
||||||
# generovani uloh
|
# generovani uloh
|
||||||
gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size)
|
gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size)
|
||||||
|
|
||||||
# generovani temat
|
# generování témat, zatím v prvních třech číslech po jednom
|
||||||
|
# FIXME: více témat
|
||||||
if ci <= 3:
|
if ci <= 3:
|
||||||
jake = ["Hravé", "Fyzikální", "Nejlepší", "Totálně masakrální",
|
jake = ["Hravé", "Fyzikální", "Nejlepší", "Totálně masakrální",
|
||||||
"Šokující", "Magnetické", "Modré", "Překvapivé",
|
"Šokující", "Magnetické", "Modré", "Překvapivé",
|
||||||
|
@ -264,31 +289,42 @@ def create_test_data(size = 6, rnd = None):
|
||||||
poc_oboru = rnd.randint(1, 2)
|
poc_oboru = rnd.randint(1, 2)
|
||||||
poc_op = rnd.randint(1, 3)
|
poc_op = rnd.randint(1, 3)
|
||||||
t = Tema.objects.create(
|
t = Tema.objects.create(
|
||||||
|
# atributy třídy Problem
|
||||||
nazev=" ".join([rnd.choice(jake), rnd.choice(co)]),
|
nazev=" ".join([rnd.choice(jake), rnd.choice(co)]),
|
||||||
stav=Problem.STAV_ZADANY,
|
stav=Problem.STAV_ZADANY,
|
||||||
zamereni=rnd.sample(zamereni, poc_oboru),
|
zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru),
|
||||||
autor=rnd.choice(organizatori),
|
autor=rnd.choice(organizatori),
|
||||||
garant=rnd.choice(organizatori),
|
garant=rnd.choice(organizatori),
|
||||||
opravovatele=rnd.sample(organizatori, poc_op),
|
# FIXME: téma má kód podle čísla, až jich bude
|
||||||
kod=str(pi),
|
# více, tak udělat kód podle pořadí vygenerování
|
||||||
|
kod=str(ci),
|
||||||
|
# atributy třídy Téma
|
||||||
tema_typ=rnd.choice(Tema.TEMA_CHOICES),
|
tema_typ=rnd.choice(Tema.TEMA_CHOICES),
|
||||||
rocnik=r)
|
rocnik=r)
|
||||||
|
|
||||||
|
t.opravovatele=rnd.sample(organizatori, poc_op)
|
||||||
|
t.save()
|
||||||
|
|
||||||
|
# FIXME: nefunguje, protože další čísla v tuhle chvíli ještě
|
||||||
|
# nejsou nagenerovaná
|
||||||
# nagenerovat k tématu úlohy a Nody pro vsechna cisla
|
# nagenerovat k tématu úlohy a Nody pro vsechna cisla
|
||||||
for i in range(ci, cisel):
|
for i in range(ci, cisel-2):
|
||||||
# vytvor ulohu
|
# vytvoř úlohu pro každé ze zbývajících čísel
|
||||||
poc_op = rnd.randint(1, 4)
|
poc_op = rnd.randint(1, 4)
|
||||||
poc_oboru = rnd.randint(1, 2)
|
poc_oboru = rnd.randint(1, 2)
|
||||||
p = Uloha.objects.create(
|
p = Uloha.objects.create(
|
||||||
nazev=": ".join([t.nazev, "úloha {}.".format(i)]),
|
nazev=": ".join([t.nazev,
|
||||||
|
"úloha {}.".format(i-ci+1)]),
|
||||||
|
nadproblem=t,
|
||||||
stav=Problem.STAV_ZADANY,
|
stav=Problem.STAV_ZADANY,
|
||||||
zamereni=t.zamereni,
|
zamereni=t.zamereni,
|
||||||
autor=t.autor,
|
autor=t.autor,
|
||||||
garant=t.garant,
|
garant=t.garant,
|
||||||
opravovatele=rnd.sample(organizatori, poc_op),
|
opravovatele=rnd.sample(organizatori, poc_op),
|
||||||
kod=str(i),
|
kod=str(i),
|
||||||
cislo_zadani=slovnik_cisel[cislo-2],
|
cislo_zadani=slovnik_cisel[ci],
|
||||||
cislo_reseni=slovnik_cisel[cislo],
|
cislo_reseni=slovnik_cisel[ci+2],
|
||||||
cislo_deadline=slovnik_cisel[cislo],
|
cislo_deadline=slovnik_cisel[ci+2],
|
||||||
max_body = rnd.randint(1, 8))
|
max_body = rnd.randint(1, 8))
|
||||||
p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),
|
p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),
|
||||||
rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)])
|
rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)])
|
||||||
|
@ -310,6 +346,6 @@ def create_test_data(size = 6, rnd = None):
|
||||||
|
|
||||||
# TODO: nahodne nagenerovat problemum reseni a prilohy reseni, hodnoceni
|
# TODO: nahodne nagenerovat problemum reseni a prilohy reseni, hodnoceni
|
||||||
|
|
||||||
|
# obecné nastavení semináře, musí být už přidané ročníky a čísla, jinak se nastaví divně
|
||||||
|
nastaveni = Nastaveni.objects.create(aktualni_rocnik = Rocnik.objects.last(),
|
||||||
|
aktualni_cislo = Cislo.objects.all()[1])
|
||||||
|
|
Loading…
Reference in a new issue