From 42a977b5165b4ae66d96e103f30136e74f8250eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 11 Jun 2019 00:25:25 +0200 Subject: [PATCH] =?UTF-8?q?testutils.py:=20n=C3=A1hodn=C3=A9=20=C3=BApravy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/testutils.py | 244 +++++++++++++++++++++++++------------------ 1 file changed, 142 insertions(+), 102 deletions(-) diff --git a/seminar/testutils.py b/seminar/testutils.py index edd836fa..eb993c7f 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -219,58 +219,22 @@ def gen_soustredeni(): Soustredeni_Ucastnici.objects.create(resitel=res, soustredeni=sous) sous.save() - -@transaction.atomic -def create_test_data(size = 6, rnd = None): - assert size >= 1 - # pevna pseudo-nahodnost - rnd = rnd or random.Random(x=42) - - # static URL stranky - # FIXME: nakopirovat sem vsechny z produkcni databaze - s = Site.objects.filter(name="example.com") - f = FlatPage.objects.create(url="/", title="Seminář M&M", - content = "

Vítejte na stránce semináře MaM!

") - f.sites.add(s[0]) - f.save() - - # users - admin = User.objects.create_superuser(username='admin', email='', password='admin') - - usernames = ['anet', 'bara', 'cyril', 'david', 'eva', 'filip'] - users = [] - for usr in usernames[:size]: - u = User.objects.create(username=usr, password=usr) - u.first_name = usr.capitalize() - u.save() - users.append(u) - print(users) - - # skoly - skoly = gen_skoly() - - # osoby - osoby = gen_osoby(rnd, size) - - # resitele a organizatori - last_rocnik = 25 - resitele = gen_resitele(rnd, osoby, skoly) - organizatori = gen_organizatori(rnd, osoby, last_rocnik, users) - - # prijemci - prijemci = gen_prijemci(rnd, osoby) - - global zlinska - zlinska.kontaktni_osoba=rnd.choice(osoby) - zlinska.save() - - # rocniky +def gen_rocniky(last_rocnik, size): + rocniky = [] + node = None for ri in range(min(last_rocnik - size, 1), last_rocnik + 1): - r = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) + rocnik = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) + node2 = RocnikNode.objects.create(rocnik = rocnik, succ = node) + node = node2 + rocniky.append(rocnik) + return rocniky - # cisla - cisel = rnd.randint(4, 8) +def gen_cisla(rocniky): + slovnik_rocnik_cisla = {} + for rocnik in rocniky: slovnik_cisel = {} + cisel = rnd.randint(4, 8) + node = None for ci in range(1, cisel + 1): # první číslo vydáváme typicky okolo prázdnin # (ci - 1)*2 zaručuje první číslo v červnu a všechna @@ -289,20 +253,25 @@ def create_test_data(size = 6, rnd = None): deadline = None cislo = Cislo.objects.create( - rocnik = r, + rocnik = rocnik, cislo = str(ci), datum_vydani=vydano, datum_deadline=deadline, verejne_db=True ) + node2 = CisloNode.objects.create(cislo = cislo, succ = node) + node = node2 + slovnik_cisel[ci] = cislo + slovnik_rocnik_cisla[rocnik] = slovnik_cisel + return slovnik_rocnik_cisla - # generovani uloh - gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size) - - # generování témat, zatím v prvních třech číslech po jednom - # FIXME: více témat - if ci <= 3: +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í", "Šokující", "Magnetické", "Modré", "Překvapivé", "Plasmatické", "Novoroční"] @@ -319,56 +288,127 @@ def create_test_data(size = 6, rnd = None): 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(ci), - # atributy třídy Téma + kod=str(cislo), + # atributy třídy Téma tema_typ=rnd.choice(Tema.TEMA_CHOICES), - rocnik=r) + rocnik=rocnik) 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 - for i in range(ci, cisel-2): - # vytvoř úlohu pro každé ze zbývajících čísel - poc_op = rnd.randint(1, 4) - poc_oboru = rnd.randint(1, 2) - p = Uloha.objects.create( - nazev=": ".join([t.nazev, - "úloha {}.".format(i-ci+1)]), - nadproblem=t, - stav=Problem.STAV_ZADANY, - zamereni=t.zamereni, - autor=t.autor, - garant=t.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)) - p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho), - rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) - - #Tomův pokus o opravu bugu: - 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 - - #p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)]) - p.save() - - - # vytvor text - # vytvor TemaVCisleNode - if (rnd.randint(1, 3) % 3 == 0): - # vytvor mezicislo Node - pass + temata[cislo] = t + slovnik_rocnik_temata[tema] = temata + +def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): + 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 + 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)]), + nadproblem=tema, + stav=Problem.STAV_ZADANY, + zamereni=t.zamereni, + autor=t.autor, + garant=t.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)) + p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho), + rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) + + #Tomův pokus o opravu bugu: + 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 + + #p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)]) + p.save() + + + # vytvor text + # vytvor TemaVCisleNode + if (rnd.randint(1, 3) % 3 == 0): + # vytvor mezicislo Node + pass + +@transaction.atomic +def create_test_data(size = 6, rnd = None): + assert size >= 1 + # pevna pseudo-nahodnost + rnd = rnd or random.Random(x=42) + + # static URL stranky + # FIXME: nakopirovat sem vsechny z produkcni databaze + s = Site.objects.filter(name="example.com") + f = FlatPage.objects.create(url="/", title="Seminář M&M", + content = "

Vítejte na stránce semináře MaM!

") + f.sites.add(s[0]) + f.save() + + # users + admin = User.objects.create_superuser(username='admin', email='', password='admin') + + usernames = ['anet', 'bara', 'cyril', 'david', 'eva', 'filip'] + users = [] + for usr in usernames[:size]: + u = User.objects.create(username=usr, password=usr) + u.first_name = usr.capitalize() + u.save() + users.append(u) + print(users) + + # skoly + skoly = gen_skoly() + + # osoby + osoby = gen_osoby(rnd, size) + + # resitele a organizatori + last_rocnik = 25 + resitele = gen_resitele(rnd, osoby, skoly) + organizatori = gen_organizatori(rnd, osoby, last_rocnik, users) + + # prijemci + prijemci = gen_prijemci(rnd, osoby) + + global zlinska + zlinska.kontaktni_osoba=rnd.choice(osoby) + zlinska.save() + + # rocniky + rocniky = gen_rocniky(last_rocnik, size) + + # cisla + slovnik_rocnik_cisla = gen_cisla(rocniky) + + # generování obyčejných úloh do čísel + for rocnik in rocniky: + slovnik_cisel = slovnik_rocnik_cisla[rocnik] + for cislo in slovnik_cisel: + gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size) + + # generování témat, zatím v prvních třech číslech po jednom + # FIXME: více témat + slovnik_rocnik_temata = gen_temata(rocniky, slovnik_rocnik_cisla) + + # generování úloh k tématům ve všech číslech + gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata) + + # nagenerovat k tématu úlohy a Nody pro vsechna cisla +