Rozstřílení seminářové aplikace #60
					 6 changed files with 443 additions and 368 deletions
				
			
		
							
								
								
									
										27
									
								
								novinky/testutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								novinky/testutils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| import logging | ||||
| 
 | ||||
| from .models import Novinky | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| 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 | ||||
							
								
								
									
										40
									
								
								odevzdavatko/testutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								odevzdavatko/testutils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| import datetime | ||||
| import random | ||||
| 
 | ||||
| from seminar.models.odevzdavatko import Reseni, Hodnoceni | ||||
| 
 | ||||
| 
 | ||||
| def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_cisla, resitele): | ||||
| 	pocet_reseni = rnd.randint(pocet_resitelu//4, pocet_resitelu * 4) | ||||
| 	# generujeme náhodný počet řešení vzhledem k počtu řešitelů čísla | ||||
| 	for _ in range(pocet_reseni): | ||||
| 		#print("Generuji {}-té řešení".format(reseni)) | ||||
| 		if rnd.randint(1, 10) == 1: | ||||
| 			# cca desetina řešení od více řešitelů | ||||
| 			res_vyber = rnd.sample(resitele_cisla, rnd.randint(2, 5)) | ||||
| 		else: | ||||
| 			res_vyber = rnd.sample(resitele_cisla, 1) | ||||
| 		if resitele[0] in res_vyber: # speciální řešitel, který nemá žádné body | ||||
| 			res_vyber.remove(resitele[0]) | ||||
| 
 | ||||
| 		# Vytvoření řešení. | ||||
| 		if uloha.cislo_zadani.zlomovy_deadline_pro_papirove_cislo() is not None: | ||||
| 			# combine, abychom dostali plný čas a ne jen datum | ||||
| 			cas_doruceni = uloha.cislo_zadani.deadline_v_cisle.first().deadline - datetime.timedelta(days=random.randint(0, 40)) - datetime.timedelta(minutes=random.randint(0, 60*24)) | ||||
| 			# astimezone, protože jinak vyhazuje warning o nenastavené TZ | ||||
| 			res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)[0], cas_doruceni=cas_doruceni.astimezone(datetime.timezone.utc)) | ||||
| 		else: | ||||
| 			res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)[0]) | ||||
| 		# Problém a řešitele přiřadíme později, ManyToManyField | ||||
| 		# se nedá vyplnit v create(). | ||||
| 		res.resitele.set(res_vyber) | ||||
| 		res.save() | ||||
| 
 | ||||
| 		# Vytvoření hodnocení. | ||||
| 		hod = Hodnoceni.objects.create( | ||||
| 			body=rnd.randint(0, uloha.max_body), | ||||
| 			cislo_body=cisla[poradi_cisla - 1], | ||||
| 			reseni=res, | ||||
| 			problem=uloha | ||||
| 		) | ||||
| 	return | ||||
							
								
								
									
										235
									
								
								personalni/testutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								personalni/testutils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,235 @@ | |||
| import datetime | ||||
| import logging | ||||
| import unidecode | ||||
| 
 | ||||
| from django.contrib.auth.models import Permission | ||||
| from django.contrib.auth.models import Group | ||||
| import django.contrib.auth | ||||
| 
 | ||||
| from .models import Osoba, Skola, Organizator, Resitel, Prijemce | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| User = django.contrib.auth.get_user_model() | ||||
| 
 | ||||
| zlinska = None  # tohle bude speciální škola, které později dodáme kontaktní osobu | ||||
| 
 | ||||
| 
 | ||||
| # testuje unikátnost vygenerovaného jména | ||||
| def __unikatni_jmeno(osoby, jmeno, prijmeni): | ||||
| 	for os in osoby: | ||||
| 		if os.jmeno == jmeno and os.prijmeni == prijmeni: | ||||
| 			return 0 | ||||
| 	else: | ||||
| 		return 1 | ||||
| 
 | ||||
| 
 | ||||
| def gen_osoby(rnd, size): | ||||
| 	logger.info('Generuji osoby (size={})...'.format(size)) | ||||
| 
 | ||||
