137 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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="<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])
 |