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,9 +141,13 @@ 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!!! | ||||
| 	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): | ||||
| 
 | ||||
| 				poc_op = rnd.randint(1, 4) # počet opravovatelů | ||||
| 				poc_oboru = rnd.randint(1, 2) | ||||
| 				p = Uloha.objects.create( | ||||
|  | @ -155,20 +159,33 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): | |||
| 					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],  | ||||
| 					cislo_zadani=cisla[ci-2-1],  | ||||
| 					cislo_reseni=cisla[ci-1],  | ||||
| 					cislo_deadline=cisla[ci-1],  | ||||
| 					max_body = rnd.randint(1, 8) | ||||
| 				) | ||||
| 			p.zadani = " ".join( | ||||
| 
 | ||||
| 				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) | ||||
| 				 | ||||
| 			#Tomův pokus o opravu bugu: | ||||
| 				text_vzoraku = Text.objects.create( | ||||
| 					na_web = rnd.choice(reseni), | ||||
| 					do_cisla = rnd.choice(reseni) | ||||
|  | @ -176,7 +193,7 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): | |||
| 				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() | ||||
|  | @ -191,13 +208,16 @@ def gen_ulohy_do_cisla(rnd, ci, organizatori, resitele, slovnik_cisel, size): | |||
| 					# 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=slovnik_cisel[ci],  | ||||
| 						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,13 +322,15 @@ 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: | ||||
| 		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)]), | ||||
|  | @ -321,21 +343,20 @@ def gen_temata(rnd, rocniky, slovnik_rocnik_cisla, organizatori): | |||
| 				tema_typ=rnd.choice(Tema.TEMA_CHOICES), | ||||
| 				rocnik=rocnik | ||||
| 			) | ||||
| 				n+=1 | ||||
| 				konec_tematu = min(rnd.randint(ci, 7), len(slovnik_cisel)) | ||||
| 			konec_tematu = min(rnd.randint(ci, 7), len(cisla)) | ||||
| 			for i in range(ci, konec_tematu+1): | ||||
| 				node = TemaVCisleNode.objects.create(tema = t) | ||||
| 					otec = slovnik_cisel[i].cislonode | ||||
| 				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 | ||||
| 			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