| 	jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel'] | ||||
| 	jmena_f = ['Eva', 'Karolína', 'Zuzana', 'Sylvie', 'Iva', 'Jana', 'Marie', 'Marta Iva', 'Shu Shan'] | ||||
| 	prijmeni_m = ['Novotný', 'Svoboda', 'Pecha', 'Kořen', 'Holan', 'Uhlíř', 'Chytráček', 'Pokora', 'Koch', 'Szegedy', 'Rudý', "von Neumann", "d'Este"] | ||||
| 	prijmeni_f = ['Novotná', 'Svobodová', 'Machová', 'Zelená', 'Yu-Xin', 'Mlsná', 'Dubná', 'Mrkvová', 'Suchá', 'Lovelace', 'Holcová', 'Rui', "Nováčková Tydlitátová"] | ||||
| 	prezdivky = ['Kaki', 'Hurdur', 'Maracuja', 'Bobbo', "", "", "", "", "", "", "", 'Riki', 'Sapa', "", '', '---', 'Koko'] | ||||
| 	domain = ['example.com', 'dolujeme.eu', 'mff.cuni.cz', 'strcprstskrzkrk.cz', 'british.co.uk', 'splachni.to', 'haha.org'] | ||||
| 	seznam_ulic = ['Krátká', 'Vlhká', 'Jungmanova', '17. listopadu', '4. října', 'Roztocká', 'Forstova', 'Generála Františka Janouška', 'Náměstí Války', 'Svratecké náměstí', 'Zelená lhota', 'Z Plynu', 'K Jezeru', 'U Kocourkova', 'Uštěpačná', 'Ostrorepská', 'Zubří'] | ||||
| 	seznam_mest = ['Praha', 'Brno', 'Ostrava', 'Horní Jelení', 'Dolní Zábrdovice', 'Prdelkov', 'Stará myslivna', 'Kocourkov', 'Šalingrad', 'Medvědí hora', 'Basilej', 'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza'] | ||||
| 
 | ||||
| 	osoby = [] | ||||
| 	# 30 je náhodná konstanta, size je použité na víc místech a | ||||
| 	# říká, jak velká asi chceme testovací data | ||||
| 	for i in range(30 * size): | ||||
| 		pohlavi_idx = rnd.randint(0, 2)  # 2 = nebinární | ||||
| 		osloveni = [Osoba.OSLOVENI_MUZSKE, Osoba.OSLOVENI_ZENSKE, Osoba.OSLOVENI_ZADNE][pohlavi_idx] | ||||
| 		jmeno = rnd.choice([jmena_m, jmena_f, jmena_m + jmena_f][pohlavi_idx]) | ||||
| 		prijmeni = rnd.choice([prijmeni_m, prijmeni_f, prijmeni_m + prijmeni_f][pohlavi_idx]) | ||||
| 		if pohlavi_idx == 2: logger.debug(f'Testdata: nebinární osoba: {jmeno} {prijmeni}.') | ||||
| 		pokusy = 0 | ||||
| 		max_pokusy = 120*size | ||||
| 		while not __unikatni_jmeno and pokusy < max_pokusy: | ||||
| 			# pokud jméno a příjmení není unikátní, zkoušíme generovat nová | ||||
| 			# do daného limitu (abychom se nezacyklili do nekonečna při málo jménech a příjmeních | ||||
| 			# ze kterých se generuje) | ||||
| 			jmeno = rnd.choice([jmena_m, jmena_f, jmena_m + jmena_f][pohlavi_idx]) | ||||
| 			prijmeni = rnd.choice([prijmeni_m, prijmeni_f, prijmeni_m + prijmeni_f][pohlavi_idx]) | ||||
| 			pokusy += 1 | ||||
| 		if pokusy >= max_pokusy: | ||||
| 			print("Chyba, na danou velikost testovacích dat příliš málo možných jmen a příjmení") | ||||
| 			exit() | ||||
| 		prezdivka = rnd.choice(prezdivky) | ||||
| 		email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) | ||||
| 		telefon = "".join([str(rnd.choice([k for k in range(10)])) for _ in range(9)]) | ||||
| 		narozeni = datetime.date( | ||||
| 			rnd.randint(1980, datetime.datetime.now().year), | ||||
| 			rnd.randint(1, 12), | ||||
| 			rnd.randint(1, 28) | ||||
| 		) | ||||
| 		ulic = rnd.choice(seznam_ulic) | ||||
| 		cp = rnd.randint(1, 99) | ||||
| 		ulice = " ".join([ulic, str(cp)]) | ||||
| 		mesto = rnd.choice(seznam_mest) | ||||
| 		psc = "".join([str(rnd.choice([k for k in range(10)])) for _ in range(5)]) | ||||
| 
 | ||||
