Web M&M
https://mam.matfyz.cz
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.5 KiB
136 lines
4.5 KiB
5 months ago
|
import datetime
|
||
|
import random
|
||
|
import logging
|
||
|
|
||
|
import django.contrib.auth
|
||
|
from django.contrib.flatpages.models import FlatPage
|
||
|
from django.contrib.sites.models import Site
|
||
|
from django.db import transaction
|
||
|
|
||
|
from seminar.models import Rocnik, Cislo, Nastaveni, Osoba, Organizator
|
||
|
|
||
|
from korektury.testutils import create_test_pdf
|
||
|
from novinky.testutils import gen_novinky
|
||
|
from personalni.testutils import gen_organizatori, gen_osoby, gen_prijemci, gen_resitele, gen_skoly
|
||
|
from soustredeni.testutils import gen_soustredeni, gen_konfery
|
||
|
from tvorba.testutils import gen_cisla, gen_clanek, gen_dlouhe_tema, gen_rocniky, gen_temata, gen_ulohy_do_cisla, gen_ulohy_k_tematum
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
User = django.contrib.auth.get_user_model()
|
||
|
|
||
|
|
||
|
@transaction.atomic
|
||
|
def create_test_data(size=6, rnd=None):
|
||
|
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', osloveni='', 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 = 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)
|
||
|
|
||
|
# 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(size, resitele, organizatori, rnd=rnd)
|
||
|
|
||
|
# generování konfer
|
||
|
konfery = gen_konfery(size, organizatori, soustredeni, rnd=rnd)
|
||
|
|
||
|
# 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])
|