import datetime
import random
import lorem
import logging
import django . contrib . auth
from django . db import transaction
from django . contrib . flatpages . models import FlatPage
from django . contrib . sites . models import Site
from seminar . models import *
logger = logging . getLogger ( __name__ )
User = django . contrib . auth . get_user_model ( )
def get_text ( ) :
odstavec = lorem . paragraph ( )
return Text . objects . create ( na_web = odstavec , do_cisla = odstavec )
def gen_novinky ( rnd , organizatori ) :
logger . info ( ' Generuji novinky... ' )
jake = [ " zábavné " , " veselé " , " dobrodružné " , " skvělé " ]
co = [ " soustředění " , " Fyziklání " , " víkendové setkání " ]
kde = [ " na Šumavě " , " v Praze " , " u Plzně " , " na Marsu " ]
kdy = [ " Zítra bude " , " 10. 10. 2020 bude " , " V prosinci bude " , " V létě bude " ]
for i in range ( 5 ) :
text_novinky = " " . join ( [ rnd . choice ( kdy ) , rnd . choice ( kde ) , rnd . choice ( jake ) ,
rnd . choice ( co ) ] )
novinka = Novinky . objects . create ( id = i , autor = rnd . choice ( organizatori ) ,
text = ( text_novinky + " , těšíme se na vás! " ) , zverejneno = rnd . choice ( [ True , False ] ) )
novinka . save ( )
return
@transaction . atomic
def create_test_data ( size = 6 , rnd = None ) :
from korektury . testutils import create_test_pdf
from personalni . testutils import gen_organizatori , gen_osoby , gen_skoly , gen_prijemci , gen_resitele
from tvorba . testutils import gen_clanek , gen_cisla , gen_temata , gen_rocniky , gen_ulohy_do_cisla , gen_dlouhe_tema , gen_ulohy_k_tematum
from soustredeni . testutils import gen_soustredeni , gen_konfery
from personalni . models import Osoba , Organizator
from tvorba . models import Cislo , Rocnik
logger . info ( ' Vyrábím testovací data (size= {} )... ' . format ( size ) )
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 = " <p>Vítejte na stránce semináře MaM!</p> " )
print ( s )
f . sites . add ( s [ 0 ] )
f . save ( )
# users
admin = User . objects . create_superuser ( username = ' admin ' , email = ' ' , password = ' admin ' )
os_admin = Osoba . objects . create (
user = admin , jmeno = ' admin ' , prijmeni = ' admin ' ,
prezdivka = ' admin ' , pohlavi_muz = 1 , email = ' admin@admin.admin ' ,
telefon = ' 123 456 789 ' , datum_narozeni = datetime . date ( 2000 , 1 , 1 ) ,
ulice = ' admin ' , mesto = ' admin ' , psc = ' 100 00 ' ,
datum_registrace = datetime . date ( 2020 , 9 , 6 )
)
or_admin = Organizator . objects . create (
osoba = os_admin , organizuje_od = None , organizuje_do = None ,
strucny_popis_organizatora = " Organizátor k uživateli Admin "
)
usernames = [ ' anet ' , ' bara ' , ' cyril ' , ' david ' , ' eva ' , ' filip ' ]
users = [ ]
for usr in usernames [ : size ] :
u = User . objects . create_user ( username = usr , password = usr )
u . first_name = usr . capitalize ( )
u . save ( )
users . append ( u )
print ( users )
# skoly
skoly , zlinska = gen_skoly ( )
# osoby
osoby = gen_osoby ( rnd , size )
# resitele a organizatori
last_rocnik = 25
organizatori = gen_organizatori ( rnd , osoby , last_rocnik )
resitele = gen_resitele ( rnd , osoby , skoly )
#generování novinek
novinky = gen_novinky ( rnd , organizatori )
# prijemci
prijemci = gen_prijemci ( rnd , osoby )
zlinska . kontaktni_osoba = rnd . choice ( osoby )
zlinska . save ( )
# rocniky
rocniky = gen_rocniky ( last_rocnik , size )
# cisla
# rocnik_cisla je pole polí čísel (typ Cislo), vnitřní pole odpovídají jednotlivým ročníkům.
rocnik_cisla = gen_cisla ( rnd , rocniky )
# generování obyčejných úloh do čísel
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
# rocnik_temata je pole polí trojic (první číslo :int, poslední číslo :int, téma:Tema), přičemž každé vnitřní pole odpovídá ročníku a FIXME: je to takhle fuj a když to někdo vidí poprvé, tak je z toho smutný, protože vůbec neví, co se děje a co má čekat.
rocnik_temata = gen_temata ( rnd , rocniky , rocnik_cisla , organizatori )
rocnik = Rocnik . objects . filter ( rocnik = 23 ) . first ( )
dlouhe_tema = gen_dlouhe_tema ( rnd , organizatori , rocnik , " Strašně dlouhé téma " ,
" MFI " , 8 )
# generování úloh k tématům ve všech číslech
gen_ulohy_k_tematum ( rnd , rocniky , rocnik_cisla , rocnik_temata , organizatori , resitele )
#generování soustředění
soustredeni = gen_soustredeni ( rnd , resitele , organizatori )
#generování konfer
konfery = gen_konfery ( size , rnd , organizatori , resitele , soustredeni )
# vytvoreni pdf ke korekturam
create_test_pdf ( rnd , organizatori )
# TODO: nastavi správně, kolik se čeho generuje, aby rozsahy přibližně odpovídaly
# FIXME: misto typu ruzne typy objektu a vnoreni do sebe (Tom nechápe, co je tímto fixme míněno)
# TODO: vytvorit temata s ruznymi vlakny
# TODO: nagenerovat starsim rocnikum pohadku
# TODO: nagenerovat články
# TODO: vecpat obrázky všude, kde to jde
# TODO: mezičíslo node
# TODO: přidat ke konferám řešení a dát je do čísel
# Dohackované vytvoření jednoho článku
gen_clanek ( rnd , organizatori , resitele )
# TODO: přidat články včetně zařazení do struktury treenodů,
# a následně otestovat konsistency check databáze z utils.py
# pomocí stránky /stav
# obecné nastavení semináře, musí být už přidané ročníky a čísla, jinak se nastaví divně
nastaveni = Nastaveni . objects . create (
aktualni_cislo = Cislo . objects . all ( ) [ 1 ] )