| 		osoby.append(Osoba.objects.create( | ||||
| 			jmeno=jmeno, prijmeni=prijmeni, | ||||
| 			prezdivka=prezdivka, osloveni=osloveni, | ||||
| 			email=email, telefon=telefon, | ||||
| 			datum_narozeni=narozeni, | ||||
| 			ulice=ulice, mesto=mesto, psc=psc, | ||||
| 			datum_registrace=datetime.date( | ||||
| 				rnd.randint(2019, 2029), rnd.randint(1, 12), rnd.randint(1, 28) | ||||
| 			) | ||||
| 		)) | ||||
| 
 | ||||
| 	# TODO pridat foto male a velke. Jak? | ||||
| 	# Pavel tvrdí, že to necháme a přidáme až do adminu | ||||
| 
 | ||||
| 	return osoby | ||||
| 
 | ||||
| 
 | ||||
| def gen_skoly():  # TODO někdy to přepsat, aby jich bylo více | ||||
| 	logger.info('Generuji školy...') | ||||
| 
 | ||||
| 	skoly = [] | ||||
| 	prvnizs = Skola.objects.create( | ||||
| 		mesto='Praha', stat='CZ', psc='101 00', | ||||
| 		ulice='Krátká 5', nazev='První ZŠ', je_zs=True, je_ss=False, | ||||
| 	) | ||||
| 	skoly.append(prvnizs) | ||||
| 	skoly.append(Skola.objects.create( | ||||
| 		mesto='Praha', stat='CZ', psc='101 00', | ||||
| 		ulice='Krátká 5', nazev='První SŠ', je_zs=False, je_ss=True, | ||||
| 	)) | ||||
| 	skoly.append(Skola.objects.create( | ||||
| 		mesto='Praha', stat='CZ', psc='102 00', | ||||
| 		ulice='Dlouhá 5', nazev='Druhá SŠ', je_zs=False, je_ss=True, | ||||
| 	)) | ||||
| 	skoly.append(Skola.objects.create( | ||||
| 		mesto='Praha', stat='CZ', psc='103 00', | ||||
| 		ulice='Široká 3', nazev='Třetí SŠ a ZŠ', je_zs=True, je_ss=True, | ||||
| 	)) | ||||
| 	skoly.append(Skola.objects.create( | ||||
| 		mesto='Ostrava', stat='CZ', psc='700 00', | ||||
| 		ulice='Hluboká 42', nazev='Hutní gympl', je_zs=False, je_ss=True, | ||||
| 	)) | ||||
| 	skoly.append(Skola.objects.create( | ||||
| 		mesto='Humenné', stat='SK', psc='012 34', | ||||
| 		ulice='Pltká 1', nazev='Sredná škuola', je_zs=False, je_ss=True, | ||||
| 	)) | ||||
| 	global zlinska | ||||
| 	zlinska = Skola.objects.create( | ||||
| 		mesto='Zlín', stat='CZ', psc='76001', | ||||
| 		ulice='náměstí T.G. Masaryka 2734-9', | ||||
| 		nazev='Gymnázium a Střední jazyková škola s právem SJZ', | ||||
| 		kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True, | ||||
| 	) | ||||
| 	skoly.append(zlinska) | ||||
| 	return skoly | ||||
| 
 | ||||
| 
 | ||||
| def gen_resitele(rnd, osoby, skoly): | ||||
| 	logger.info('Generuji řešitele...') | ||||
| 
 | ||||
| 	resitele = [] | ||||
| 	x = 0 | ||||
| 	resitel_perm = Permission.objects.filter(codename__exact='resitel').first() | ||||
| 	resitel_group = Group.objects.filter(name__exact='resitel').first() | ||||
| 	for os in osoby: | ||||
| 		rand = rnd.randint(0, 8) | ||||
| 		if not (rand % 8 == 0): | ||||
| 			if not os.user: | ||||
| 				if x: | ||||
| 					user = User.objects.create_user( | ||||
| 						username='r'+str(x), email=os.email, password='r', | ||||
| 					) | ||||
| 				else: | ||||
| 					user = User.objects.create_user( | ||||
| 						username='r', email=os.email, password='r', | ||||
| 					) | ||||
| 				x += 1 | ||||
| 				os.user = user | ||||
| 				os.save() | ||||
| 				os.user.user_permissions.add(resitel_perm) | ||||
| 				os.user.groups.add(resitel_group) | ||||
| 			resitele.append(Resitel.objects.create( | ||||
| 				osoba=os, skola=rnd.choice(skoly), | ||||
| 				rok_maturity=os.datum_narozeni.year + rnd.randint(18, 21), | ||||
| 				zasilat=rnd.choice(Resitel.ZASILAT_CHOICES)[0], | ||||
| 			)) | ||||
| 	return resitele | ||||
| 
 | ||||
