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 = "
Vítejte na stránce semináře MaM!
") 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])