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.
157 lines
5.4 KiB
157 lines
5.4 KiB
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])
|
|
|