| 
 | ||||
| def gen_prijemci(rnd, osoby, kolik=10): | ||||
| 	logger.info('Generuji příjemce (kolik={})...'.format(kolik)) | ||||
| 	prijemci = [] | ||||
| 	for i in rnd.sample(osoby, kolik): | ||||
| 		prijemci.append(Prijemce.objects.create(osoba=i)) | ||||
| 
 | ||||
| 	global zlinska | ||||
| 	if zlinska is not None: | ||||
| 		zlinska.kontaktni_osoba=rnd.choice(osoby) | ||||
| 		zlinska.save() | ||||
| 
 | ||||
| 	return prijemci | ||||
| 
 | ||||
| 
 | ||||
| def gen_organizatori(rnd, osoby, last_rocnik): | ||||
| 	logger.info('Generuji organizátory...') | ||||
| 	organizatori = [] | ||||
| 
 | ||||
| 
 | ||||
| 	seznam_konicku = ["vařím", "jezdím na kole", "řeším diferenciální rovnice", "koukám z okna", "tancuji", "programuji", "jezdím vlakem", "nedělám nic"] | ||||
| 	seznam_oboru = ["matematiku", "matematiku", "matematiku", "fyziku", "literaturu", "informatiku", "informatiku", "běhání dokolečka"] | ||||
| 
 | ||||
| 	x = 0 | ||||
| 	org_perm = Permission.objects.filter(codename__exact='org').first() | ||||
| 	org_group = Group.objects.filter(name__exact='org').first() | ||||
| 	for os in osoby: | ||||
| 		rand = rnd.randint(0, 8) | ||||
| 		if rand % 8 == 0: | ||||
| 			pusobnost = rnd.randint(1, last_rocnik) | ||||
| 			od = datetime.datetime( | ||||
| 				year=1993 + pusobnost, | ||||
| 				month=rnd.randint(1, 12), | ||||
| 				day=rnd.randint(1, 28), | ||||
| 				tzinfo=datetime.timezone.utc, | ||||
| 			) | ||||
| 			do = datetime.datetime( | ||||
| 				year=od.year + rnd.randint(1, 6), | ||||
| 				month=rnd.randint(1, 12), | ||||
| 				day=rnd.randint(1, 28), | ||||
| 				tzinfo=datetime.timezone.utc, | ||||
| 			) | ||||
| 			# aktualni organizatori jeste nemaji vyplnene organizuje_do | ||||
| 
 | ||||
| 			# popis orga | ||||
| 			konicek1 = rnd.choice(seznam_konicku) | ||||
| 			konicek2 = rnd.choice(seznam_konicku) | ||||
| 			obor = rnd.choice(seznam_oboru) | ||||
| 			popis_orga = "Ve volném čase " + konicek1 + " a také " + konicek2 + ". Studuji " + obor + " a moc mě to baví." | ||||
| 
 | ||||
| 			if do.year > datetime.datetime.now().year: | ||||
| 				do = None | ||||
| 			if not os.user: | ||||
| 				if x: | ||||
| 					user = User.objects.create_user( | ||||
| 						username='o'+str(x), email=os.email, password='o', | ||||
| 					) | ||||
| 				else: | ||||
| 					user = User.objects.create_user( | ||||
| 						username='o', email=os.email, password='o', | ||||
| 					) | ||||
| 				x += 1 | ||||
| 				os.user = user | ||||
| 				os.save() | ||||
| 				os.user.user_permissions.add(org_perm) | ||||
| 				os.user.groups.add(org_group) | ||||
| 				os.user.is_staff = True | ||||
| 				os.user.save() | ||||
| 			organizatori.append(Organizator.objects.create( | ||||
| 				osoba=os, | ||||
| 				organizuje_od=od, organizuje_do=do, | ||||
| 				strucny_popis_organizatora=popis_orga, | ||||
| 			)) | ||||
| 	return organizatori | ||||
|  | @ -1,216 +1,22 @@ | |||
| # FIXME vypreparovat treenode | ||||
| 
 | ||||
| import datetime | ||||
| 
 | ||||
| from django.contrib.auth.models import Permission | ||||
| from django.contrib.auth.models import Group | ||||
| import random | ||||
| import lorem | ||||
| import django.contrib.auth | ||||
| from django.db import transaction | ||||
| import unidecode | ||||
| import logging | ||||
| 
 | ||||
| from korektury.testutils import create_test_pdf | ||||
| from seminar.models import Skola, Resitel, Rocnik, Cislo, Deadline, Problem, Reseni, PrilohaReseni, Nastaveni, Osoba, Organizator, Prijemce, Tema, Uloha, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, Hodnoceni, UlohaZadaniNode, Novinky, TreeNode | ||||
| from seminar.models import Rocnik, Cislo, Deadline, Problem, Tema, Uloha, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, UlohaZadaniNode | ||||
| import seminar.models as m | ||||
| 
 | ||||
| from django.contrib.flatpages.models import FlatPage | ||||
| from django.contrib.sites.models import Site | ||||
| from treenode.treelib import all_children, insert_last_child, all_children_of_type, create_node_after | ||||
| 
 | ||||
| from soustredeni.testutils import gen_soustredeni, gen_konfery | ||||
| 
 | ||||
| 
 | ||||
| User = django.contrib.auth.get_user_model() | ||||
| zlinska = None # tohle bude speciální škola, které později dodáme kontaktní osobu | ||||
| from odevzdavatko.testutils import gen_reseni_ulohy | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| # testuje unikátnost vygenerovaného jména | ||||
| def __unikatni_jmeno(osoby, jmeno, prijmeni): | ||||
| 	for os in osoby: | ||||
| 		if os.jmeno == jmeno and os.prijmeni == prijmeni: | ||||
| 			return 0 | ||||
| 	else: return 1 | ||||
| User = django.contrib.auth.get_user_model() | ||||
| 
 | ||||
| def gen_osoby(rnd, size): | ||||
| 	logger.info('Generuji osoby (size={})...'.format(size)) | ||||
| 
 | ||||
| 	jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel'] | ||||
| 	jmena_f = ['Eva', 'Karolína', 'Zuzana', 'Sylvie', 'Iva', 'Jana', 'Marie', | ||||
| 		'Marta Iva', 'Shu Shan'] | ||||
| 	prijmeni_m = ['Novotný', 'Svoboda', 'Pecha', 'Kořen', 'Holan', 'Uhlíř', 'Chytráček', | ||||
| 			'Pokora', 'Koch', 'Szegedy', 'Rudý', "von Neumann", "d'Este"] | ||||
| 	prijmeni_f = ['Novotná', 'Svobodová', 'Machová', 'Zelená', 'Yu-Xin', 'Mlsná', 'Dubná', | ||||
| 			'Mrkvová', 'Suchá', 'Lovelace', 'Holcová', 'Rui', "Nováčková Tydlitátová"] | ||||
| 	prezdivky = ['Kaki', 'Hurdur', 'Maracuja', 'Bobbo', "", "", "", "", "", | ||||
| 			"", "", 'Riki', 'Sapa', "", '', '---', 'Koko'] | ||||
| 	domain = ['example.com', 'dolujeme.eu', 'mff.cuni.cz', 'strcprstskrzkrk.cz', | ||||
| 			'british.co.uk', 'splachni.to', 'haha.org'] | ||||
| 	seznam_ulic = ['Krátká', 'Vlhká', 'Jungmanova', '17. listopadu', '4. října', 'Roztocká', | ||||
| 			'Forstova', 'Generála Františka Janouška', 'Náměstí Války', | ||||
| 			'Svratecké náměstí', 'Zelená lhota', 'Z Plynu', 'K Jezeru', 'U Kocourkova', | ||||
| 			'Uštěpačná', 'Ostrorepská', 'Zubří'] | ||||
| 	seznam_mest = ['Praha', 'Brno', 'Ostrava', 'Horní Jelení', 'Dolní Zábrdovice', 'Prdelkov', | ||||
| 			'Stará myslivna', 'Kocourkov', 'Šalingrad', 'Medvědí hora', 'Basilej', | ||||
| 			'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza'] | ||||
| 
 | ||||
