diff --git a/seminar/testutils.py b/seminar/testutils.py index ebc84737..43258ab2 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -7,7 +7,7 @@ import django.contrib.auth from django.db import transaction import unidecode -from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, KonferaNode, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode +from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, KonferaNode, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text from django.contrib.flatpages.models import FlatPage from django.contrib.sites.models import Site @@ -102,11 +102,8 @@ def gen_resitele(rnd, osoby, skoly): def gen_prijemci(rnd, osoby, kolik=10): prijemci = [] - osoby = [] - for i in range(kolik): - osoby.append(rnd.choice(osoby)) - for i in range(kolik): - prijemci.append(Prijemce.objects.create(osoba=osoby[i])) + for i in rnd.sample(osoby, kolik): + prijemci.append(Prijemce.objects.create(osoba=i)) return prijemci def gen_organizatori(rnd, osoby, last_rocnik, users): @@ -153,7 +150,7 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): # atributy třídy Problem nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]), stav=Problem.STAV_ZADANY, - zamereni=rnd.sample(zamereni, poc_oboru), + zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru), autor=rnd.choice(organizatori), garant=rnd.choice(organizatori), kod=str(pi), @@ -178,9 +175,12 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): ) vzorak = TextNode.objects.create(text = text_vzoraku) uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) - p.UlohaVzorakNode = uloha_vzorak + p.ulohavzoraknode = uloha_vzorak - p.opravovatele = rnd.sample(organizatori, poc_op) + + for org in rnd.sample(organizatori, poc_op): + p.opravovatele_ulohas.objects.create(org) + # p.opravovatele.set(rnd.sample(organizatori,poc_op)) p.save() # reseni ulohy @@ -229,6 +229,7 @@ def gen_rocniky(last_rocnik, size): for ri in range(min(last_rocnik - size, 1), last_rocnik + 1): rocnik = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) node2 = RocnikNode.objects.create(rocnik = rocnik, succ = node) + rocnik.save() node = node2 rocniky.append(rocnik) return rocniky @@ -253,7 +254,7 @@ def gen_konfery(rnd, reseni, organizatori, ucastnici, soustredeni): konferanode.save() return konfery -def gen_cisla(rocniky): +def gen_cisla(rnd, rocniky): slovnik_rocnik_cisla = {} for rocnik in rocniky: otec = True @@ -266,11 +267,11 @@ def gen_cisla(rocniky): # další po dvou měsících (což je rozumná aproximace) mesic_vydani = (ci - 1)*2 + 6 # celociselné dělení mi řekne, jestli to je první nebo druhý rok ročníku - vydano = datetime.date(r.prvni_rok + mesic_vydani // 12, - mesic_vydani, + vydano = datetime.date(rocnik.prvni_rok + mesic_vydani // 12, + (mesic_vydani - 1) % 12 + 1, rnd.randint(1, 28)) - deadline = datetime.date(r.prvni_rok + (mesic_vydani + 2) // 12, - mesic_vydani + 2, + deadline = datetime.date(rocnik.prvni_rok + (mesic_vydani + 2) // 12, + (mesic_vydani + 1) % 12 + 1, rnd.randint(1, 28)) # posledni 2 cisla v rocniku nemaji deadline @@ -288,7 +289,7 @@ def gen_cisla(rocniky): node = node2 if otec: otec = False - rocnik.RocnikNode.first_child = node + rocnik.rocniknode.first_child = node rocnik.save() slovnik_cisel[ci] = cislo @@ -358,58 +359,58 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): # for rocnik in rocniky: slovnik_cisel = slovnik_rocnik_cisla[rocnik] slovnik_temat = slovnik_rocnik_temata[rocnik] - for ci, cislo in slovnik_cisel.items()[:-2]: - mozna_tema_vcn = cislo.CisloNode.first_child - while mozna_tema_vcn != None: - if type(mozna_tema_vcn) != TemaVCisleNode: - continue - else: - tema = mozna_tema_vcn.tema - - if not slovnik_temat[int(tema.kod)][1] >= ci+2: - continue - - for i in range(1, rnd.randint(1, 4)) - poc_op = rnd.randint(1, 4) - poc_oboru = rnd.randint(1, 2) - p = Uloha.objects.create( - nazev=": ".join([tema.nazev, - "úloha {}.".format(i)]), - nadproblem=tema, - stav=Problem.STAV_ZADANY, - zamereni=tema.zamereni, - autor=tema.autor, - garant=tema.garant, - opravovatele=rnd.sample(organizatori, poc_op), - kod=str(i), - cislo_zadani=cislo, - cislo_reseni=slovnik_cisel[ci+2], - cislo_deadline=slovnik_cisel[ci+2], - max_body = rnd.randint(1, 8) - ) - p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho), - rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) - uloha_zadani = UlohaZadaniNode.objects.create(uloha=p) - p.UlohaZadaniNode = uloha_zadani - otec_syn(mozna_tema_vcn, uloha_zadani) - - text_vzoraku = Text.objects.create( - na_web = rnd.choice(reseni), - do_cisla = rnd.choice(reseni) - ) - vzorak = TextNode.objects.create(text = text_vzoraku) - uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) - p.UlohaVzorakNode = uloha_vzorak - #res_tema_vcn = - res_tema_vcn = slovnik_cisel[ci+2].CisloNode.first_child - while res_tema_vcn.tema != tema: - res_tema_vcn = res_tema_vcn.succ - otec_syn(res_tema_vcn, uloha_vzorak) - - p.save() - - mozna_tema_vcn = mozna_tema_vcn.succ - + for ci, cislo in slovnik_cisel.items()[:-2]: + mozna_tema_vcn = cislo.CisloNode.first_child + while mozna_tema_vcn != None: + if type(mozna_tema_vcn) != TemaVCisleNode: + continue + else: + tema = mozna_tema_vcn.tema + + if not slovnik_temat[int(tema.kod)][1] >= ci+2: + continue + + for i in range(1, rnd.randint(1, 4)): + poc_op = rnd.randint(1, 4) + poc_oboru = rnd.randint(1, 2) + p = Uloha.objects.create( + nazev=": ".join([tema.nazev, + "úloha {}.".format(i)]), + nadproblem=tema, + stav=Problem.STAV_ZADANY, + zamereni=tema.zamereni, + autor=tema.autor, + garant=tema.garant, + opravovatele=rnd.sample(organizatori, poc_op), + kod=str(i), + cislo_zadani=cislo, + cislo_reseni=slovnik_cisel[ci+2], + cislo_deadline=slovnik_cisel[ci+2], + max_body = rnd.randint(1, 8) + ) + p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho), + rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) + uloha_zadani = UlohaZadaniNode.objects.create(uloha=p) + p.UlohaZadaniNode = uloha_zadani + otec_syn(mozna_tema_vcn, uloha_zadani) + + text_vzoraku = Text.objects.create( + na_web = rnd.choice(reseni), + do_cisla = rnd.choice(reseni) + ) + vzorak = TextNode.objects.create(text = text_vzoraku) + uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) + p.UlohaVzorakNode = uloha_vzorak + #res_tema_vcn = + res_tema_vcn = slovnik_cisel[ci+2].CisloNode.first_child + while res_tema_vcn.tema != tema: + res_tema_vcn = res_tema_vcn.succ + otec_syn(res_tema_vcn, uloha_vzorak) + + p.save() + + mozna_tema_vcn = mozna_tema_vcn.succ + def otec_syn(otec, syn): bratr = otec.first_child syn.succ = bratr @@ -423,10 +424,6 @@ def create_test_data(size = 6, rnd = None): # pevna pseudo-nahodnost rnd = rnd or random.Random(x=42) - gen_rocniky(25, 10) - gen_soustredeni(rnd, [], []) - return - # static URL stranky # FIXME: nakopirovat sem vsechny z produkcni databaze s = Site.objects.filter(name="example.com") @@ -449,6 +446,7 @@ def create_test_data(size = 6, rnd = None): # skoly skoly = gen_skoly() + #TODO Generovat soustredeni konfery # osoby osoby = gen_osoby(rnd, size) @@ -469,7 +467,7 @@ def create_test_data(size = 6, rnd = None): rocniky = gen_rocniky(last_rocnik, size) # cisla - slovnik_rocnik_cisla = gen_cisla(rocniky) + slovnik_rocnik_cisla = gen_cisla(rnd, rocniky) # generování obyčejných úloh do čísel for rocnik in rocniky: