testutils.py: náhodné úpravy
This commit is contained in:
		
							parent
							
								
									f89e696fe3
								
							
						
					
					
						commit
						42a977b516
					
				
					 1 changed files with 145 additions and 105 deletions
				
			
		|  | @ -219,6 +219,130 @@ def gen_soustredeni(): | |||
| 		Soustredeni_Ucastnici.objects.create(resitel=res, soustredeni=sous) | ||||
| 	sous.save() | ||||
| 
 | ||||
| def gen_rocniky(last_rocnik, size): | ||||
| 	rocniky = [] | ||||
| 	node = None | ||||
| 	for ri in range(min(last_rocnik - size, 1), last_rocnik + 1): | ||||
| 		rocnik = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) | ||||
| 		node2 = RocnikNode.objects.create(rocnik = rocnik, succ = node) | ||||
| 		node = node2 | ||||
| 		rocniky.append(rocnik) | ||||
| 	return rocniky | ||||
| 
 | ||||
| def gen_cisla(rocniky): | ||||
| 	slovnik_rocnik_cisla = {} | ||||
| 	for rocnik in rocniky: | ||||
| 		slovnik_cisel = {} | ||||
| 		cisel = rnd.randint(4, 8) | ||||
| 		node = None | ||||
| 		for ci in range(1, cisel + 1): | ||||
| 			# první číslo vydáváme typicky okolo prázdnin | ||||
| 			# (ci - 1)*2 zaručuje první číslo v červnu a všechna | ||||
| 			# další po dvou měsících (což je rozumná aproximace) | ||||
| 			mesic_vydani = (ci - 1)*2 + 6 | ||||
| 			# celociselné dělení mi řekne, jestli to je první nebo druhý rok ročníku | ||||
| 			vydano = datetime.date(r.prvni_rok + mesic_vydani // 12, | ||||
| 				mesic_vydani,  | ||||
| 				rnd.randint(1, 28)) | ||||
| 			deadline = datetime.date(r.prvni_rok + (mesic_vydani + 2) // 12,  | ||||
| 				mesic_vydani + 2,  | ||||
| 				rnd.randint(1, 28))  | ||||
| 			 | ||||
| 			# posledni 2 cisla v rocniku nemaji deadline | ||||
| 			if (ci + 2 > cisel): | ||||
| 				deadline = None | ||||
| 			 | ||||
| 			cislo = Cislo.objects.create( | ||||
| 				rocnik = rocnik, | ||||
| 				cislo = str(ci),  | ||||
| 				datum_vydani=vydano, | ||||
| 				datum_deadline=deadline,  | ||||
| 				verejne_db=True | ||||
| 			) | ||||
| 			node2 = CisloNode.objects.create(cislo = cislo, succ = node) | ||||
| 			node = node2 | ||||
| 			 | ||||
| 			slovnik_cisel[ci] = cislo | ||||
| 		slovnik_rocnik_cisla[rocnik] = slovnik_cisel | ||||
| 	return slovnik_rocnik_cisla | ||||
| 
 | ||||
| def gen_temata(rocniky, slovnik_rocnik_cisla): | ||||
| 	slovnik_rocnik_temata = {} | ||||
| 	for rocnik in rocniky: | ||||
| 		temata = {} | ||||
| 		for cislo in slovnik_r[rocnik] | ||||
| 			if cislo <= 3: | ||||
| 				jake = ["Hravé", "Fyzikální", "Nejlepší", "Totálně masakrální", | ||||
| 					"Šokující", "Magnetické", "Modré", "Překvapivé",  | ||||
| 					"Plasmatické", "Novoroční"] | ||||
| 				co = ["téma", "záření", "stavení", "jiskření", "jelito", | ||||
| 					"drama", "kuře", "moře", "klání", "proudění", "čekání"] | ||||
| 				poc_oboru = rnd.randint(1, 2) | ||||
| 				poc_op = rnd.randint(1, 3) | ||||
| 				t = Tema.objects.create( | ||||
| 					# atributy třídy Problem | ||||
| 					nazev=" ".join([rnd.choice(jake), rnd.choice(co)]), | ||||
| 					stav=Problem.STAV_ZADANY, | ||||
| 					zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru), | ||||
| 					autor=rnd.choice(organizatori),  | ||||
| 					garant=rnd.choice(organizatori),  | ||||
| 					# FIXME: téma má kód podle čísla, až jich bude | ||||
| 					# více, tak udělat kód podle pořadí vygenerování | ||||
| 					kod=str(cislo), | ||||
| 					# atributy třídy Téma | ||||
| 					tema_typ=rnd.choice(Tema.TEMA_CHOICES), | ||||
| 					rocnik=rocnik) | ||||
| 
 | ||||
| 				t.opravovatele=rnd.sample(organizatori, poc_op) | ||||
| 				t.save() | ||||
| 				temata[cislo] = t | ||||
| 		slovnik_rocnik_temata[tema] = temata | ||||
| 
 | ||||