| 	osoby = [] | ||||
| 	# 30 je náhodná konstanta, size je použité na víc místech a | ||||
| 	# říká, jak velká asi chceme testovací data | ||||
| 	for i in range(30 * size): | ||||
| 		pohlavi_idx = rnd.randint(0,2) # 2 = nebinární | ||||
| 		osloveni = [Osoba.OSLOVENI_MUZSKE, Osoba.OSLOVENI_ZENSKE, Osoba.OSLOVENI_ZADNE][pohlavi_idx] | ||||
| 		jmeno = rnd.choice([jmena_m, jmena_f, jmena_m + jmena_f][pohlavi_idx]) | ||||
| 		prijmeni = rnd.choice([prijmeni_m, prijmeni_f, prijmeni_m + prijmeni_f][pohlavi_idx]) | ||||
| 		if pohlavi_idx == 2: logger.debug(f'Testdata: nebinární osoba: {jmeno} {prijmeni}.') | ||||
| 		pokusy = 0 | ||||
| 		max_pokusy = 120*size | ||||
| 		while (not __unikatni_jmeno and pokusy < max_pokusy): | ||||
| 		# pokud jméno a příjmení není unikátní, zkoušíme generovat nová | ||||
| 		# do daného limitu (abychom se nezacyklili do nekonečna při málo jménech a příjmeních | ||||
| 		# ze kterých se generuje) | ||||
| 			jmeno = rnd.choice([jmena_m, jmena_f, jmena_m + jmena_f][pohlavi_idx]) | ||||
| 			prijmeni = rnd.choice([prijmeni_m, prijmeni_f, prijmeni_m + prijmeni_f][pohlavi_idx]) | ||||
| 			pokusy = pokusy + 1 | ||||
| 		if pokusy >= max_pokusy: | ||||
| 			print("Chyba, na danou velikost testovacích dat příliš málo možných" | ||||
| 				" jmen a příjmení") | ||||
| 			exit() | ||||
| 		prezdivka = rnd.choice(prezdivky) | ||||
| 		email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) | ||||
| 		telefon = "".join([str(rnd.choice([k for k in range(10)])) for i in range(9)]) | ||||
| 		narozeni = datetime.date(rnd.randint(1980, datetime.datetime.now().year),  | ||||
| 				rnd.randint(1, 12), rnd.randint(1, 28)) | ||||
| 		ulic = rnd.choice(seznam_ulic) | ||||
| 		cp = rnd.randint(1, 99) | ||||
| 		ulice = " ".join([ulic, str(cp)]) | ||||
| 		mesto = rnd.choice(seznam_mest) | ||||
| 		psc = "".join([str(rnd.choice([k for k in range(10)])) for i in range(5)]) | ||||
| 
 | ||||
| 		osoby.append(Osoba.objects.create(jmeno = jmeno, prijmeni = prijmeni, | ||||
| 				prezdivka = prezdivka, osloveni = osloveni, email = email, | ||||
| 				telefon = telefon, datum_narozeni = narozeni, ulice = ulice, | ||||
| 				mesto = mesto, psc = psc, | ||||
| 				datum_registrace = datetime.date(rnd.randint(2019, 2029), | ||||
| 					rnd.randint(1, 12), rnd.randint(1, 28)))) | ||||
| 		#TODO pridat foto male a velke. Jak? | ||||
| 				# Pavel tvrdí, že to necháme a přidáme až do adminu | ||||
| 
 | ||||
| 	return osoby | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| def gen_skoly(): #TODO někdy to přepsat, aby jich bylo více | ||||
| 	logger.info('Generuji školy...') | ||||
| 
 | ||||
| 	skoly = [] | ||||
| 	prvnizs = Skola.objects.create(mesto='Praha', stat='CZ', psc='101 00', | ||||
| 		ulice='Krátká 5', nazev='První ZŠ', je_zs=True, je_ss=False) | ||||
| 	skoly.append(prvnizs) | ||||
| 	skoly.append(Skola.objects.create(mesto='Praha', stat='CZ', psc='101 00', | ||||
| 		ulice='Krátká 5', nazev='První SŠ', je_zs=False, je_ss=True)) | ||||
| 	skoly.append(Skola.objects.create(mesto='Praha', stat='CZ', psc='102 00', | ||||
| 		ulice='Dlouhá 5', nazev='Druhá SŠ', je_zs=False, je_ss=True)) | ||||
| 	skoly.append(Skola.objects.create(mesto='Praha', stat='CZ', psc='103 00', | ||||
| 		ulice='Široká 3', nazev='Třetí SŠ a ZŠ', je_zs=True, je_ss=True)) | ||||
| 	skoly.append(Skola.objects.create(mesto='Ostrava', stat='CZ', psc='700 00', | ||||
| 		ulice='Hluboká 42', nazev='Hutní gympl', je_zs=False, je_ss=True)) | ||||
| 	skoly.append(Skola.objects.create(mesto='Humenné', stat='SK', psc='012 34', | ||||
| 		ulice='Pltká 1', nazev='Sredná škuola', je_zs=False, je_ss=True)) | ||||
| 	global zlinska | ||||
| 	zlinska = Skola.objects.create(mesto = 'Zlín', stat='CZ', psc='76001', | ||||
| 		ulice='náměstí T.G. Masaryka 2734-9', | ||||
| 		nazev='Gymnázium a Střední jazyková škola s právem SJZ', | ||||
| 		kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True) | ||||
| 	skoly.append(zlinska) | ||||
| 	return skoly | ||||
| 
 | ||||
