testutils.py: opraveny všechny syntaktické chyby
This commit is contained in:
		
							parent
							
								
									cd0625ef58
								
							
						
					
					
						commit
						6d3acccae8
					
				
					 1 changed files with 155 additions and 115 deletions
				
			
		|  | @ -7,7 +7,7 @@ import django.contrib.auth | |||
| from django.db import transaction | ||||
| import unidecode | ||||
| 
 | ||||
| from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, KonferaNode, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, Hodnoceni | ||||
| from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, KonferaNode, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, Hodnoceni, UlohaZadaniNode | ||||
| 
 | ||||
| from django.contrib.flatpages.models import FlatPage | ||||
| from django.contrib.sites.models import Site | ||||
|  | @ -122,7 +122,7 @@ def gen_organizatori(rnd, osoby, last_rocnik, users): | |||
| 					organizuje_od=od, organizuje_do=do)) | ||||
| 	return organizatori | ||||
| 
 | ||||
| def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): | ||||
| def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size): | ||||
| 	# ulohy resene v cisle | ||||
| 	jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá",  | ||||
| 		"Zákeřná", "Fyzikální"] | ||||
|  | @ -141,63 +141,83 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): | |||
| 		"netriviální aplikace diferenciálních rovnic", "zadání je vnitřně" | ||||
| 		"sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli," | ||||
| 		"tak jste fakt hloupí"] | ||||
| 				 | ||||
| 	if ci >= 3: #TODO nagenerovat i nody!!! | ||||
| 		for pi in range(1, ((size + 1) // 2) + 1): | ||||
| 			poc_op = rnd.randint(1, 4) # počet opravovatelů | ||||
| 			poc_oboru = rnd.randint(1, 2) | ||||
| 			p = Uloha.objects.create( | ||||
| 				# atributy třídy Problem | ||||
| 				nazev=" ".join([rnd.choice(jaka), 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),  | ||||
| 				kod=str(pi),  | ||||
| 				# atributy třídy Uloha | ||||
| 				cislo_zadani=slovnik_cisel[ci-2],  | ||||
| 				cislo_reseni=slovnik_cisel[ci],  | ||||
| 				cislo_deadline=slovnik_cisel[ci],  | ||||
| 				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 | ||||
| 			 | ||||
| 	k = 0 | ||||
| 	for rocnik in rocniky: | ||||
| 		k+=1 | ||||
| 		cisla = rocnik_cisla[k-1] | ||||
| 		for ci in range(3, len(cisla)+1): | ||||
| 			for pi in range(1, ((size + 1) // 2) + 1): | ||||
| 
 | ||||
| 			p.opravovatele.set(rnd.sample(organizatori,poc_op)) | ||||
| 			p.save() | ||||
| 
 | ||||
| 			# reseni ulohy | ||||
| 			poc_reseni = rnd.randint(size // 2, size * 2) | ||||
| 			#poc_resitel = rnd.randint(1, 3) <- k čemu je himbajs tahle proměnná?  | ||||
| 			# vybereme nahodny vzorek resitelu o delce poctu reseni  | ||||
| 			# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni) | ||||
| 			for ri in range(poc_reseni): | ||||
| 				res_vyber = rnd.sample(resitele, rnd.randint(1, 5)) | ||||
| 				# problem a resitele přiřadíme později, ManyToManyField | ||||
| 				# se nedá vyplnit v create() | ||||
| 				res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)) | ||||
| 				res.save() | ||||
| 				hod = Hodnoceni.objects.create( | ||||
| 					body=rnd.randint(0, p.max_body), | ||||
| 					cislo_body=slovnik_cisel[ci],  | ||||
| 					reseni=res, | ||||
| 					problem=p | ||||
| 				poc_op = rnd.randint(1, 4) # počet opravovatelů | ||||
| 				poc_oboru = rnd.randint(1, 2) | ||||
| 				p = Uloha.objects.create( | ||||
| 					# atributy třídy Problem | ||||
| 					nazev=" ".join([rnd.choice(jaka), 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),  | ||||
| 					kod=str(pi),  | ||||
| 					# atributy třídy Uloha | ||||
| 					cislo_zadani=cisla[ci-2-1],  | ||||
| 					cislo_reseni=cisla[ci-1],  | ||||
| 					cislo_deadline=cisla[ci-1],  | ||||
| 					max_body = rnd.randint(1, 8) | ||||
| 				) | ||||
| 
 | ||||
| 				text_zadani = Text.objects.create( | ||||
| 					na_web = " ".join( | ||||
| 					[rnd.choice(sloveso),  | ||||
| 					rnd.choice(koho),  | ||||
| 					rnd.choice(ceho),  | ||||
| 					rnd.choice(jmeno),  | ||||
| 					rnd.choice(kde)] | ||||
| 					), | ||||
| 					do_cisla = " ".join( | ||||
| 					[rnd.choice(sloveso),  | ||||
| 					rnd.choice(koho),  | ||||
| 					rnd.choice(ceho),  | ||||
| 					rnd.choice(jmeno),  | ||||
| 					rnd.choice(kde)] | ||||
| 					) | ||||
| 				) | ||||
| 				zad = TextNode.objects.create(text = text_zadani) | ||||
| 				uloha_zadani = UlohaZadaniNode.objects.create(uloha=p, first_child = zad) | ||||
| 				p.ulohazadaninode = uloha_zadani | ||||
| 				otec_syn(cisla[ci-2-1].cislonode, uloha_zadani) | ||||
| 				 | ||||
| 				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 | ||||
| 				otec_syn(cisla[ci-1].cislonode, uloha_vzorak) | ||||
| 
 | ||||
| 				p.opravovatele.set(rnd.sample(organizatori,poc_op)) | ||||
| 				p.save() | ||||
| 
 | ||||
| 				# reseni ulohy | ||||
| 				poc_reseni = rnd.randint(size // 2, size * 2) | ||||
| 				#poc_resitel = rnd.randint(1, 3) <- k čemu je himbajs tahle proměnná?  | ||||
| 				# vybereme nahodny vzorek resitelu o delce poctu reseni  | ||||
| 				# (nebo skoro vsechny resitele, pokud jich je mene nez pocet reseni) | ||||
| 				for ri in range(poc_reseni): | ||||
| 					res_vyber = rnd.sample(resitele, rnd.randint(1, 5)) | ||||
| 					# problem a resitele přiřadíme později, ManyToManyField | ||||
| 					# se nedá vyplnit v create() | ||||
| 					res = Reseni.objects.create(forma=rnd.choice(Reseni.FORMA_CHOICES)) | ||||
| 					#res.save() <- asi smazat | ||||
| 					res.resitele.set(res_vyber) | ||||
| 					res.save() | ||||
| 					hod = Hodnoceni.objects.create( | ||||
| 						body=rnd.randint(0, p.max_body), | ||||
| 						cislo_body=cisla[ci-1], | ||||
| 						reseni=res, | ||||
| 						problem=p | ||||
| 					) | ||||
| 						 | ||||
| 	return | ||||
| 
 | ||||
| def gen_soustredeni(rnd, resitele, organizatori): | ||||
|  | @ -251,10 +271,10 @@ def gen_konfery(rnd, reseni, organizatori, ucastnici, soustredeni): | |||
| 	return konfery | ||||
| 
 | ||||
| def gen_cisla(rnd, rocniky): | ||||
| 	slovnik_rocnik_cisla = {} | ||||
| 	rocnik_cisla = [] | ||||
| 	for rocnik in rocniky: | ||||
| 		otec = True | ||||
| 		slovnik_cisel = {} | ||||
| 		cisla = [] | ||||
| 		cisel = rnd.randint(4, 8) | ||||
| 		node = None | ||||
| 		for ci in range(1, cisel + 1): | ||||
|  | @ -289,11 +309,11 @@ def gen_cisla(rnd, rocniky): | |||
| 				rocnik.rocniknode.first_child = node | ||||
| 				rocnik.save() | ||||
| 			 | ||||
| 			slovnik_cisel[ci] = cislo | ||||
| 		slovnik_rocnik_cisla[rocnik] = slovnik_cisel | ||||
| 	return slovnik_rocnik_cisla | ||||
| 			cisla.append(cislo) | ||||
| 		rocnik_cisla.append(cisla) | ||||
| 	return rocnik_cisla | ||||
| 
 | ||||
| def gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori): | ||||
| def gen_temata(rnd, rocniky, rocnik_cisla, organizatori): | ||||
| 	jake = ["Hravé", "Fyzikální", "Nejlepší", "Totálně masakrální", | ||||
| 					"Šokující", "Magnetické", "Modré", "Překvapivé",  | ||||
| 					"Plasmatické", "Novoroční"] | ||||
|  | @ -302,40 +322,41 @@ def gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori): | |||
| 	poc_oboru = rnd.randint(1, 2) | ||||
| 	poc_op = rnd.randint(1, 3)		 | ||||
| 
 | ||||
| 	slovnik_rocnik_temata = {} | ||||
| 	rocnik_temata = [] | ||||
| 	k = 0 | ||||
| 	for rocnik in rocniky: | ||||
| 		n = 1 | ||||
| 		temata = {} | ||||
| 		slovnik_cisel = slovnik_rocnik_cisla[rocnik] | ||||
| 		for ci in slovnik_cisel: | ||||
| 			if ci <= 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),  | ||||
| 					kod=str(n), | ||||
| 					# atributy třídy Téma | ||||
| 					tema_typ=rnd.choice(Tema.TEMA_CHOICES), | ||||
| 					rocnik=rocnik | ||||
| 				) | ||||
| 				n+=1 | ||||
| 				konec_tematu = min(rnd.randint(ci, 7), len(slovnik_cisel)) | ||||
| 				for i in range(ci, konec_tematu+1): | ||||
| 					node = TemaVCisleNode.objects.create(tema = t) | ||||
| 					otec = slovnik_cisel[i].cislonode | ||||
| 					otec_syn(otec, node) | ||||
| 		k+=1 | ||||
| 		n = 0 | ||||
| 		temata = [] | ||||
| 		cisla = rocnik_cisla[k-1] | ||||
| 		for ci in range(1, 3): | ||||
| 			n+=1 | ||||
| 			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),  | ||||
| 				kod=str(n), | ||||
| 				# atributy třídy Téma | ||||
| 				tema_typ=rnd.choice(Tema.TEMA_CHOICES), | ||||
| 				rocnik=rocnik | ||||
| 			) | ||||
| 			konec_tematu = min(rnd.randint(ci, 7), len(cisla)) | ||||
| 			for i in range(ci, konec_tematu+1): | ||||
| 				node = TemaVCisleNode.objects.create(tema = t) | ||||
| 				otec = cisla[i-1].cislonode | ||||
| 				otec_syn(otec, node) | ||||
| 
 | ||||
| 				t.opravovatele.set(rnd.sample(organizatori, poc_op)) | ||||
| 				t.save() | ||||
| 				temata[n] = (ci, konec_tematu, t) | ||||
| 		slovnik_rocnik_temata[rocnik] = temata | ||||
| 	return slovnik_rocnik_temata | ||||
| 			t.opravovatele.set(rnd.sample(organizatori, poc_op)) | ||||
| 			t.save() | ||||
| 			temata.append((ci, konec_tematu, t)) | ||||
| 		rocnik_temata.append(temata) | ||||
| 	return rocnik_temata | ||||
| 
 | ||||
| 
 | ||||
| def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): #Tahle funkce je nedodělaná | ||||
| def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori): | ||||
| 	# ulohy resene v cisle | ||||
| 	jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá",  | ||||
| 		"Zákeřná", "Fyzikální"] | ||||
|  | @ -354,19 +375,23 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): # | |||
| 		"netriviální aplikace diferenciálních rovnic", "zadání je vnitřně" | ||||
| 		"sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli," | ||||
| 		"tak jste fakt hloupí"] | ||||
| 	k = 0 | ||||
| 	for rocnik in rocniky: | ||||
| 		slovnik_cisel = slovnik_rocnik_cisla[rocnik] | ||||
| 		slovnik_temat = slovnik_rocnik_temata[rocnik] | ||||
| 		for ci in list(slovnik_cisel)[:-2]: | ||||
| 			cislo = slovnik_cisel[ci]	 | ||||
| 		k+=1 | ||||
| 		cisla = rocnik_cisla[k-1] | ||||
| 		temata = rocnik_temata[k-1] | ||||
| 		for ci in range(len(cisla)): | ||||
| 			cislo = cisla[ci-1]	 | ||||
| 			mozna_tema_vcn = cislo.cislonode.first_child | ||||
| 			while mozna_tema_vcn != None: | ||||
| 				if type(mozna_tema_vcn) != TemaVCisleNode: | ||||
| 					mozna_tema_vcn = mozna_tema_vcn.succ | ||||
| 					continue | ||||
| 				else: | ||||
| 					tema = mozna_tema_vcn.tema | ||||
| 					 | ||||
| 				if not slovnik_temat[int(tema.kod)][1] >= ci+2: # Dnes, za přítomnosti dvou svědků Tomáš Domes slíbil, že tento slovník, ve kterém používá jako klíče přirozená čísla, přepíše na normální list. Budiž. Zde jsem také skončil 21. 6. léta Páně 2019 s první vlnou debugování. Bože žehnej těm, kteří toto debugovací břímě převezmou. | ||||
| 				if not temata[int(tema.kod)-1][1] >= ci+2: | ||||
| 					mozna_tema_vcn = mozna_tema_vcn.succ | ||||
| 					continue | ||||
| 					 | ||||
| 				for i in range(1, rnd.randint(1, 4)): | ||||
|  | @ -380,18 +405,35 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): # | |||
| 						zamereni=tema.zamereni, | ||||
| 						autor=tema.autor,  | ||||
| 						garant=tema.garant,  | ||||
| 						opravovatele=rnd.sample(organizatori, poc_op),   | ||||
| 						kod=str(i),  | ||||
| 						cislo_zadani=cislo,  | ||||
| 						cislo_reseni=slovnik_cisel[ci+2],  | ||||
| 						cislo_deadline=slovnik_cisel[ci+2],  | ||||
| 						cislo_reseni=cisla[ci+2-1],  | ||||
| 						cislo_deadline=cisla[ci+2-1],  | ||||
| 						max_body = rnd.randint(1, 8) | ||||
| 					) | ||||
| 					p.zadani = " ".join([rnd.choice(sloveso), rnd.choice(koho),  | ||||
| 						rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)]) | ||||
| 					uloha_zadani = UlohaZadaniNode.objects.create(uloha=p) | ||||
| 					p.UlohaZadaniNode = uloha_zadani | ||||
| 					otec_syn(mozna_tema_vcn, uloha_zadani) | ||||
| 					 | ||||
| 					p.opravovatele.set(rnd.sample(organizatori, poc_op))   | ||||
| 					 | ||||
| 					text_zadani = Text.objects.create( | ||||
| 						na_web = " ".join( | ||||
| 						[rnd.choice(sloveso),  | ||||
| 						rnd.choice(koho),  | ||||
| 						rnd.choice(ceho),  | ||||
| 						rnd.choice(jmeno),  | ||||
| 						rnd.choice(kde)] | ||||
| 						), | ||||
| 						do_cisla = " ".join( | ||||
| 						[rnd.choice(sloveso),  | ||||
| 						rnd.choice(koho),  | ||||
| 						rnd.choice(ceho),  | ||||
| 						rnd.choice(jmeno),  | ||||
| 						rnd.choice(kde)] | ||||
| 						) | ||||
| 					) | ||||
| 					zad = TextNode.objects.create(text = text_zadani) | ||||
| 					uloha_zadani = UlohaZadaniNode.objects.create(uloha=p, first_child = zad) | ||||
| 					p.ulohazadaninode = uloha_zadani | ||||
| 					otec_syn(mozna_tema_vcn, uloha_zadani) # TODO dělá se podproblém takto??? TODO | ||||
| 					 | ||||
| 					text_vzoraku = Text.objects.create( | ||||
| 						na_web = rnd.choice(reseni), | ||||
|  | @ -400,8 +442,7 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): # | |||
| 					vzorak = TextNode.objects.create(text = text_vzoraku) | ||||
| 					uloha_vzorak = UlohaVzorakNode.objects.create(uloha=p, first_child = vzorak) | ||||
| 					p.UlohaVzorakNode = uloha_vzorak | ||||
| 					#res_tema_vcn =  | ||||
| 					res_tema_vcn = slovnik_cisel[ci+2].CisloNode.first_child | ||||
| 					res_tema_vcn = cisla[ci+2-1].cislonode.first_child | ||||
| 					while res_tema_vcn.tema != tema: | ||||
| 						res_tema_vcn = res_tema_vcn.succ | ||||
| 					otec_syn(res_tema_vcn, uloha_vzorak) | ||||
|  | @ -409,6 +450,7 @@ def gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata): # | |||
| 					p.save() | ||||
| 			 | ||||
| 				mozna_tema_vcn = mozna_tema_vcn.succ | ||||
| 	return | ||||
| 				     | ||||
| def otec_syn(otec, syn): | ||||
| 	bratr = otec.first_child | ||||
|  | @ -428,6 +470,7 @@ def create_test_data(size = 6, rnd = None): | |||
| 	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() | ||||
| 
 | ||||
