Browse Source

testutils.py: opraveny všechny syntaktické chyby

export_seznamu_prednasek
Tomáš Domes 5 years ago
parent
commit
6d3acccae8
  1. 270
      seminar/testutils.py

270
seminar/testutils.py

@ -7,7 +7,7 @@ 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, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, KonferaNode, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, Hodnoceni 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, Hodnoceni, UlohaZadaniNode
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
@ -122,7 +122,7 @@ def gen_organizatori(rnd, osoby, last_rocnik, users):
organizuje_od=od, organizuje_do=do)) organizuje_od=od, organizuje_do=do))
return organizatori return organizatori
def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size):
# ulohy resene v cisle # ulohy resene v cisle
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í"]
@ -141,63 +141,83 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size):
"netriviální aplikace diferenciálních rovnic", "zadání je vnitřně" "netriviální aplikace diferenciálních rovnic", "zadání je vnitřně"
"sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli," "sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli,"
"tak jste fakt hloupí"] "tak jste fakt hloupí"]
k = 0
for rocnik in rocniky:
k+=1
cisla = rocnik_cisla[k-1]
for ci in range(3, len(cisla)+1):
for pi in range(1, ((size + 1) // 2) + 1):
poc_op = rnd.randint(1, 4) # počet opravovatelů
poc_oboru = rnd.randint(1, 2)
p = Uloha.objects.create(
# atributy třídy Problem
nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]),
stav=Problem.STAV_ZADANY,
zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru),
autor=rnd.choice(organizatori),
garant=rnd.choice(organizatori),
kod=str(pi),
# atributy třídy Uloha
cislo_zadani=cisla[ci-2-1],
cislo_reseni=cisla[ci-1],
cislo_deadline=cisla[ci-1],
max_body = rnd.randint(1, 8)
)
if ci >= 3: #TODO nagenerovat i nody!!! text_zadani = Text.objects.create(
for pi in range(1, ((size + 1) // 2) + 1): na_web = " ".join(
poc_op = rnd.randint(1, 4) # počet opravovatelů [rnd.choice(sloveso),
poc_oboru = rnd.randint(1, 2) rnd.choice(koho),
p = Uloha.objects.create( rnd.choice(ceho),
# atributy třídy Problem rnd.choice(jmeno),
nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]), rnd.choice(kde)]
stav=Problem.STAV_ZADANY, ),
zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru), do_cisla = " ".join(
autor=rnd.choice(organizatori), [rnd.choice(sloveso),
garant=rnd.choice(organizatori), rnd.choice(koho),
kod=str(pi), rnd.choice(ceho),
# atributy třídy Uloha rnd.choice(jmeno),
cislo_zadani=slovnik_cisel[ci-2], rnd.choice(kde)]
cislo_reseni=slovnik_cisel[ci], )
cislo_deadline=slovnik_cisel[ci], )
max_body = rnd.randint(1, 8) zad = TextNode.objects.create(text = text_zadani)
) uloha_zadani = UlohaZadaniNode.objects.create(uloha=p, first_child = zad)
p.zadani = " ".join( p.ulohazadaninode = uloha_zadani
[rnd.choice(sloveso), otec_syn(cisla[ci-2-1].cislonode, uloha_zadani)
rnd.choice(koho),
rnd.choice(ceho), text_vzoraku = Text.objects.create(
rnd.choice(jmeno), na_web = rnd.choice(reseni),
rnd.choice(kde)] do_cisla = rnd.choice(reseni)
)
#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.opravovatele.set(rnd.sample(organizatori,poc_op))
p.save()
# reseni ulohy
poc_reseni = rnd.randint(size // 2, size * 2)
#poc_resitel = rnd.randint(1, 3) <- k čemu je himbajs tahle proměnná?
# vybereme nahodny vzorek resitelu o delce poctu reseni
# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni)
for ri in range(poc_reseni):
res_vyber = rnd.sample(resitele, rnd.randint(1, 5))
# problem a resitele přiřadíme později, ManyToManyField
# se nedá vyplnit v create()
res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES))
res.save()
hod = Hodnoceni.objects.create(
body=rnd.randint(0, p.max_body),
cislo_body=slovnik_cisel[ci],
reseni=res,
problem=p
) )
vzorak = TextNode.objects.create(text = text_vzoraku)
uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak)
p.ulohavzoraknode = uloha_vzorak
otec_syn(cisla[ci-1].cislonode, uloha_vzorak)
p.opravovatele.set(rnd.sample(organizatori,poc_op))
p.save()
# reseni ulohy
poc_reseni = rnd.randint(size // 2, size * 2)
#poc_resitel = rnd.randint(1, 3) <- k čemu je himbajs tahle proměnná?
# vybereme nahodny vzorek resitelu o delce poctu reseni
# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni)
for ri in range(poc_reseni):
res_vyber = rnd.sample(resitele, rnd.randint(1, 5))
# problem a resitele přiřadíme později, ManyToManyField
# se nedá vyplnit v create()
res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES))
#res.save() <- asi smazat
res.resitele.set(res_vyber)
res.save()
hod = Hodnoceni.objects.create(
body=rnd.randint(0, p.max_body),
cislo_body=cisla[ci-1],
reseni=res,
problem=p
)
return return
def gen_soustredeni(rnd, resitele, organizatori): def gen_soustredeni(rnd, resitele, organizatori):
@ -251,10 +271,10 @@ def gen_konfery(rnd, reseni, organizatori, ucastnici, soustredeni):
return konfery return konfery
def gen_cisla(rnd, rocniky): def gen_cisla(rnd, rocniky):
slovnik_rocnik_cisla = {} rocnik_cisla = []
for rocnik in rocniky: for rocnik in rocniky:
otec = True otec = True
slovnik_cisel = {} cisla = []
cisel = rnd.randint(4, 8) cisel = rnd.randint(4, 8)
node = None node = None
for ci in range(1, cisel + 1): for ci in range(1, cisel + 1):
@ -289,11 +309,11 @@ def gen_cisla(rnd, rocniky):
rocnik.rocniknode.first_child = node rocnik.rocniknode.first_child = node
rocnik.save() rocnik.save()
slovnik_cisel[ci] = cislo cisla.append(cislo)
slovnik_rocnik_cisla[rocnik] = slovnik_cisel rocnik_cisla.append(cisla)
return slovnik_rocnik_cisla return rocnik_cisla
def gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori): def gen_temata(rnd, rocniky, rocnik_cisla, organizatori):
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é",
"Plasmatické", "Novoroční"] "Plasmatické", "Novoroční"]
@ -302,40 +322,41 @@ def gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori):
poc_oboru = rnd.randint(1, 2) poc_oboru = rnd.randint(1, 2)
poc_op = rnd.randint(1, 3) poc_op = rnd.randint(1, 3)
slovnik_rocnik_temata = {} rocnik_temata = []
k = 0
for rocnik in rocniky: for rocnik in rocniky:
n = 1 k+=1
temata = {} n = 0
slovnik_cisel = slovnik_rocnik_cisla[rocnik] temata = []
for ci in slovnik_cisel: cisla = rocnik_cisla[k-1]
if ci <= 3: for ci in range(1, 3):
t = Tema.objects.create( n+=1
# atributy třídy Problem t = Tema.objects.create(
nazev=" ".join([rnd.choice(jake), rnd.choice(co)]), # atributy třídy Problem
stav=Problem.STAV_ZADANY, nazev=" ".join([rnd.choice(jake), rnd.choice(co)]),
zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru), stav=Problem.STAV_ZADANY,
autor=rnd.choice(organizatori), zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru),
garant=rnd.choice(organizatori), autor=rnd.choice(organizatori),
kod=str(n), garant=rnd.choice(organizatori),
# atributy třídy Téma kod=str(n),
tema_typ=rnd.choice(Tema.TEMA_CHOICES), # atributy třídy Téma
rocnik=rocnik tema_typ=rnd.choice(Tema.TEMA_CHOICES),
) rocnik=rocnik
n+=1 )
konec_tematu = min(rnd.randint(ci, 7), len(slovnik_cisel)) konec_tematu = min(rnd.randint(ci, 7), len(cisla))
for i in range(ci, konec_tematu+1): for i in range(ci, konec_tematu+1):
node = TemaVCisleNode.objects.create(tema = t) node = TemaVCisleNode.objects.create(tema = t)
otec = slovnik_cisel[i].cislonode otec = cisla[i-1].cislonode
otec_syn(otec, node) otec_syn(otec, node)
t.opravovatele.set(rnd.sample(organizatori, poc_op)) t.opravovatele.set(rnd.sample(organizatori, poc_op))
t.save() t.save()
temata[n] = (ci, konec_tematu, t) temata.append((ci, konec_tematu, t))
slovnik_rocnik_temata[rocnik] = temata rocnik_temata.append(temata)
return slovnik_rocnik_temata return rocnik_temata
def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #Tahle funkce je nedodělaná def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori):
# ulohy resene v cisle # ulohy resene v cisle
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í"]
@ -354,19 +375,23 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #
"netriviální aplikace diferenciálních rovnic", "zadání je vnitřně" "netriviální aplikace diferenciálních rovnic", "zadání je vnitřně"
"sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli," "sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli,"
"tak jste fakt hloupí"] "tak jste fakt hloupí"]
k = 0
for rocnik in rocniky: for rocnik in rocniky:
slovnik_cisel = slovnik_rocnik_cisla[rocnik] k+=1
slovnik_temat = slovnik_rocnik_temata[rocnik] cisla = rocnik_cisla[k-1]
for ci in list(slovnik_cisel)[:-2]: temata = rocnik_temata[k-1]
cislo = slovnik_cisel[ci] for ci in range(len(cisla)):
cislo = cisla[ci-1]
mozna_tema_vcn = cislo.cislonode.first_child mozna_tema_vcn = cislo.cislonode.first_child
while mozna_tema_vcn != None: while mozna_tema_vcn != None:
if type(mozna_tema_vcn) != TemaVCisleNode: if type(mozna_tema_vcn) != TemaVCisleNode:
mozna_tema_vcn = mozna_tema_vcn.succ
continue continue
else: else:
tema = mozna_tema_vcn.tema tema = mozna_tema_vcn.tema
if not slovnik_temat[int(tema.kod)][1] >= ci+2: # Dnes, za přítomnosti dvou svědků Tomáš Domes slíbil, že tento slovník, ve kterém používá jako klíče přirozená čísla, přepíše na normální list. Budiž. Zde jsem také skončil 21. 6. léta Páně 2019 s první vlnou debugování. Bože žehnej těm, kteří toto debugovací břímě převezmou. if not temata[int(tema.kod)-1][1] >= ci+2:
mozna_tema_vcn = mozna_tema_vcn.succ
continue continue
for i in range(1, rnd.randint(1, 4)): for i in range(1, rnd.randint(1, 4)):
@ -380,18 +405,35 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #
zamereni=tema.zamereni, zamereni=tema.zamereni,
autor=tema.autor, autor=tema.autor,
garant=tema.garant, garant=tema.garant,
opravovatele=rnd.sample(organizatori, poc_op),
kod=str(i), kod=str(i),
cislo_zadani=cislo, cislo_zadani=cislo,
cislo_reseni=slovnik_cisel[ci+2], cislo_reseni=cisla[ci+2-1],
cislo_deadline=slovnik_cisel[ci+2], cislo_deadline=cisla[ci+2-1],
max_body = rnd.randint(1, 8) max_body = rnd.randint(1, 8)
) )
p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),
rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) p.opravovatele.set(rnd.sample(organizatori, poc_op))
uloha_zadani = UlohaZadaniNode.objects.create(uloha=p)
p.UlohaZadaniNode = uloha_zadani text_zadani = Text.objects.create(
otec_syn(mozna_tema_vcn, uloha_zadani) na_web = " ".join(
[rnd.choice(sloveso),
rnd.choice(koho),
rnd.choice(ceho),
rnd.choice(jmeno),
rnd.choice(kde)]
),
do_cisla = " ".join(
[rnd.choice(sloveso),
rnd.choice(koho),
rnd.choice(ceho),
rnd.choice(jmeno),
rnd.choice(kde)]
)
)
zad = TextNode.objects.create(text = text_zadani)
uloha_zadani = UlohaZadaniNode.objects.create(uloha=p, first_child = zad)
p.ulohazadaninode = uloha_zadani
otec_syn(mozna_tema_vcn, uloha_zadani) # TODO dělá se podproblém takto??? TODO
text_vzoraku = Text.objects.create( text_vzoraku = Text.objects.create(
na_web = rnd.choice(reseni), na_web = rnd.choice(reseni),
@ -400,8 +442,7 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #
vzorak = TextNode.objects.create(text = text_vzoraku) vzorak = TextNode.objects.create(text = text_vzoraku)
uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak)
p.UlohaVzorakNode = uloha_vzorak p.UlohaVzorakNode = uloha_vzorak
#res_tema_vcn = res_tema_vcn = cisla[ci+2-1].cislonode.first_child
res_tema_vcn = slovnik_cisel[ci+2].CisloNode.first_child
while res_tema_vcn.tema != tema: while res_tema_vcn.tema != tema:
res_tema_vcn = res_tema_vcn.succ res_tema_vcn = res_tema_vcn.succ
otec_syn(res_tema_vcn, uloha_vzorak) otec_syn(res_tema_vcn, uloha_vzorak)
@ -409,6 +450,7 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #
p.save() p.save()
mozna_tema_vcn = mozna_tema_vcn.succ mozna_tema_vcn = mozna_tema_vcn.succ
return
def otec_syn(otec, syn): def otec_syn(otec, syn):
bratr = otec.first_child bratr = otec.first_child
@ -428,6 +470,7 @@ def create_test_data(size = 6, rnd = None):
s = Site.objects.filter(name="example.com") s = Site.objects.filter(name="example.com")
f = FlatPage.objects.create(url="/", title="Seminář M&M", f = FlatPage.objects.create(url="/", title="Seminář M&M",
content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>") content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>")
print(s)
f.sites.add(s[0]) f.sites.add(s[0])
f.save() f.save()
@ -466,20 +509,17 @@ def create_test_data(size = 6, rnd = None):
rocniky = gen_rocniky(last_rocnik, size) rocniky = gen_rocniky(last_rocnik, size)
# cisla # cisla
slovnik_rocnik_cisla = gen_cisla(rnd, rocniky) rocnik_cisla = gen_cisla(rnd, rocniky)
# generování obyčejných úloh do čísel # generování obyčejných úloh do čísel
for rocnik in rocniky: gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size)
slovnik_cisel = slovnik_rocnik_cisla[rocnik]
for ci in slovnik_cisel:
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 # generování témat, zatím v prvních třech číslech po jednom
# FIXME: více témat # FIXME: více témat
slovnik_rocnik_temata = gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori) rocnik_temata = gen_temata(rnd, rocniky, rocnik_cisla, organizatori)
# generování úloh k tématům ve všech číslech # generování úloh k tématům ve všech číslech
gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata) gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori)
# FIXME: misto typu ruzne typy objektu a vnoreni do sebe # FIXME: misto typu ruzne typy objektu a vnoreni do sebe
# TODO: vytvorit temata s ruznymi vlakny # TODO: vytvorit temata s ruznymi vlakny

Loading…
Cancel
Save