|
|
@ -6,10 +6,12 @@ import lorem |
|
|
|
import django.contrib.auth |
|
|
|
import logging |
|
|
|
|
|
|
|
from .models import Rocnik, Cislo, Deadline, Problem, Tema, Uloha |
|
|
|
from .models import Rocnik, Cislo, Deadline, Problem, Tema, Uloha, Clanek |
|
|
|
|
|
|
|
from odevzdavatko.models import Reseni, Hodnoceni |
|
|
|
import seminar.models as m |
|
|
|
# TODO zbavit se treenodů do treenode.testutils (ty pak klidně volat odtud) |
|
|
|
from treenode.models import TextNode, UlohaZadaniNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, CastNode, MezicisloNode, ReseniNode |
|
|
|
from treenode.models.pomocne import Text |
|
|
|
|
|
|
|
from treenode.treelib import all_children, insert_last_child, all_children_of_type, create_node_after |
|
|
|
|
|
|
@ -56,12 +58,12 @@ def gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi |
|
|
|
rnd.choice(jmeno), |
|
|
|
rnd.choice(kde)] |
|
|
|
) |
|
|
|
text_zadani = m.Text.objects.create( |
|
|
|
text_zadani = Text.objects.create( |
|
|
|
na_web = text, |
|
|
|
do_cisla = text, |
|
|
|
) |
|
|
|
zad = m.TextNode.objects.create(text = text_zadani, root = p.cislo_zadani.rocnik.rocniknode) |
|
|
|
uloha_zadani = m.UlohaZadaniNode.objects.create(uloha = p, first_child = zad, root = p.cislo_zadani.rocnik.rocniknode) |
|
|
|
zad = TextNode.objects.create(text = text_zadani, root = p.cislo_zadani.rocnik.rocniknode) |
|
|
|
uloha_zadani = UlohaZadaniNode.objects.create(uloha = p, first_child = zad, root = p.cislo_zadani.rocnik.rocniknode) |
|
|
|
p.ulohazadaninode = uloha_zadani |
|
|
|
otec_syn(cisla[poradi_cisla-2-1].cislonode, uloha_zadani) |
|
|
|
|
|
|
@ -78,12 +80,12 @@ def gen_vzoroveho_reseni_ulohy(rnd, organizatori, uloha, pocet_opravovatelu): |
|
|
|
|
|
|
|
# Generování vzorového řešení. |
|
|
|
obsah = rnd.choice(reseni) |
|
|
|
text_vzoraku = m.Text.objects.create( |
|
|
|
text_vzoraku = Text.objects.create( |
|
|
|
na_web = obsah, |
|
|
|
do_cisla = obsah |
|
|
|
) |
|
|
|
vzorak = m.TextNode.objects.create(text = text_vzoraku, root = uloha.cislo_zadani.rocnik.rocniknode) |
|
|
|
uloha_vzorak = m.UlohaVzorakNode.objects.create(uloha = uloha, first_child = vzorak, root = uloha.cislo_zadani.rocnik.rocniknode) |
|
|
|
vzorak = TextNode.objects.create(text = text_vzoraku, root = uloha.cislo_zadani.rocnik.rocniknode) |
|
|
|
uloha_vzorak = UlohaVzorakNode.objects.create(uloha = uloha, first_child = vzorak, root = uloha.cislo_zadani.rocnik.rocniknode) |
|
|
|
uloha.ulohavzoraknode = uloha_vzorak |
|
|
|
|
|
|
|
uloha.opravovatele.set(rnd.sample(organizatori, pocet_opravovatelu)) |
|
|
@ -134,7 +136,7 @@ def gen_rocniky(last_rocnik, size): |
|
|
|
node = None |
|
|
|
for ri in range(min(last_rocnik - size, 1), last_rocnik + 1): |
|
|
|
rocnik = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) |
|
|
|
node2 = m.RocnikNode.objects.create(rocnik = rocnik, succ = node) |
|
|
|
node2 = RocnikNode.objects.create(rocnik = rocnik, succ = node) |
|
|
|
rocnik.save() |
|
|
|
node = node2 |
|
|
|
rocniky.append(rocnik) |
|
|
@ -169,7 +171,7 @@ def gen_cisla(rnd, rocniky): |
|
|
|
datum_vydani=vydano, |
|
|
|
verejne_db=True, |
|
|
|
) |
|
|
|
node2 = m.CisloNode.objects.get(cislo = cislo) |
|
|
|
node2 = CisloNode.objects.get(cislo = cislo) |
|
|
|
node2.succ = node |
|
|
|
node2.root = rocnik.rocniknode |
|
|
|
cislo.save() |
|
|
@ -197,7 +199,7 @@ def add_first_child(node, child): |
|
|
|
|
|
|
|
def get_text(): |
|
|
|
odstavec = lorem.paragraph() |
|
|
|
return m.Text.objects.create(na_web = odstavec, do_cisla = odstavec) |
|
|
|
return Text.objects.create(na_web = odstavec, do_cisla = odstavec) |
|
|
|
|
|
|
|
def gen_dlouhe_tema(rnd, organizatori, rocnik, nazev, obor, kod): |
|
|
|
tema = Tema.objects.create( |
|
|
@ -217,54 +219,54 @@ def gen_dlouhe_tema(rnd, organizatori, rocnik, nazev, obor, kod): |
|
|
|
for cislo in cisla: |
|
|
|
# Přidáme TemaVCisleNode do daného čísla |
|
|
|
cislo_node = cislo.cislonode |
|
|
|
tema_cislo_node = m.TemaVCisleNode.objects.create(tema = tema, root = cislo_node.root) |
|
|
|
tema_cislo_node = TemaVCisleNode.objects.create(tema = tema, root = cislo_node.root) |
|
|
|
insert_last_child(cislo_node, tema_cislo_node) |
|
|
|
|
|
|
|
# Přidávání obsahu do čísla |
|
|
|
cast_node = m.CastNode.objects.create(nadpis = "Příspěvek k číslu {}".format(cislo.kod), root=cislo_node.root) |
|
|
|
cast_node = CastNode.objects.create(nadpis = "Příspěvek k číslu {}".format(cislo.kod), root=cislo_node.root) |
|
|
|
add_first_child(tema_cislo_node, cast_node) |
|
|
|
|
|
|
|
text_node = m.TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
text_node = TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
add_first_child(cast_node, text_node) |
|
|
|
|
|
|
|
cast_node2 = m.CastNode.objects.create(nadpis = "První podproblém", root=cislo_node.root) |
|
|
|
cast_node2 = CastNode.objects.create(nadpis = "První podproblém", root=cislo_node.root) |
|
|
|
add_first_child(text_node, cast_node2) |
|
|
|
|
|
|
|
text_node2 = m.TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
text_node2 = TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
add_first_child(cast_node2, text_node2) |
|
|
|
|
|
|
|
cast_node3 = m.CastNode.objects.create(nadpis = "Druhý podproblém", root=cislo_node.root) |
|
|
|
cast_node3 = CastNode.objects.create(nadpis = "Druhý podproblém", root=cislo_node.root) |
|
|
|
add_first_child(text_node2, cast_node3) |
|
|
|
|
|
|
|
text_node3 = m.TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
text_node3 = TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
add_first_child(cast_node3, text_node3) |
|
|
|
|
|
|
|
cast_node4 = m.CastNode.objects.create(nadpis = "Třetí podproblém", root=cislo_node.root) |
|
|
|
cast_node4 = CastNode.objects.create(nadpis = "Třetí podproblém", root=cislo_node.root) |
|
|
|
add_first_child(text_node3, cast_node4) |
|
|
|
|
|
|
|
text_node4 = m.TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
text_node4 = TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
add_first_child(cast_node3, text_node4) |
|
|
|
|
|
|
|
cast_node3a = m.CastNode.objects.create(nadpis = "Podproblém paralelní s " |
|
|
|
cast_node3a = CastNode.objects.create(nadpis = "Podproblém paralelní s " |
|
|
|
"druhým podproblémem", root=cislo_node.root) |
|
|
|
cast_node3.succ = cast_node3a |
|
|
|
cast_node3.save() |
|
|
|
|
|
|
|
text_node3a = m.TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
text_node3a = TextNode.objects.create(text = get_text(), root=cislo_node.root) |
|
|
|
add_first_child(cast_node3a, text_node3a) |
|
|
|
|
|
|
|
# Občas přidáme mezičíslo |
|
|
|
if rnd.randint(1, 3) == 1: |
|
|
|
create_node_after(cislo_node, m.MezicisloNode, root=cislo_node.root) |
|
|
|
create_node_after(cislo_node, MezicisloNode, root=cislo_node.root) |
|
|
|
mezicislo_node = cislo_node.succ |
|
|
|
|
|
|
|
cast_node_mezicislo = m.CastNode.objects.create( |
|
|
|
cast_node_mezicislo = CastNode.objects.create( |
|
|
|
nadpis = "Příspěvek k mezičíslu".format(cislo.kod), root=cislo_node.root) |
|
|
|
add_first_child(mezicislo_node, cast_node_mezicislo) |
|
|
|
|
|
|
|
odstavec = lorem.paragraph() |
|
|
|
text_mezicislo = m.Text.objects.create(na_web = odstavec, do_cisla = odstavec) |
|
|
|
text_node_mezicislo = m.TextNode.objects.create(text = text_mezicislo, root=cislo_node.root) |
|
|
|
text_mezicislo = Text.objects.create(na_web = odstavec, do_cisla = odstavec) |
|
|
|
text_node_mezicislo = TextNode.objects.create(text = text_mezicislo, root=cislo_node.root) |
|
|
|
add_first_child(cast_node_mezicislo, text_node_mezicislo) |
|
|
|
|
|
|
|
return tema |
|
|
@ -308,7 +310,7 @@ def gen_temata(rnd, rocniky, rocnik_cisla, organizatori): |
|
|
|
|
|
|
|
# Vyrobíme TemaVCisleNody pro obsah |
|
|
|
for i in range(zacatek_tematu, konec_tematu+1): |
|
|
|
node = m.TemaVCisleNode.objects.create(tema = t,root=rocnik.rocniknode) |
|
|
|
node = TemaVCisleNode.objects.create(tema = t,root=rocnik.rocniknode) |
|
|
|
# FIXME: Není to off-by-one? |
|
|
|
otec = cisla[i-1].cislonode |
|
|
|
otec_syn(otec, node) |
|
|
@ -361,12 +363,12 @@ def gen_ulohy_tematu(rnd, organizatori, resitele, tema, kod, cislo, cislo_se_vzo |
|
|
|
rnd.choice(jmeno), |
|
|
|
rnd.choice(kde)] |
|
|
|
) |
|
|
|
text_zadani = m.Text.objects.create( |
|
|
|
text_zadani = Text.objects.create( |
|
|
|
na_web = obsah, |
|
|
|
do_cisla = obsah, |
|
|
|
) |
|
|
|
zad = m.TextNode.objects.create(text = text_zadani, root=tema.temavcislenode_set.first().root) |
|
|
|
uloha_zadani = m.UlohaZadaniNode.objects.create(uloha=uloha, first_child = zad, root=tema.temavcislenode_set.first().root) |
|
|
|
zad = TextNode.objects.create(text = text_zadani, root=tema.temavcislenode_set.first().root) |
|
|
|
uloha_zadani = UlohaZadaniNode.objects.create(uloha=uloha, first_child = zad, root=tema.temavcislenode_set.first().root) |
|
|
|
uloha.ulohazadaninode = uloha_zadani |
|
|
|
|
|
|
|
# Generování řešení a hodnocení k úloze |
|
|
@ -398,7 +400,7 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori, |
|
|
|
else: |
|
|
|
cislo_se_vzorakem = cislo_se_vzorakem.first() |
|
|
|
|
|
|
|
for tema_node in all_children_of_type(cislo.cislonode, m.TemaVCisleNode): |
|
|
|
for tema_node in all_children_of_type(cislo.cislonode, TemaVCisleNode): |
|
|
|
tema = tema_node.tema |
|
|
|
|
|
|
|
# Pokud už témátko skončilo, žádné úložky negenerujeme |
|
|
@ -421,7 +423,7 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori, |
|
|
|
# Najdeme správný TemaVCisleNode pro vložení vzoráku |
|
|
|
res_tema_node = None; |
|
|
|
for node in all_children(cislo_se_vzorakem.cislonode): |
|
|
|
if isinstance(node, m.TemaVCisleNode): |
|
|
|
if isinstance(node, TemaVCisleNode): |
|
|
|
if node.tema == tema: |
|
|
|
res_tema_node = node |
|
|
|
if res_tema_node is None: |
|
|
@ -440,7 +442,7 @@ def otec_syn(otec, syn): |
|
|
|
|
|
|
|
def gen_clanek(rnd, organizatori, resitele): |
|
|
|
logger.info("Generuji článek do čísla 22.2") |
|
|
|
clanek = m.Clanek.objects.create( |
|
|
|
clanek = Clanek.objects.create( |
|
|
|
nazev="Článek o Lorem ipsum", |
|
|
|
nadproblem=None, |
|
|
|
stav='vyreseny', |
|
|
@ -467,7 +469,7 @@ def gen_clanek(rnd, organizatori, resitele): |
|
|
|
) |
|
|
|
hodnoceni.save() |
|
|
|
|
|
|
|
reseninode = m.ReseniNode.objects.create( |
|
|
|
reseninode = ReseniNode.objects.create( |
|
|
|
reseni=reseni |
|
|
|
) |
|
|
|
reseninode.save() |
|
|
@ -483,26 +485,26 @@ def gen_clanek(rnd, organizatori, resitele): |
|
|
|
# FIXME: Ten, kdo vymyslel TreeLib (mj. týž, kdo psal tenhle kód), |
|
|
|
# nevyrobil vhodnou funkci, takže to postavíme pozpátku pomocí create_child |
|
|
|
# (které vyrábí _prvního_ syna) |
|
|
|
create_child(reseninode, m.CastNode, nadpis="Lorem ipsum") |
|
|
|
create_child(reseninode, CastNode, nadpis="Lorem ipsum") |
|
|
|
# Taky ten člověk nevyrobil vracení nových věcí... |
|
|
|
castnode = reseninode.first_child |
|
|
|
|
|
|
|
# Úvodní odstaveček |
|
|
|
obsah = "Tohle je zamyšlení o textu lorem ipsum. Začneme a skončíme ukázkou." |
|
|
|
text = m.Text.objects.create( |
|
|
|
text = Text.objects.create( |
|
|
|
na_web=obsah, |
|
|
|
do_cisla=obsah, |
|
|
|
) |
|
|
|
text.save() |
|
|
|
create_child(reseninode, m.TextNode, text=text) |
|
|
|
create_child(reseninode, TextNode, text=text) |
|
|
|
|
|
|
|
# Několik odstavců lorem ipsum |
|
|
|
for _ in range(rnd.randint(3, 7)): |
|
|
|
lipsum = lorem.paragraph() |
|
|
|
text = m.Text.objects.create( |
|
|
|
text = Text.objects.create( |
|
|
|
na_web=lipsum, |
|
|
|
do_cisla=lipsum, |
|
|
|
) |
|
|
|
text.save() |
|
|
|
create_child(castnode, m.TextNode, text=text) |
|
|
|
create_child(castnode, TextNode, text=text) |
|
|
|
logger.info(f"Článek vygenerován (reseni={reseni.id}, treenode={reseninode.id})") |
|
|
|