Browse Source

testutils.py: pridane generovani uloh, zatim zakomentovane skoly (problem s db)

export_seznamu_prednasek
Anet 6 years ago
parent
commit
becda91141
  1. 192
      seminar/testutils.py

192
seminar/testutils.py

@ -6,7 +6,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 from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Osoba, Organizator
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
@ -22,7 +22,8 @@ def create_test_data(size = 6, rnd = None):
# static URL stranky # static URL stranky
# FIXME: nakopirovat sem vsechny z produkcni databaze # FIXME: nakopirovat sem vsechny z produkcni databaze
s = Site.objects.filter(name="example.com") s = Site.objects.filter(name="example.com")
f = FlatPage.objects.create(url="/", title="Seminář M&M", content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>") f = FlatPage.objects.create(url="/", title="Seminář M&M",
content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>")
f.sites.add(s[0]) f.sites.add(s[0])
f.save() f.save()
@ -39,38 +40,40 @@ def create_test_data(size = 6, rnd = None):
# skoly # skoly
skoly = [] skoly = []
skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='101 00', ulice='Krátká 5', # prvnizs = Skola.objects.create(mesto='Praha', stat='CZ', psc='101 00', ulice='Krátká 5', nazev='První ZŠ', je_zs=True, je_ss=False)
nazev='První ZŠ', je_zs=True, je_ss=False)) # skoly.append(prvnizs)
skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='101 00', ulice='Krátká 5', # skoly.append(Skola.objects.create(mesto='Praha', stat='CZ', psc='101 00',
nazev='První SŠ', je_zs=False, je_ss=True)) # ulice='Krátká 5', nazev='První SŠ', je_zs=False, je_ss=True))
skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='102 00', ulice='Dlouhá 5', # skoly.append(Skola.objects.create(mesto='Praha', stat='CZ', psc='102 00',
nazev='Druhá SŠ', je_zs=False, je_ss=True)) # ulice='Dlouhá 5', nazev='Druhá SŠ', je_zs=False, je_ss=True))
skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='103 00', ulice='Široká 3', # skoly.append(Skola.objects.create(mesto='Praha', stat='CZ', psc='103 00',
nazev='Třetí SŠ a ZŠ', je_zs=True, je_ss=True)) # ulice='Široká 3', nazev='Třetí SŠ a ZŠ', je_zs=True, je_ss=True))
skoly.append(Skola.objects.create(mesto = 'Ostrava', stat='CZ', psc='700 00', ulic='Hluboká 42', # skoly.append(Skola.objects.create(mesto='Ostrava', stat='CZ', psc='700 00',
nazev='Hutní gympl', je_zs=False, je_ss=True)) # ulice='Hluboká 42', nazev='Hutní gympl', je_zs=False, je_ss=True))
skoly.append(Skola.objects.create(mesto = 'Humenné', stat='SK', psc='012 34', ulice='Pltká 1', # skoly.append(Skola.objects.create(mesto='Humenné', stat='SK', psc='012 34',
nazev='Sredná škuola', je_zs=False, je_ss=True)) # ulice='Pltká 1', nazev='Sredná škuola', je_zs=False, je_ss=True))
#FIXME pridat kontaktni osobu alespon nekde # #FIXME pridat kontaktni osobu alespon nekde
skoly.append(zlinska = Skola.objects.create(mesto = 'Zlín', stat='CZ', psc='76001', # skoly.append(zlinska = Skola.objects.create(mesto = 'Zlín', stat='CZ', psc='76001',
ulice='náměstí T.G. Masaryka 2734-9', nazev='Gymnázium a Střední jazyková škola s právem SJZ', # ulice='náměstí T.G. Masaryka 2734-9',
kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True)) # nazev='Gymnázium a Střední jazyková škola s právem SJZ',
# kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True))
# osoby # osoby
jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel'] jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel']
jmena_f = ['Eva', 'Karolína', 'Zuzana', 'Sylvie', 'Iva', 'Jana', 'Marie', 'Marta Iva', 'Shu Shan'] jmena_f = ['Eva', 'Karolína', 'Zuzana', 'Sylvie', 'Iva', 'Jana', 'Marie',
prijmeni_m = ['Novotný', 'Svoboda', 'Pecha', 'Kořen', 'Holan', 'Uhlíř', 'Chytráček', 'Pokora', 'Marta Iva', 'Shu Shan']
'Koch', 'Szegedy', 'Rudý', "von Neumann", "d'Este"] prijmeni_m = ['Novotný', 'Svoboda', 'Pecha', 'Kořen', 'Holan', 'Uhlíř', 'Chytráček',
prijmeni_f = ['Novotná', 'Svobodová', 'Machová', 'Zelená', 'Yu-Xin', 'Mlsná', 'Dubná', 'Mrkvová', 'Pokora', 'Koch', 'Szegedy', 'Rudý', "von Neumann", "d'Este"]
'Suchá', 'Lovelace', 'Holcová', 'Rui'] prijmeni_f = ['Novotná', 'Svobodová', 'Machová', 'Zelená', 'Yu-Xin', 'Mlsná', 'Dubná',
prezdivka = ['Kaki', 'Hurdur', 'Maracuja', 'Bobbo', None, None, None, None, None, None, None, 'Mrkvová', 'Suchá', 'Lovelace', 'Holcová', 'Rui']
'Riki', 'Sapa', None, '', '---', 'Koko'] prezdivka = ['Kaki', 'Hurdur', 'Maracuja', 'Bobbo', "", "", "", "", "",
domain = ['example.com', 'dolujeme.eu', 'mff.cuni.cz', 'strcprstskrzkrk.cz', 'british.co.uk', "", "", 'Riki', 'Sapa', "", '', '---', 'Koko']
'splachni.to', 'haha.org'] domain = ['example.com', 'dolujeme.eu', 'mff.cuni.cz', 'strcprstskrzkrk.cz',
'british.co.uk', 'splachni.to', 'haha.org']
seznam_ulic = ['Krátká', 'Vlhká', 'Jungmanova', '17. listopadu', '4. října', 'Roztocká', seznam_ulic = ['Krátká', 'Vlhká', 'Jungmanova', '17. listopadu', '4. října', 'Roztocká',
'Forstova', 'Generála Františka Janouška', 'Náměstí Války', 'Svratecké náměstí', 'Forstova', 'Generála Františka Janouška', 'Náměstí Války',
'Zelená lhota', 'Z Plynu', 'K Jezeru', 'U Kocourkova', 'Uštěpačná', 'Ostrorepská', 'Svratecké náměstí', 'Zelená lhota', 'Z Plynu', 'K Jezeru', 'U Kocourkova',
'Zubří'] 'Uštěpačná', 'Ostrorepská', 'Zubří']
seznam_mest = ['Praha', 'Brno', 'Ostrava', 'Horní Jelení', 'Dolní Zábrdovice', 'Prdelkov', seznam_mest = ['Praha', 'Brno', 'Ostrava', 'Horní Jelení', 'Dolní Zábrdovice', 'Prdelkov',
'Stará myslivna', 'Kocourkov', 'Šalingrad', 'Medvědí hora', 'Basilej', 'Stará myslivna', 'Kocourkov', 'Šalingrad', 'Medvědí hora', 'Basilej',
'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza'] 'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza']
@ -80,41 +83,54 @@ def create_test_data(size = 6, rnd = None):
pohlavi = rnd.randint(0,1) pohlavi = rnd.randint(0,1)
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi]) jmeno = rnd.choice([jmena_m, jmena_f][pohlavi])
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi]) prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi])
prezdivka = rnd.choice(prezdivka) prezdivka = rnd.choice([prezdivka])
email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)])
telefon = [rnd.choice([k for k in range(10)]) for i in range(10)] telefon = [rnd.choice([k for k in range(10)]) for i in range(10)]
narozeni = datetime.date(rnd.randint(1980, 2020), rnd.randint(1, 12), rnd.randint(1, 28)) narozeni = datetime.date(rnd.randint(1980, 2020), rnd.randint(1, 12),
ulic = rnd.choice([seznam_ulic]) rnd.randint(1, 28))
cp = rnd.int(1, 99) ulic = rnd.choice(seznam_ulic)
ulice = " ".join(ulic, cp) print(ulic)
cp = rnd.randint(1, 99)
ulice = " ".join([ulic, str(cp)])
mesto = rnd.choice([seznam_mest]) mesto = rnd.choice([seznam_mest])
psc = [rnd.choice([k for k in range(10)]) for i in range(6)] psc = [rnd.choice([k for k in range(10)]) for i in range(6)]
osoby.append(Osoba.objects.create(jmeno = jmeno, prijmeni = prijmeni, prezdivka = prezdivka, osoby.append(Osoba.objects.create(jmeno = jmeno, prijmeni = prijmeni,
pohlavi_muz = pohlavi, email = email, telefon = telefon, datum_narozeni = narozeni, prezdivka = prezdivka, pohlavi_muz = pohlavi, email = email,
ulice = ulice, mesto = mesto, psc = psc, telefon = telefon, datum_narozeni = narozeni, ulice = ulice,
datum_registrace = datetime.date(rnd.randint(2019, 2029), rnd.randint(1, 12), mesto = mesto, psc = psc,
rnd.randint(1, 28)))) datum_registrace = datetime.date(rnd.randint(2019, 2029),
rnd.randint(1, 12), rnd.randint(1, 28))))
#TODO pridat foto male a velke. Jak? #TODO pridat foto male a velke. Jak?
# resitele a organizatori # resitele a organizatori
last_rocnik = 25 last_rocnik = 25
resitele = [] resitele = []
organizatori = [] organizatori = []
for os in osoby: for os in osoby:
rand = rnd.randint(0, 8) rand = rnd.randint(0, 8)
if not (rand % 8 == 0): if not (rand % 8 == 0):
resitele.append(Resitel.objects.create(osoba = os, skola = rnd.choice([skoly]), resitele.append(Resitel.objects.create(osoba=os, skola=rnd.choice([skoly]),
rok_maturity = rnd.randint(2019, 2029), rok_maturity=rnd.randint(2019, 2029),
zasilat = rnd.choice(Resitel.ZASILAT_CHOICES))) zasilat=rnd.choice(Resitel.ZASILAT_CHOICES)))
else: else:
pusobnost = rnd.randint(1, last_rocnik) pusobnost = rnd.randint(1, last_rocnik)
od = 1993 + last_rocnik - pusobnost od = 1993 + last_rocnik - pusobnost
do = od + rnd.randint(1, 8) do = od + rnd.randint(1, 6)
# aktualni organizatori jeste nemaji vyplnene organizuje_do # aktualni organizatori jeste nemaji vyplnene organizuje_do
if do > datetime.now().year: #if do > datetime.datetime.now().year:
do = None # do = None
organizatori.append(Organizator.objects.create(osoba = os, organizuje_od = od, organizatori.append(Organizator.objects.create(osoba=os))
organizuje_do = do)) #organizuje_od=od))
#, organizuje_do=do))
# prijemci
prijemci = []
for i in range(10):
randos = rnd.choice(osoby)
prijemci.add(Prijemce.objects.create(osoba=randos))
zlinska.kontaktni_osoba=rnd.choice(osoby)
zlinska.save()
# rocniky # rocniky
for ri in range(min(last_rocnik - size, 1), last_rocnik + 1): for ri in range(min(last_rocnik - size, 1), last_rocnik + 1):
@ -132,36 +148,69 @@ def create_test_data(size = 6, rnd = None):
vydano = datetime.date(r.druhy_rok, ci - 3, rnd.randint(1, 28)) vydano = datetime.date(r.druhy_rok, ci - 3, rnd.randint(1, 28))
# posledni 2 cisla v rocniku nemaji deadline # posledni 2 cisla v rocniku nemaji deadline
if (ci + 2 > cisel): if (ci + 2 > cisel):
deadline = datetime.date(r.druhy_rok, ci - 1, rnd.randint(1, 28)) deadline = datetime.date(r.druhy_rok, ci - 1,
rnd.randint(1, 28))
else: else:
deadline = None deadline = None
cislo = Cislo.objects.create(rocnik = r, cislo = str(ci), datum_vydani=vydano, cislo = Cislo.objects.create(rocnik = r, cislo = str(ci),
datum_deadline=deadline, verejne_db=True) datum_vydani=vydano, datum_deadline=deadline, verejne_db=True)
slovnik_cisel[ci] = cislo slovnik_cisel[ci] = cislo
# 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
# TODO: nagenerovat starsim rocnikum pohadku # TODO: nagenerovat starsim rocnikum pohadku
# problemy resene v ci # ulohy resene v ci
# seq='#ABCDEFGHIJKLMNOPQRSTUVWXYZ' jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá",
# if ci >= 3: "Zákeřná", "Fyzikální"]
# for pi in range(1, ((size + 1) // 2) + 1): co = ["kostka", "smršť", "díra", "zrada", "toulka", "tyč",
# p = Problem.objects.create(autor = rnd.choice(orgs), cislo_zadani=cs[ci-2], "úloha", "blecha"]
# cislo_reseni=cs[ci], opravovatel = rnd.choice(orgs), kod = str(pi), sloveso = ["Najděte", "Spočítejte", "Zapište", "Změřte", "Odhadněte"]
# nazev = u'Dummy úloha %s-%s' % (seq[ci], seq[pi]), koho = ["délku", "počet", "množství", "dílky"]
# stav = Problem.STAV_ZADANY, typ = Problem.TYP_ULOHA, body = rnd.randint(1, 5)) ceho = ["všech", "správných", "konstatních", "zelených"]
# p.text_problemu = (u"<p>Text problému <strong>%s.%s %s</strong><em> [id %d]</em> za %d body.</p>" % jmeno = ["řešení", "tahů", "čísel", "kalhot", "koulí", "hadů"]
# (p.cislo_zadani.kod(), p.kod, p.nazev, p.id, p.body)) kde = ["na zemi", "ve vesmíru", "ve vzduchu", "na šňůře", "v letadle"]
# p.text_problemu_org = u"<p><strong>Neveřejný</strong> text problému.</p>" obor = ["M", "F", "I", "O", "B"]
# p.save() reseni = ["to je přece jasné", "triviální", "omlouváme se,"
# "otevřený problém", "neřešitelné", "triviálně triviální",
# poc_reseni = rnd.randint(size // 2, size * 2) "použitím věty z prvního semestru na matfyzu",
# res_sel = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2)) "jednoduše pomocí látky z druhého semestru na matfyzu",
# for resitel in res_sel: "netriviální aplikace diferenciálních rovnic", "zadání je vnitřně"
# res = Reseni.objects.create(problem = p, resitel = resitel, "sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli,"
# body = rnd.randint(0, p.body), cislo_body = cs[ci]) "tak jste fakt hloupí"]
#
if ci >= 3:
for pi in range(1, ((size + 1) // 2) + 1):
poc_op = rnd.randint(1, 4)
poc_oboru = rnd.randint(1, 2)
p = Uloha.objects.create(
nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]),
stav=Problem.STAV_ZADANY,
zamereni=rnd.sample(zamereni, poc_oboru),
autor=rnd.choice(organizatori),
garant=rnd.choice(organizatori),
opravovatele=rnd.sample(organizatori, poc_op),
kod=str(pi),
cislo_zadani=cs[ci-2],
cislo_reseni=cs[ci],
cislo_deadline=cs[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)])
p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])
p.save()
# reseni ulohy
poc_reseni = rnd.randint(size // 2, size * 2)
poc_resitel = rnd.randint(1, 3)
res_sel = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2))
for resitel in res_sel:
res = Reseni.objects.create(problem = p,
resitele=[resitel],
forma=rnd.choice(Reseni.FORMA_CHOICES))
hod = Hodnoceni.objects.create(body=rnd.randint(0, p.max_body),
cislo_body=cs[ci], reseni=res, problem=p)
# TODO: nahodne nagenerovat problemum reseni a prilohy reseni, hodnoceni # TODO: nahodne nagenerovat problemum reseni a prilohy reseni, hodnoceni
@ -175,3 +224,4 @@ def create_test_data(size = 6, rnd = None):
nastaveni = Nastaveni.objects.create(aktualni_rocnik = Rocnik.objects.last(), nastaveni = Nastaveni.objects.create(aktualni_rocnik = Rocnik.objects.last(),
aktualni_cislo = Cislo.objects.all()[1]) aktualni_cislo = Cislo.objects.all()[1])

Loading…
Cancel
Save