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 personalni.models import Osoba, Organizator from tvorba.models import Rocnik, Cislo from various.models import Nastaveni 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="

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', 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])