diff --git a/requirements.txt b/requirements.txt index 4045ebdf..3c38375b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -49,3 +49,7 @@ Werkzeug==0.14.1 # uWSGI uWSGI==2.0.17.1 + +# Potřeba pro test data + +lorem diff --git a/seminar/testutils.py b/seminar/testutils.py index c52e3bea..7bc94b03 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -2,11 +2,12 @@ import datetime import random +import lorem 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, Osoba, Organizator, Prijemce, Tema, Uloha +from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, KonferaNode, Konfera_Ucastnici from django.contrib.flatpages.models import FlatPage from django.contrib.sites.models import Site @@ -206,22 +207,24 @@ def gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size): ) return -def gen_soustredeni(): - sousy = [] - for sousi in range(1, size): #FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?) +def gen_soustredeni(rnd, resitele, organizatori): + soustredeni = [] + for _ in range(1, size): #FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?) datum_zacatku=datetime.date(randint(2000, 2020), randint(1, 12), radint(1, 28)) - working_sous = Soustredeni.objects.create(rocnik=Rocnik.objects.order_by('?').first(), - verejne_db=rnd.choice([True, False]), - misto=rnd.choice(['Kremrolovice', 'Indiánov', 'U zmzliny', 'Vafláreň', 'Větrník', 'Horní Rakvička', 'Dolní cheesecake']), - datum_zacatku=datum_zacatku, - datum_konce=datum_zacatku + datetime.timedelta(weeks=1)) + working_sous = Soustredeni.objects.create( + rocnik=Rocnik.objects.order_by('?').first(), + verejne_db=rnd.choice([True, False]), + misto=rnd.choice(['Kremrolovice', 'Indiánov', 'U zmzliny', 'Vafláreň', 'Větrník', 'Horní Rakvička', 'Dolní cheesecake']), + typ=rnd.choice(['jarni', 'podzmini', 'vikend']), + datum_zacatku=datum_zacatku, + datum_konce=datum_zacatku + datetime.timedelta(weeks=1)) for res in rnd.sample(resitele, min(len(resitele), 20)): Soustredeni_Ucastnici.objects.create(resitel=res, soutredeni=working_sous) for org in rnd.sample(organizatori, min(len(organizatori), 20)): Soustredeni_Organizatori.objects.create(organizator=org, soutredeni=working_sous) working_sous.save() - sousy.append(working_sous) - return sousy + soustredeni.append(working_sous) + return soustredeni def gen_rocniky(last_rocnik, size): rocniky = [] @@ -233,9 +236,30 @@ def gen_rocniky(last_rocnik, size): rocniky.append(rocnik) return rocniky +def gen_konfery(rnd, reseni, organizatori, ucastnici, soustredeni): + konfery = [] + for _ in range(1, size): #FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?) + konfera = Konfera.objects.create( + nazev=rnd.choice(['Pozorování', 'Zkoumání', 'Modelování', 'Počítání', 'Zkoušení']) + rnd.choice(' vlastností', ' jevů', ' charakteristik']) + rnd.choice([' vektorových prostorů', ' kinetické terorie látek', ' molekulární biologie', ' syntentických stromů']), + anotace=lorem.paragraph(), + abstrakt=lorem.paragraph(), + organizator=rnd.choice(organizatori), + soustredeni=rnd.choice(soustredeni), + reseni=rnd.choice(reseni), + typ_prezentace=rnd.choice(['veletrh', 'prezentace'])) + for res in rnd.sample(ucastnici, min(len(ucastnici), randint(3, 6))): + Konfery_Ucastnici.objects.create(resitel=res, konfera=konfera) + konfery.append(konfera) + konfera.save() + + konferanode = KonferaNode.objects.create(konfera=konfera) + konferanode.save() + return konfery + def gen_cisla(rocniky): slovnik_rocnik_cisla = {} for rocnik in rocniky: + otec = True slovnik_cisel = {} cisel = rnd.randint(4, 8) node = None @@ -265,6 +289,10 @@ def gen_cisla(rocniky): ) node2 = CisloNode.objects.create(cislo = cislo, succ = node) node = node2 + if otec: + otec = False + rocnik.RocnikNode.first_child = node + rocnik.save() slovnik_cisel[ci] = cislo slovnik_rocnik_cisla[rocnik] = slovnik_cisel @@ -272,17 +300,19 @@ def gen_cisla(rocniky): def gen_temata(rocniky, slovnik_rocnik_cisla): slovnik_rocnik_temata = {} - for rocnik in rocniky: - temata = {} - for cislo in slovnik_r[rocnik] - if cislo <= 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é", "Plasmatické", "Novoroční"] - co = ["téma", "záření", "stavení", "jiskření", "jelito", - "drama", "kuře", "moře", "klání", "proudění", "čekání"] - poc_oboru = rnd.randint(1, 2) - poc_op = rnd.randint(1, 3) + co = ["téma", "záření", "stavení", "jiskření", "jelito", + "drama", "kuře", "moře", "klání", "proudění", "čekání"] + poc_oboru = rnd.randint(1, 2) + poc_op = rnd.randint(1, 3) + n = 1 + for rocnik in rocniky: + temata = {} + slovnik_cisel = slovnik_rocnik_cisla[rocnik] + for cislo in slovnik_cisel + if cislo.cislo <= 3: t = Tema.objects.create( # atributy třídy Problem nazev=" ".join([rnd.choice(jake), rnd.choice(co)]), @@ -290,42 +320,72 @@ def gen_temata(rocniky, slovnik_rocnik_cisla): zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru), autor=rnd.choice(organizatori), garant=rnd.choice(organizatori), - # FIXME: téma má kód podle čísla, až jich bude - # více, tak udělat kód podle pořadí vygenerování - kod=str(cislo), + kod=str(n), # atributy třídy Téma tema_typ=rnd.choice(Tema.TEMA_CHOICES), - rocnik=rocnik) + rocnik=rocnik + ) + n+=1 + konec_tematu = rnd.randint(cislo.cislo, 7) + for i in range(cislo.cislo, min(konec_tematu, len(slovnik_cisel))): + node = TemaVCisleNode.objects.create(tema = t) + otec = slovnik_cisel[i].CisloNode + bratr = otec.first_child + node.succ = bratr + otec.first_child = node + node.save() + otec.save() t.opravovatele=rnd.sample(organizatori, poc_op) t.save() temata[cislo] = t slovnik_rocnik_temata[tema] = temata -def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): + +def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #Tahle funkce je nedodělaná + # ulohy resene v cisle + jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá", + "Zákeřná", "Fyzikální"] + co = ["kostka", "smršť", "díra", "zrada", "toulka", "tyč", + "úloha", "blecha"] + sloveso = ["Najděte", "Spočítejte", "Zapište", "Změřte", "Odhadněte"] + koho = ["délku", "počet", "množství", "dílky"] + ceho = ["všech", "správných", "konstatních", "zelených"] + jmeno = ["řešení", "tahů", "čísel", "kalhot", "koulí", "hadů"] + kde = ["na zemi", "ve vesmíru", "ve vzduchu", "na šňůře", "v letadle"] + obor = ["M", "F", "I", "O", "B"] + reseni = ["to je přece jasné", "triviální", "omlouváme se," + "otevřený problém", "neřešitelné", "triviálně triviální", + "použitím věty z prvního semestru na matfyzu", + "jednoduše pomocí látky z druhého semestru na matfyzu", + "netriviální aplikace diferenciálních rovnic", "zadání je vnitřně" + "sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli," + "tak jste fakt hloupí"] for rocnik in rocniky: slovnik_cisel = slovnik_rocnik_cisla[rocnik] - cisel = len(slovnik_cisel) slovnik_temat = slovnik_rocnik_temata[rocnik] - for tema in slovnik_temat: - for i in range(tema. - if #TODO + for cislo in slovnik_cisel: + syn = cislo.CisloNode.first_child + while syn != None: + tema = syn.tema + 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-ci+1)]), + "úloha {}.".format(i)]), nadproblem=tema, stav=Problem.STAV_ZADANY, - zamereni=t.zamereni, - autor=t.autor, - garant=t.garant, + zamereni=tema.zamereni, + autor=tema.autor, + garant=tema.garant, opravovatele=rnd.sample(organizatori, poc_op), kod=str(i), - cislo_zadani=slovnik_cisel[ci], - cislo_reseni=slovnik_cisel[ci+2], - cislo_deadline=slovnik_cisel[ci+2], - max_body = rnd.randint(1, 8)) + cislo_zadani=cislo, + cislo_reseni=slovnik_cisel[cislo.cislo+2], + cislo_deadline=slovnik_cisel[cislo.cislo+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)]) @@ -342,6 +402,9 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): p.save() + syn = syn.succ + + # vytvor text # vytvor TemaVCisleNode if (rnd.randint(1, 3) % 3 == 0):