| def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): | ||||
| 	for rocnik in rocniky: | ||||
| 		slovnik_cisel = slovnik_rocnik_cisla[rocnik] | ||||
| 		cisel = len(slovnik_cisel) | ||||
| 		slovnik_temat = slovnik_rocnik_temata[rocnik] | ||||
| 			for tema in slovnik_temat: | ||||
| 				for i in range(tema. | ||||
| 					if #TODO | ||||
| 						poc_op = rnd.randint(1, 4) | ||||
| 						poc_oboru = rnd.randint(1, 2) | ||||
| 						p = Uloha.objects.create( | ||||
| 							nazev=": ".join([tema.nazev,  | ||||
| 								"úloha {}.".format(i-ci+1)]), | ||||
| 							nadproblem=tema, | ||||
| 							stav=Problem.STAV_ZADANY, | ||||
| 							zamereni=t.zamereni, | ||||
| 							autor=t.autor,  | ||||
| 							garant=t.garant,  | ||||
| 							opravovatele=rnd.sample(organizatori, poc_op),   | ||||
| 							kod=str(i),  | ||||
| 							cislo_zadani=slovnik_cisel[ci],  | ||||
| 							cislo_reseni=slovnik_cisel[ci+2],  | ||||
| 							cislo_deadline=slovnik_cisel[ci+2],  | ||||
| 							max_body = rnd.randint(1, 8)) | ||||
| 						p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),  | ||||
| 							rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) | ||||
| 						 | ||||
| 						#Tomův pokus o opravu bugu: | ||||
| 						text_vzoraku = Text.objects.create( | ||||
| 							na_web = rnd.choice(reseni), | ||||
| 							do_cisla = rnd.choice(reseni) | ||||
| 						) | ||||
| 						vzorak = TextNode.objects.create(text = text_vzoraku) | ||||
| 						uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) | ||||
| 						p.UlohaVzorakNode = uloha_vzorak | ||||
| 						 | ||||
| 						#p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])  | ||||
| 						p.save() | ||||
| 				 | ||||
| 				 | ||||
| 				# vytvor text | ||||
| 				# vytvor TemaVCisleNode | ||||
| 				if (rnd.randint(1, 3) % 3 == 0): | ||||
| 					# vytvor mezicislo Node | ||||
| 					pass | ||||
| 
 | ||||
| @transaction.atomic | ||||
| def create_test_data(size = 6, rnd = None): | ||||
|  | @ -252,7 +376,7 @@ def create_test_data(size = 6, rnd = None): | |||
| 	# osoby | ||||
| 	osoby = gen_osoby(rnd, size) | ||||
| 
 | ||||
| 	# resitele a organizatori	 | ||||
| 	# resitele a organizatori | ||||
| 	last_rocnik = 25 | ||||
| 	resitele = gen_resitele(rnd, osoby, skoly) | ||||
| 	organizatori = gen_organizatori(rnd, osoby, last_rocnik, users) | ||||
|  | @ -265,110 +389,26 @@ def create_test_data(size = 6, rnd = None): | |||
| 	zlinska.save() | ||||
| 
 | ||||
| 	# rocniky | ||||
| 	for ri in range(min(last_rocnik - size, 1), last_rocnik + 1): | ||||
| 		r = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) | ||||
| 
 | ||||
| 		# cisla | ||||
| 		cisel = rnd.randint(4, 8) | ||||
| 		slovnik_cisel = {} | ||||
| 		for ci in range(1, cisel + 1): | ||||
| 			# první číslo vydáváme typicky okolo prázdnin | ||||
| 			# (ci - 1)*2 zaručuje první číslo v červnu a všechna | ||||
| 			# další po dvou měsících (což je rozumná aproximace) | ||||
| 			mesic_vydani = (ci - 1)*2 + 6 | ||||
| 			# celociselné dělení mi řekne, jestli to je první nebo druhý rok ročníku | ||||
| 			vydano = datetime.date(r.prvni_rok + mesic_vydani // 12, | ||||
| 				mesic_vydani,  | ||||
| 				rnd.randint(1, 28)) | ||||
| 			deadline = datetime.date(r.prvni_rok + (mesic_vydani + 2) // 12,  | ||||
| 				mesic_vydani + 2,  | ||||
| 				rnd.randint(1, 28))  | ||||
| 			 | ||||
| 			# posledni 2 cisla v rocniku nemaji deadline | ||||
| 			if (ci + 2 > cisel): | ||||
| 				deadline = None | ||||
| 			 | ||||
| 			cislo = Cislo.objects.create( | ||||
| 				rocnik = r, | ||||
| 				cislo = str(ci),  | ||||
| 				datum_vydani=vydano, | ||||
| 				datum_deadline=deadline,  | ||||
| 				verejne_db=True | ||||
| 			) | ||||
| 			slovnik_cisel[ci] = cislo | ||||
| 
 | ||||
