Migrace: Spojení lesů do hlavního stromu
This commit is contained in:
		
							parent
							
								
									51123d6a12
								
							
						
					
					
						commit
						83014d631e
					
				
					 1 changed files with 59 additions and 8 deletions
				
			
		|  | @ -4,11 +4,17 @@ from __future__ import unicode_literals | |||
| 
 | ||||
| from django.db import migrations | ||||
| 
 | ||||
| from django.db.models import Q | ||||
| 
 | ||||
| def pridej_potomka(rodic, potomek): | ||||
| 	# Daný vrchol bude posledním potomkem rodiče | ||||
| 	uz_ma_deti = False | ||||
| 	posledni = None | ||||
| 
 | ||||
| 	# Přidávaný potomek by neměl mít následovníka -- přidáváme potomka, ne podles. | ||||
| 	if potomek.succ: | ||||
| 		raise ValueError("Potomek má následovníka, to je velmi podezřelé!") | ||||
| 
 | ||||
| 	# Najdeme aktuálně posledního potomka: | ||||
| 	if rodic.first_child: | ||||
| 		uz_ma_deti = True | ||||
|  | @ -35,20 +41,65 @@ def pokacej_les(apps, schema_editor): | |||
| 	# pak články a konfery, pak vzoráky, všechno setříděné podle kódu (FIXME?) | ||||
| 
 | ||||
| 	# Kopírování je častým zdrojem chyb! | ||||
| 	CisloNode = apps.get_model('seminar', 'CisloNode') | ||||
| 	TemaVCisleNode = apps.get_model('seminar', 'TemaVCisleNode') | ||||
| 	KonferaNode = apps.get_model('seminar', 'KonferaNode') | ||||
| 	ClanekNode = apps.get_model('seminar', 'ClanekNode') | ||||
| 	UlohaZadaniNode = apps.get_model('seminar', 'UlohaZadaniNode') | ||||
| 	UlohaVzorakNode = apps.get_model('seminar', 'UlohaVzorakNode') | ||||
| 	Cislo = apps.get_model('seminar', 'Cislo') | ||||
| 	Tema = apps.get_model('seminar', 'Tema') | ||||
| 	Konfera = apps.get_model('seminar', 'Konfera') | ||||
| 	Clanek = apps.get_model('seminar', 'Clanek') | ||||
| 	Uloha = apps.get_model('seminar', 'Uloha') | ||||
| 	Problem = apps.get_model('seminar', 'Problem') | ||||
| 	Pohadka = apps.get_model('seminar', 'Pohadka') | ||||
| 
 | ||||
| 	for c in Cislo.objects.all().reverse(): | ||||
| 		cnode = c.cislonode | ||||
| 
 | ||||
| 		# Témata a seriály: | ||||
| 		relevantni_temata = Tema.objects.filter(Q(cislo_zadani = c) | Q(cislo_reseni = c)).order_by('kod'): | ||||
| 		# Téma dáme do prvního čísla, kde se vyskytne | ||||
| 		for t in relevantni_temata: | ||||
| 			tnode = t.temavcislenode | ||||
| 			if t.cislo_zadani and t.cislo_reseni: | ||||
| 				assert(t.cislo_zadani <= t.cislo_reseni) | ||||
| 				if t.cislo_reseni == c: | ||||
| 					# Už by mělo být přidané do čísla zadání | ||||
| 					continue | ||||
| 			else: | ||||
| 				# Patří sem (buď je to jediné číslo, nebo je to číslo zadání) | ||||
| 				pridej_potomka(cnode, tnode) | ||||
| 
 | ||||
| 		# Úložky (zadání) a pohádky | ||||
| 		for u in Uloha.objects.filter(cislo_zadani = c).order_by('kod'): | ||||
| 			unode = u.ulohazadaninode | ||||
| 			pohadky_pred = Pohadka.objects.filter(uloha_old = u.problem, pred = True) | ||||
| 			pohadky_po = Pohadka.objects.filter(uloha_old = u.problem, pred = False) | ||||
| 			for p in pohadky_pred: | ||||
| 				# FIXME: Chceme pohádku do stromu? | ||||
| 				print('!!!   !!!   !!!   !!!   !!!') | ||||
| 				print('FIXME: Jak uložit pohádku??') | ||||
| 				print('!!!   !!!   !!!   !!!   !!!') | ||||
| 			pridej_potomka(cnode, unode) | ||||
| 			for p in pohadky_po: | ||||
| 				# FIXME: Chceme pohádku do stromu? | ||||
| 				print('!!!   !!!   !!!   !!!   !!!') | ||||
| 				print('FIXME: Jak uložit pohádku??') | ||||
| 				print('!!!   !!!   !!!   !!!   !!!') | ||||
| 
 | ||||
| 		# Články | ||||
| 		for cl in Clanek.objects.filter(cislo = c).order_by('kod'): | ||||
| 			clnode = cl.claneknode | ||||
| 			pridej_potomka(cnode, clnode) | ||||
| 
 | ||||
| 		# Konfery | ||||
| 		for k in Konfera.objects.all(): | ||||
| 			knode = k.konferanode | ||||
| 			if k.reseni and knode.root is None: | ||||
| 				# Takováhle konfera nejspíš neexistuje | ||||
| 				raise NotImplementedError("Konfery neumím zapojit do stromu") | ||||
| 
 | ||||
| 		# Vzoráky | ||||
| 		for u in Uloha.objects.filter(cislo_reseni = c).order_by('kod'): | ||||
| 			unode = u.ulohavzoraknode | ||||
| 			pridej_potomka(cnode, unode) | ||||
| 
 | ||||
| 	#TODO! | ||||
| 	raise NotYetImplemented("Ještě než se smaže Franken-model, je potřeba spojit stromečky správně!") | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky