@ -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 , 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 . sites . models import Site
@ -122,7 +122,7 @@ def gen_organizatori(rnd, osoby, last_rocnik, users):
organizuje_od = od , organizuje_do = do ) )
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
jaka = [ " Šachová " , " Černá " , " Větrná " , " Dlouhá " , " Křehká " , " Rychlá " ,
" 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ě "
" sporné " , " nepopsatelně jednoduché " , " pokud jste na to nepřišli, "
" tak jste fakt hloupí " ]
if ci > = 3 : #TODO nagenerovat i nody!!!
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 = slovnik_cisel [ ci - 2 ] ,
cislo_reseni = slovnik_cisel [ ci ] ,
cislo_deadline = slovnik_cisel [ ci ] ,
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
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 )
)
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
text_zadani = Text . objects . create (
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 ( cisla [ ci - 2 - 1 ] . cislonode , 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
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
def gen_soustredeni ( rnd , resitele , organizatori ) :
@ -251,10 +271,10 @@ def gen_konfery(rnd, reseni, organizatori, ucastnici, soustredeni):
return konfery
def gen_cisla ( rnd , rocniky ) :
slovnik_ rocnik_cisla = { }
rocnik_cisla = [ ]
for rocnik in rocniky :
otec = True
slovnik_cisel = { }
cisla = [ ]
cisel = rnd . randint ( 4 , 8 )
node = None
for ci in range ( 1 , cisel + 1 ) :
@ -289,11 +309,11 @@ def gen_cisla(rnd, rocniky):
rocnik . rocniknode . first_child = node
rocnik . save ( )
slovnik_cisel [ ci ] = cislo
slovnik_rocnik_cisla [ rocnik ] = slovnik_cisel
return slovnik_ rocnik_cisla
cisla . append ( cislo )
rocnik_cisla . append ( 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í " ,
" Šokující " , " Magnetické " , " Modré " , " Překvapivé " ,
" Plasmatické " , " Novoroční " ]
@ -302,40 +322,41 @@ def gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori):
poc_oboru = rnd . randint ( 1 , 2 )
poc_op = rnd . randint ( 1 , 3 )
slovnik_rocnik_temata = { }
rocnik_temata = [ ]
k = 0
for rocnik in rocniky :
n = 1
temata = { }
slovnik_cisel = slovnik_rocnik_cisla [ rocnik ]
for ci in slovnik_cisel :
if ci < = 3 :
t = Tema . objects . create (
# atributy třídy Problem
nazev = " " . join ( [ rnd . choice ( jake ) , rnd . choice ( co ) ] ) ,
stav = Problem . STAV_ZADANY ,
zamereni = rnd . sample ( [ " M " , " F " , " I " , " O " , " B " ] , poc_oboru ) ,
autor = rnd . choice ( organizatori ) ,
g arant = rnd . choice ( organizatori ) ,
kod = str ( n ) ,
# atributy třídy Téma
tema_typ = rnd . choice ( Tema . TEMA_CHOICES ) ,
rocnik = rocnik
)
n + = 1
konec_tematu = min ( rnd . randint ( ci , 7 ) , len ( slovnik_ cise l) )
for i in range ( ci , konec_tematu + 1 ) :
node = TemaVCisleNode . objects . create ( tema = t )
otec = slovnik_ cise l[ i ] . cislonode
otec_syn ( otec , node )
k + = 1
n = 0
temata = [ ]
cisla = rocnik_cisla [ k - 1 ]
for ci in range ( 1 , 3 ) :
n + = 1
t = Tema . objects . create (
# atributy třídy Problem
nazev = " " . join ( [ rnd . choice ( jake ) , rnd . choice ( co ) ] ) ,
stav = Problem . STAV_ZADANY ,
zamereni = rnd . sample ( [ " M " , " F " , " I " , " O " , " B " ] , poc_oboru ) ,
auto r = rnd . choice ( organizatori ) ,
garant = rnd . choice ( organizatori ) ,
kod = str ( n ) ,
# atributy třídy Téma
tema_typ = rnd . choice ( Tema . TEMA_CHOICES ) ,
rocnik = rocnik
)
konec_tematu = min ( rnd . randint ( ci , 7 ) , len ( cisla ) )
for i in range ( ci , konec_tematu + 1 ) :
node = TemaVCisleNode . objects . create ( tema = t )
otec = cisla [ i - 1 ] . cislonode
otec_syn ( otec , node )
t . opravovatele . set ( rnd . sample ( organizatori , poc_op ) )
t . save ( )
temata [ n ] = ( ci , konec_tematu , t )
slovnik_rocnik_temata [ rocnik ] = temata
return slovnik_ rocnik_temata
t . opravovatele . set ( rnd . sample ( organizatori , poc_op ) )
t . save ( )
temata . append ( ( ci , konec_tematu , t ) )
rocnik_temata . append ( 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 , r ocniky , rocnik_cisla , rocnik_temata , organizatori ) :
# ulohy resene v cisle
jaka = [ " Šachová " , " Černá " , " Větrná " , " Dlouhá " , " Křehká " , " Rychlá " ,
" 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ě "
" sporné " , " nepopsatelně jednoduché " , " pokud jste na to nepřišli, "
" tak jste fakt hloupí " ]
k = 0
for rocnik in rocniky :
slovnik_cisel = slovnik_rocnik_cisla [ rocnik ]
slovnik_temat = slovnik_rocnik_temata [ rocnik ]
for ci in list ( slovnik_cisel ) [ : - 2 ] :
cislo = slovnik_cisel [ ci ]
k + = 1
cisla = rocnik_cisla [ k - 1 ]
temata = rocnik_temata [ k - 1 ]
for ci in range ( len ( cisla ) ) :
cislo = cisla [ ci - 1 ]
mozna_tema_vcn = cislo . cislonode . first_child
while mozna_tema_vcn != None :
if type ( mozna_tema_vcn ) != TemaVCisleNode :
mozna_tema_vcn = mozna_tema_vcn . succ
continue
else :
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
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 ,
autor = tema . autor ,
garant = tema . garant ,
opravovatele = rnd . sample ( organizatori , poc_op ) ,
kod = str ( i ) ,
cislo_zadani = cislo ,
cislo_reseni = slovnik_ cise l[ ci + 2 ] ,
cislo_deadline = slovnik_ cise l[ ci + 2 ] ,
cislo_reseni = cisla [ ci + 2 - 1 ] ,
cislo_deadline = cisla [ ci + 2 - 1 ] ,
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 )
p . opravovatele . set ( rnd . sample ( organizatori , poc_op ) )
text_zadani = Text . objects . create (
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 (
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 )
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
res_tema_vcn = cisla [ ci + 2 - 1 ] . cislonode . first_child
while res_tema_vcn . tema != tema :
res_tema_vcn = res_tema_vcn . succ
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 ( )
mozna_tema_vcn = mozna_tema_vcn . succ
return
def otec_syn ( otec , syn ) :
bratr = otec . first_child
@ -428,6 +470,7 @@ def create_test_data(size = 6, rnd = None):
s = Site . objects . filter ( name = " example.com " )
f = FlatPage . objects . create ( url = " / " , title = " Seminář M&M " ,
content = " <p>Vítejte na stránce semináře MaM!</p> " )
print ( s )
f . sites . add ( s [ 0 ] )
f . save ( )
@ -466,20 +509,17 @@ def create_test_data(size = 6, rnd = None):
rocniky = gen_rocniky ( last_rocnik , size )
# cisla
slovnik_ rocnik_cisla = gen_cisla ( rnd , rocniky )
rocnik_cisla = gen_cisla ( rnd , rocniky )
# generování obyčejných úloh do čísel
for rocnik in rocniky :
slovnik_cisel = slovnik_rocnik_cisla [ rocnik ]
for ci in slovnik_cisel :
gen_ulohy_do_cisla ( rnd , ci , organizatori , resitele , slovnik_cisel , size )
gen_ulohy_do_cisla ( rnd , organizatori , resitele , rocnik_cisla , rocniky , 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 ( 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
gen_ulohy_k_tematum ( rocniky , slovnik_ rocnik_cisla, slovnik_ rocnik_temata)
gen_ulohy_k_tematum ( rnd , r ocniky , rocnik_cisla , rocnik_temata , organizatori )
# FIXME: misto typu ruzne typy objektu a vnoreni do sebe
# TODO: vytvorit temata s ruznymi vlakny