mamweb/seminar/testutils.py

158 lines
5.4 KiB
Python
Raw Normal View History

import datetime
import random
import lorem
import logging
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
from seminar.models import *
logger = logging.getLogger(__name__)
User = django.contrib.auth.get_user_model()
2019-05-11 01:15:05 +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):
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):
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-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):
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))
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")
f = FlatPage.objects.create(url="/", title="Seminář M&M",
2019-06-11 00:25:25 +02:00
content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>")
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')
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]:
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
skoly, zlinska = gen_skoly()
2019-06-11 00:25:25 +02:00
# osoby
osoby = gen_osoby(rnd, size)
# resitele a organizatori
last_rocnik = 25
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)
zlinska.kontaktni_osoba = rnd.choice(osoby)
2019-06-11 00:25:25 +02:00
zlinska.save()
# rocniky
rocniky = gen_rocniky(last_rocnik, size)
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.
rocnik_cisla = gen_cisla(rnd, rocniky)
2019-06-11 00:25:25 +02:00
# generování obyčejných úloh do čísel
gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size)
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.
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)
2019-06-11 00:25:25 +02:00
# 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
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
# TODO: přidat ke konferám řešení a dát je do čísel
2020-06-18 11:28:36 +02:00
# Dohackované vytvoření jednoho článku
gen_clanek(rnd, organizatori, resitele)
2019-07-25 23:09:31 +02: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
# 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(
aktualni_cislo = Cislo.objects.all()[1])