| def gen_resitele(rnd, osoby, skoly): | ||||
| 	logger.info('Generuji řešitele...') | ||||
| 
 | ||||
| 	resitele = [] | ||||
| 	x = 0 | ||||
| 	resitel_perm = Permission.objects.filter(codename__exact='resitel').first() | ||||
| 	resitel_group = Group.objects.filter(name__exact='resitel').first() | ||||
| 	for os in osoby: | ||||
| 		rand = rnd.randint(0, 8) | ||||
| 		if not (rand % 8 == 0): | ||||
| 			if not os.user: | ||||
| 				if x: | ||||
| 					user = User.objects.create_user(username='r'+str(x), email=os.email, password='r') | ||||
| 				else: | ||||
| 					user = User.objects.create_user(username='r', email=os.email, password='r') | ||||
| 				x += 1 | ||||
| 				os.user = user | ||||
| 				os.save() | ||||
| 				os.user.user_permissions.add(resitel_perm) | ||||
| 				os.user.groups.add(resitel_group) | ||||
| 			resitele.append(Resitel.objects.create(osoba=os, skola=rnd.choice(skoly), | ||||
| 				rok_maturity=os.datum_narozeni.year + rnd.randint(18, 21), | ||||
| 				zasilat=rnd.choice(Resitel.ZASILAT_CHOICES)[0])) | ||||
| 	return resitele | ||||
| 
 | ||||
| def gen_prijemci(rnd, osoby, kolik=10): | ||||
| 	logger.info('Generuji příjemce (kolik={})...'.format(kolik)) | ||||
| 	prijemci = [] | ||||
| 	for i in rnd.sample(osoby, kolik): | ||||
| 		prijemci.append(Prijemce.objects.create(osoba=i)) | ||||
| 	return prijemci | ||||
| 
 | ||||
| def gen_organizatori(rnd, osoby, last_rocnik): | ||||
| 	logger.info('Generuji organizátory...') | ||||
| 	organizatori = [] | ||||
| 
 | ||||
| 	 | ||||
| 	seznam_konicku = ["vařím", "jezdím na kole", "řeším diferenciální rovnice", "koukám z okna", | ||||
| 			"tancuji", "programuji", "jezdím vlakem", "nedělám nic"] | ||||
| 	seznam_oboru = ["matematiku", "matematiku", "matematiku", "fyziku", "literaturu", | ||||
| 			"informatiku", "informatiku", "běhání dokolečka"] | ||||
| 
 | ||||
| 	x = 0 | ||||
| 	org_perm = Permission.objects.filter(codename__exact='org').first() | ||||
| 	org_group = Group.objects.filter(name__exact='org').first() | ||||
| 	for os in osoby: | ||||
| 		rand = rnd.randint(0, 8) | ||||
| 		if (rand % 8 == 0): | ||||
| 			pusobnost = rnd.randint(1, last_rocnik) | ||||
| 			od = datetime.datetime( | ||||
| 				year=1993 + pusobnost, | ||||
| 				month=rnd.randint(1, 12), | ||||
| 				day=rnd.randint(1, 28), | ||||
| 				tzinfo=datetime.timezone.utc, | ||||
| 				) | ||||
| 			do = datetime.datetime( | ||||
| 				year=od.year + rnd.randint(1, 6), | ||||
| 				month=rnd.randint(1, 12), | ||||
| 				day=rnd.randint(1, 28), | ||||
| 				tzinfo=datetime.timezone.utc, | ||||
| 				) | ||||
| 			#aktualni organizatori jeste nemaji vyplnene organizuje_do | ||||
| 
 | ||||
| 			#popis orga | ||||
| 			konicek1 = rnd.choice(seznam_konicku) | ||||
| 			konicek2 = rnd.choice(seznam_konicku) | ||||
| 			obor = rnd.choice(seznam_oboru) | ||||
| 			popis_orga = "Ve volném čase " + konicek1 + " a také " + konicek2 + ". Studuji " + obor + " a moc mě to baví." | ||||
| 
 | ||||