| 			# generovani uloh | ||||
| 			gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size) | ||||
| 			 | ||||
| 			# generování témat, zatím v prvních třech číslech po jednom | ||||
| 			# FIXME: více témat | ||||
| 			if ci <= 3: | ||||
| 				jake = ["Hravé", "Fyzikální", "Nejlepší", "Totálně masakrální", | ||||
| 					"Šokující", "Magnetické", "Modré", "Překvapivé",  | ||||
| 					"Plasmatické", "Novoroční"] | ||||
| 				co = ["téma", "záření", "stavení", "jiskření", "jelito", | ||||
| 					"drama", "kuře", "moře", "klání", "proudění", "čekání"] | ||||
| 				poc_oboru = rnd.randint(1, 2) | ||||
| 				poc_op = rnd.randint(1, 3) | ||||
| 				t = Tema.objects.create( | ||||
| 					# atributy třídy Problem | ||||
| 					nazev=" ".join([rnd.choice(jake), rnd.choice(co)]), | ||||
| 					stav=Problem.STAV_ZADANY, | ||||
| 					zamereni=rnd.sample(["M", "F", "I", "O", "B"], poc_oboru), | ||||
| 					autor=rnd.choice(organizatori),  | ||||
| 					garant=rnd.choice(organizatori),  | ||||
| 					# FIXME: téma má kód podle čísla, až jich bude | ||||
| 					# více, tak udělat kód podle pořadí vygenerování | ||||
| 					kod=str(ci), | ||||
|  					# atributy třídy Téma | ||||
| 					tema_typ=rnd.choice(Tema.TEMA_CHOICES), | ||||
| 					rocnik=r) | ||||
| 
 | ||||
| 				t.opravovatele=rnd.sample(organizatori, poc_op) | ||||
| 				t.save() | ||||
| 			 | ||||
| 				# FIXME: nefunguje, protože další čísla v tuhle chvíli ještě  | ||||
| 				# 	nejsou nagenerovaná	 | ||||
| 				# nagenerovat k tématu úlohy a Nody pro vsechna cisla | ||||
| 				for i in range(ci, cisel-2): | ||||
| 					# vytvoř úlohu pro každé ze zbývajících čísel | ||||
| 					poc_op = rnd.randint(1, 4) | ||||
| 					poc_oboru = rnd.randint(1, 2) | ||||
| 					p = Uloha.objects.create( | ||||
| 						nazev=": ".join([t.nazev,  | ||||
| 							"úloha {}.".format(i-ci+1)]), | ||||
| 						nadproblem=t, | ||||
| 						stav=Problem.STAV_ZADANY, | ||||
| 						zamereni=t.zamereni, | ||||
| 						autor=t.autor,  | ||||
| 						garant=t.garant,  | ||||
| 						opravovatele=rnd.sample(organizatori, poc_op),   | ||||
| 						kod=str(i),  | ||||
| 						cislo_zadani=slovnik_cisel[ci],  | ||||
| 						cislo_reseni=slovnik_cisel[ci+2],  | ||||
| 						cislo_deadline=slovnik_cisel[ci+2],  | ||||
| 						max_body = rnd.randint(1, 8)) | ||||
| 					p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),  | ||||
| 						rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) | ||||
| 					 | ||||
| 					#Tomův pokus o opravu bugu: | ||||
| 					text_vzoraku = Text.objects.create( | ||||
| 						na_web = rnd.choice(reseni), | ||||
| 						do_cisla = rnd.choice(reseni) | ||||
| 					) | ||||
| 					vzorak = TextNode.objects.create(text = text_vzoraku) | ||||
| 					uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) | ||||
| 					p.UlohaVzorakNode = uloha_vzorak | ||||
| 					 | ||||
| 					#p.vzorak = " - ".join([p.zadani, rnd.choice(reseni)])  | ||||
| 					p.save() | ||||
| 					 | ||||
| 					 | ||||
| 					# vytvor text | ||||
| 					# vytvor TemaVCisleNode | ||||
| 					if (rnd.randint(1, 3) % 3 == 0): | ||||
| 						# vytvor mezicislo Node | ||||
| 						pass | ||||
| 	rocniky = gen_rocniky(last_rocnik, size) | ||||
| 	 | ||||
| 	# cisla | ||||
| 	slovnik_rocnik_cisla = gen_cisla(rocniky)	 | ||||
| 	 | ||||
| 	# generování obyčejných úloh do čísel | ||||
| 	for rocnik in rocniky: | ||||
| 		slovnik_cisel = slovnik_rocnik_cisla[rocnik] | ||||
| 		for cislo in slovnik_cisel: | ||||
| 			gen_ulohy_do_cisla(rnd, cislo, organizatori, resitele, slovnik_cisel, size) | ||||
| 	 | ||||
| 	# generování témat, zatím v prvních třech číslech po jednom | ||||
| 	# FIXME: více témat | ||||
| 	slovnik_rocnik_temata = gen_temata(rocniky, slovnik_rocnik_cisla) | ||||
| 	 | ||||
| 	# generování úloh k tématům ve všech číslech | ||||
| 	gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata) | ||||
| 	 | ||||
| 		# nagenerovat k tématu úlohy a Nody pro vsechna cisla | ||||
| 		 | ||||
| 					 | ||||
| 				 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Tomáš Domes
						Tomáš Domes