|  | @ -466,20 +509,17 @@ def create_test_data(size = 6, rnd = None): | |||
| 	rocniky = gen_rocniky(last_rocnik, size) | ||||
| 	 | ||||
| 	# cisla | ||||
| 	slovnik_rocnik_cisla = gen_cisla(rnd, rocniky)	 | ||||
| 	rocnik_cisla = gen_cisla(rnd, rocniky)	 | ||||
| 	 | ||||
| 	# generování obyčejných úloh do čísel | ||||
| 	for rocnik in rocniky: | ||||
| 		slovnik_cisel = slovnik_rocnik_cisla[rocnik] | ||||
| 		for ci in slovnik_cisel: | ||||
| 			gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size) | ||||
| 	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 | ||||
| 	slovnik_rocnik_temata = gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori) | ||||
| 	rocnik_temata = gen_temata(rnd, rocniky, rocnik_cisla, organizatori) | ||||
| 	 | ||||
| 	# generování úloh k tématům ve všech číslech | ||||
| 	gen_ulohy_k_tematum(rocniky, slovnik_rocnik_cisla, slovnik_rocnik_temata) | ||||
| 	gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) | ||||
| 
 | ||||
| 			# FIXME: misto typu ruzne typy objektu a vnoreni do sebe | ||||
| 			# TODO: vytvorit temata s ruznymi vlakny | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Tomáš Domes
						Tomáš Domes