2015-03-29 14:52:07 +02:00
import datetime
import random
2019-06-11 01:34:20 +02:00
import lorem
2019-08-14 03:34:49 +02:00
import logging
2015-03-29 14:52:07 +02:00
2023-08-10 17:27:18 +02:00
import django . contrib . auth
from django . db import transaction
2015-06-02 22:37:25 +02:00
from django . contrib . flatpages . models import FlatPage
from django . contrib . sites . models import Site
2023-08-10 17:27:18 +02:00
from seminar . models import *
2015-03-29 14:52:07 +02:00
2019-08-14 03:34:49 +02:00
logger = logging . getLogger ( __name__ )
2023-08-10 17:27:18 +02:00
User = django . contrib . auth . get_user_model ( )
2019-05-11 01:15:05 +02:00
2020-05-07 00:38:12 +02:00
def get_text ( ) :
odstavec = lorem . paragraph ( )
return Text . objects . create ( na_web = odstavec , do_cisla = odstavec )
2019-07-25 23:09:31 +02:00
def gen_novinky ( rnd , organizatori ) :
2019-08-14 03:34:49 +02:00
logger . info ( ' Generuji novinky... ' )
2019-07-25 23:09:31 +02:00
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 ) :
2020-04-24 18:11:39 +02:00
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 ] ) )
2019-07-25 23:09:31 +02:00
novinka . save ( )
return
2020-02-18 14:25:21 +01:00
2020-06-18 11:28:36 +02:00
2019-06-11 00:25:25 +02:00
@transaction.atomic
def create_test_data ( size = 6 , rnd = None ) :
2023-08-10 17:27:18 +02:00
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
2019-08-14 03:34:49 +02:00
logger . info ( ' Vyrábím testovací data (size= {} )... ' . format ( size ) )
2019-06-11 00:25:25 +02:00
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 " )
2020-02-18 14:25:21 +01:00
f = FlatPage . objects . create ( url = " / " , title = " Seminář M&M " ,
2019-06-11 00:25:25 +02:00
content = " <p>Vítejte na stránce semináře MaM!</p> " )
2019-07-16 23:27:14 +02:00
print ( s )
2019-06-11 00:25:25 +02:00
f . sites . add ( s [ 0 ] )
f . save ( )
# users
admin = User . objects . create_superuser ( username = ' admin ' , email = ' ' , password = ' admin ' )
2020-09-07 23:17:36 +02:00
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 "
)
2019-06-11 00:25:25 +02:00
usernames = [ ' anet ' , ' bara ' , ' cyril ' , ' david ' , ' eva ' , ' filip ' ]
users = [ ]
for usr in usernames [ : size ] :
2020-09-08 13:11:05 +02:00
u = User . objects . create_user ( username = usr , password = usr )
2019-06-11 00:25:25 +02:00
u . first_name = usr . capitalize ( )
u . save ( )
users . append ( u )
print ( users )
# skoly
2023-08-10 17:27:18 +02:00
skoly , zlinska = gen_skoly ( )
2019-06-11 00:25:25 +02:00
# osoby
osoby = gen_osoby ( rnd , size )
# resitele a organizatori
last_rocnik = 25
2020-09-07 23:17:36 +02:00
organizatori = gen_organizatori ( rnd , osoby , last_rocnik )
2019-06-11 00:25:25 +02:00
resitele = gen_resitele ( rnd , osoby , skoly )
2019-07-25 23:09:31 +02:00
#generování novinek
novinky = gen_novinky ( rnd , organizatori )
2019-06-11 00:25:25 +02:00
# prijemci
prijemci = gen_prijemci ( rnd , osoby )
2020-02-18 14:25:21 +01:00
2023-08-10 17:27:18 +02:00
zlinska . kontaktni_osoba = rnd . choice ( osoby )
2019-06-11 00:25:25 +02:00
zlinska . save ( )
# rocniky
rocniky = gen_rocniky ( last_rocnik , size )
2020-02-18 14:25:21 +01:00
2019-06-11 00:25:25 +02:00
# cisla
2020-02-26 20:19:10 +01:00
# rocnik_cisla je pole polí čísel (typ Cislo), vnitřní pole odpovídají jednotlivým ročníkům.
2020-02-18 14:25:21 +01:00
rocnik_cisla = gen_cisla ( rnd , rocniky )
2019-06-11 00:25:25 +02:00
# generování obyčejných úloh do čísel
2019-07-16 23:27:14 +02:00
gen_ulohy_do_cisla ( rnd , organizatori , resitele , rocnik_cisla , rocniky , size )
2020-02-18 14:25:21 +01:00
2019-06-11 00:25:25 +02:00
# generování témat, zatím v prvních třech číslech po jednom
# FIXME: více témat
2020-02-26 20:08:35 +01:00
# 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.
2019-07-16 23:27:14 +02:00
rocnik_temata = gen_temata ( rnd , rocniky , rocnik_cisla , organizatori )
2020-02-18 14:25:21 +01:00
2020-05-07 00:38:12 +02:00
rocnik = Rocnik . objects . filter ( rocnik = 23 ) . first ( )
dlouhe_tema = gen_dlouhe_tema ( rnd , organizatori , rocnik , " Strašně dlouhé téma " ,
" MFI " , 8 )
2019-06-11 00:25:25 +02:00
# generování úloh k tématům ve všech číslech
2021-02-23 22:04:13 +01:00
gen_ulohy_k_tematum ( rnd , rocniky , rocnik_cisla , rocnik_temata , organizatori , resitele )
2020-02-18 14:25:21 +01:00
2019-07-24 16:05:01 +02:00
#generování soustředění
soustredeni = gen_soustredeni ( rnd , resitele , organizatori )
2020-02-18 14:25:21 +01:00
2019-07-24 16:05:01 +02:00
#generování konfer
konfery = gen_konfery ( size , rnd , organizatori , resitele , soustredeni )
2020-02-18 14:25:21 +01:00
2020-09-07 23:17:36 +02:00
# vytvoreni pdf ke korekturam
create_test_pdf ( rnd , organizatori )
2019-07-24 16:05:01 +02:00
# 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)
2019-05-23 21:34:37 +02:00
# TODO: vytvorit temata s ruznymi vlakny
# TODO: nagenerovat starsim rocnikum pohadku
2019-05-29 02:39:04 +02:00
# TODO: nagenerovat články
# TODO: vecpat obrázky všude, kde to jde
2019-06-20 23:15:09 +02:00
# TODO: mezičíslo node
2019-07-24 16:05:01 +02:00
# TODO: přidat ke konferám řešení a dát je do čísel
2019-05-10 23:19:43 +02:00
2020-06-18 11:28:36 +02:00
# Dohackované vytvoření jednoho článku
2020-09-07 23:17:36 +02:00
gen_clanek ( rnd , organizatori , resitele )
2019-07-25 23:09:31 +02:00
2021-11-07 03:32:19 +01:00
# 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
2019-07-25 23:09:31 +02:00
2019-05-24 02:31:15 +02:00
# obecné nastavení semináře, musí být už přidané ročníky a čísla, jinak se nastaví divně
2019-11-21 18:37:53 +01:00
nastaveni = Nastaveni . objects . create (
2019-05-24 02:31:15 +02:00
aktualni_cislo = Cislo . objects . all ( ) [ 1 ] )