| 			if do.year > datetime.datetime.now().year: | ||||
| 				do = None | ||||
| 			if not os.user: | ||||
| 				if x: | ||||
| 					user = User.objects.create_user(username='o'+str(x), email=os.email, password='o') | ||||
| 				else: | ||||
| 					user = User.objects.create_user(username='o', email=os.email, password='o') | ||||
| 				x += 1 | ||||
| 				os.user = user | ||||
| 				os.save() | ||||
| 				os.user.user_permissions.add(org_perm) | ||||
| 				os.user.groups.add(org_group) | ||||
| 				os.user.is_staff = True | ||||
| 				os.user.save() | ||||
| 			organizatori.append(Organizator.objects.create(osoba=os, | ||||
| 				organizuje_od=od, organizuje_do=do, strucny_popis_organizatora = popis_orga)) | ||||
| 	return organizatori | ||||
| 
 | ||||
| def gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi_problemu): | ||||
| 	 | ||||
|  | @ -282,42 +88,6 @@ def gen_vzoroveho_reseni_ulohy(rnd, organizatori, uloha, pocet_opravovatelu): | |||
| 	uloha.save() | ||||
| 	return uloha_vzorak | ||||
| 
 | ||||
| def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_cisla, resitele): | ||||
| 	 | ||||
| 	pocet_reseni = rnd.randint(pocet_resitelu//4, pocet_resitelu * 4) | ||||
| 	# generujeme náhodný počet řešení vzhledem k počtu řešitelů čísla | ||||
| 	for _ in range(pocet_reseni): | ||||
| 		#print("Generuji {}-té řešení".format(reseni)) | ||||
| 		if rnd.randint(1, 10) == 1: | ||||
| 		# cca desetina řešení od více řešitelů | ||||
| 			res_vyber = rnd.sample(resitele_cisla,  | ||||
| 				rnd.randint(2, 5)) | ||||
| 		else: | ||||
| 			res_vyber = rnd.sample(resitele_cisla, 1) | ||||
| 		if resitele[0] in res_vyber: # speciální řešitel, který nemá žádné body | ||||
| 			res_vyber.remove(resitele[0]) | ||||
| 
 | ||||
| 		# Vytvoření řešení. | ||||
| 		if uloha.cislo_zadani.zlomovy_deadline_pro_papirove_cislo() is not None: | ||||
| 			# combine, abychom dostali plný čas a ne jen datum | ||||
| 			cas_doruceni = uloha.cislo_zadani.deadline_v_cisle.first().deadline - datetime.timedelta(days=random.randint(0, 40)) - datetime.timedelta(minutes=random.randint(0, 60*24)) | ||||
| 			# astimezone, protože jinak vyhazuje warning o nenastavené TZ | ||||
| 			res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)[0], cas_doruceni=cas_doruceni.astimezone(datetime.timezone.utc)) | ||||
| 		else: | ||||
| 			res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)[0]) | ||||
| 		# Problém a řešitele přiřadíme později, ManyToManyField | ||||
| 		# se nedá vyplnit v create(). | ||||
| 		res.resitele.set(res_vyber) | ||||
| 		res.save() | ||||
| 		 | ||||
| 		# Vytvoření hodnocení. | ||||
| 		hod = Hodnoceni.objects.create( | ||||
| 			body=rnd.randint(0, uloha.max_body), | ||||
| 			cislo_body=cisla[poradi_cisla - 1], | ||||
| 			reseni=res, | ||||
| 			problem=uloha | ||||
| 		) | ||||
| 	return | ||||
| 
 | ||||
| def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size): | ||||
| 	logger.info('Generuji úlohy do čísla (size={})...'.format(size)) | ||||
|  | @ -658,22 +428,6 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori, | |||
| 					u.save() | ||||
| 	return | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
| def otec_syn(otec, syn): | ||||
| 	bratr = otec.first_child | ||||
|  | @ -750,117 +504,3 @@ def gen_clanek(rnd, organizatori, resitele): | |||
| 		text.save() | ||||
| 		create_child(castnode, m.TextNode, text=text) | ||||
| 	logger.info(f"Článek vygenerován (reseni={reseni.id}, treenode={reseninode.id})") | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @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) | ||||
| 
 | ||||
| 	global zlinska | ||||
| 	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(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]) | ||||
|  | @ -1,13 +1,11 @@ | |||
| import datetime | ||||
| import os | ||||
| import random | ||||
| 
 | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.core.management import call_command | ||||
| from django.conf import settings | ||||
| 
 | ||||
| from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni | ||||
| from seminar.testutils import create_test_data | ||||
| from various.testutils import create_test_data | ||||
| import django.contrib.auth | ||||
| User = django.contrib.auth.get_user_model() | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										135
									
								
								various/testutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								various/testutils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,135 @@ | |||
| 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]) | ||||
		Loading…
	
		Reference in a new issue