Merge branch 'data_migrations' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into data_migrations
This commit is contained in:
		
						commit
						113a59f4fe
					
				
					 3 changed files with 88 additions and 3 deletions
				
			
		|  | @ -28,6 +28,7 @@ from reversion import revisions as reversion | ||||||
| from seminar.utils import roman, FirstTagParser # Pro získání úryvku z TextNode | from seminar.utils import roman, FirstTagParser # Pro získání úryvku z TextNode | ||||||
| 
 | 
 | ||||||
| from unidecode import unidecode # Používám pro získání ID odkazu (ještě je to někde po někom zakomentované) | from unidecode import unidecode # Používám pro získání ID odkazu (ještě je to někde po někom zakomentované) | ||||||
|  | from seminar.treelib import safe_pred | ||||||
| 
 | 
 | ||||||
| from polymorphic.models import PolymorphicModel | from polymorphic.models import PolymorphicModel | ||||||
| 
 | 
 | ||||||
|  | @ -1343,7 +1344,7 @@ class MezicisloNode(TreeNode): | ||||||
| 
 | 
 | ||||||
| 	# TODO: Využít TreeLib | 	# TODO: Využít TreeLib | ||||||
| 	def aktualizuj_nazev(self): | 	def aktualizuj_nazev(self): | ||||||
| 		if self.prev: | 		if safe_pred(self) is not None: | ||||||
| 			if (self.prev.get_real_instance_class() != CisloNode and | 			if (self.prev.get_real_instance_class() != CisloNode and | ||||||
| 				self.prev.get_real_instance_class() != MezicisloNode): | 				self.prev.get_real_instance_class() != MezicisloNode): | ||||||
| 					raise ValueError("Předchůdce není číslo!") | 					raise ValueError("Předchůdce není číslo!") | ||||||
|  |  | ||||||
|  | @ -10,10 +10,11 @@ import unidecode | ||||||
| import logging | import logging | ||||||
| 
 | 
 | ||||||
| from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, Hodnoceni, UlohaZadaniNode, Novinky, TreeNode | from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Osoba, Organizator, Prijemce, Tema, Uloha, Konfera, TextNode, UlohaVzorakNode, RocnikNode, CisloNode, TemaVCisleNode, Text, Hodnoceni, UlohaZadaniNode, Novinky, TreeNode | ||||||
|  | import seminar.models as m | ||||||
| 
 | 
 | ||||||
| from django.contrib.flatpages.models import FlatPage | from django.contrib.flatpages.models import FlatPage | ||||||
| from django.contrib.sites.models import Site | from django.contrib.sites.models import Site | ||||||
| from seminar.treelib import all_children, insert_last_child, all_children_of_type | from seminar.treelib import all_children, insert_last_child, all_children_of_type, create_node_after | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| User = django.contrib.auth.get_user_model() | User = django.contrib.auth.get_user_model() | ||||||
|  | @ -420,6 +421,85 @@ def gen_cisla(rnd, rocniky): | ||||||
| 		rocnik_cisla.append(cisla) | 		rocnik_cisla.append(cisla) | ||||||
| 	return rocnik_cisla | 	return rocnik_cisla | ||||||
| 
 | 
 | ||||||
|  | def add_first_child(node, child): | ||||||
|  | 	node.first_child = child | ||||||
|  | 	node.save() | ||||||
|  | 	return | ||||||
|  | 
 | ||||||
|  | def get_text(): | ||||||
|  | 	odstavec = lorem.paragraph() | ||||||
|  | 	return Text.objects.create(na_web = odstavec, do_cisla = odstavec)	 | ||||||
|  | 
 | ||||||
|  | def gen_dlouhe_tema(rnd, organizatori, rocnik, nazev, obor, kod): | ||||||
|  | 	tema = Tema.objects.create( | ||||||
|  |                 nazev=nazev, | ||||||
|  |                 stav=Problem.STAV_ZADANY, | ||||||
|  |                 zamereni="M", | ||||||
|  |                 autor=rnd.choice(organizatori), | ||||||
|  |                 garant=rnd.choice(organizatori), | ||||||
|  |                 kod=str(kod), | ||||||
|  |                 tema_typ=rnd.choice(Tema.TEMA_CHOICES)[0], | ||||||
|  |                 rocnik=rocnik, | ||||||
|  |                 abstrakt = lorem.paragraph()  | ||||||
|  | 		) | ||||||
|  | 	 | ||||||
|  | 	# Generování struktury k tématu | ||||||
|  | 	cisla = sorted(rocnik.cisla.all(), key=lambda cislo: cislo.poradi) | ||||||
|  | 	for cislo in cisla: | ||||||
|  | 		# Přidáme TemaVCisleNode do daného čísla | ||||||
|  | 		cislo_node = cislo.cislonode	 | ||||||
|  | 		tema_cislo_node = TemaVCisleNode.objects.create(tema = tema) | ||||||
|  | 		insert_last_child(cislo_node, tema_cislo_node) | ||||||
|  | 		 | ||||||
|  | 		# Přidávání obsahu do čísla | ||||||
|  | 		cast_node = m.CastNode.objects.create(nadpis = "Příspěvek k číslu {}".format(cislo.kod)) | ||||||
|  | 		add_first_child(tema_cislo_node, cast_node) | ||||||
|  | 	 | ||||||
|  | 		text_node = TextNode.objects.create(text = get_text()) | ||||||
|  | 		add_first_child(cast_node, text_node) | ||||||
|  | 
 | ||||||
|  | 		cast_node2 = m.CastNode.objects.create(nadpis = "První podproblém") | ||||||
|  | 		add_first_child(text_node, cast_node2) | ||||||
|  | 		 | ||||||
|  | 		text_node2 = TextNode.objects.create(text = get_text()) | ||||||
|  | 		add_first_child(cast_node2, text_node2) | ||||||
|  | 		 | ||||||
|  | 		cast_node3 = m.CastNode.objects.create(nadpis = "Druhý podproblém") | ||||||
|  | 		add_first_child(text_node2, cast_node3) | ||||||
|  | 
 | ||||||
|  | 		text_node3 = TextNode.objects.create(text = get_text()) | ||||||
|  | 		add_first_child(cast_node3, text_node3) | ||||||
|  | 
 | ||||||
|  | 		cast_node4 = m.CastNode.objects.create(nadpis = "Třetí podproblém") | ||||||
|  | 		add_first_child(text_node3, cast_node4)	 | ||||||
|  | 
 | ||||||
|  | 		text_node4 = TextNode.objects.create(text = get_text()) | ||||||
|  | 		add_first_child(cast_node3, text_node4) | ||||||
|  | 		 | ||||||
|  | 		cast_node3a = m.CastNode.objects.create(nadpis = "Podproblém paralelní s " | ||||||
|  | 					"druhým podproblémem") | ||||||
|  | 		cast_node3.succ = cast_node3a | ||||||
|  | 		cast_node3.save() | ||||||
|  | 
 | ||||||
|  | 		text_node3a = TextNode.objects.create(text = get_text()) | ||||||
|  | 		add_first_child(cast_node3a, text_node3a) | ||||||
|  | 
 | ||||||
|  | 		# Občas přidáme mezičíslo | ||||||
|  | 		if rnd.randint(1, 3) == 1: | ||||||
|  | 			create_node_after(cislo_node, m.MezicisloNode)		 | ||||||
|  | 			mezicislo_node = cislo_node.succ | ||||||
|  | 	 | ||||||
|  | 			cast_node_mezicislo = m.CastNode.objects.create( | ||||||
|  | 					nadpis = "Příspěvek k mezičíslu".format(cislo.kod)) | ||||||
|  | 			add_first_child(mezicislo_node, cast_node_mezicislo) | ||||||
|  | 
 | ||||||
|  | 			odstavec = lorem.paragraph() | ||||||
|  | 			text_mezicislo = Text.objects.create(na_web = odstavec, do_cisla = odstavec)	 | ||||||
|  | 			text_node_mezicislo = TextNode.objects.create(text = text_mezicislo) | ||||||
|  | 			add_first_child(cast_node_mezicislo, text_node_mezicislo) | ||||||
|  | 
 | ||||||
|  | 	return tema | ||||||
|  | 
 | ||||||
| def gen_temata(rnd, rocniky, rocnik_cisla, organizatori): | def gen_temata(rnd, rocniky, rocnik_cisla, organizatori): | ||||||
| 	logger.info('Generuji témata...') | 	logger.info('Generuji témata...') | ||||||
| 
 | 
 | ||||||
|  | @ -666,6 +746,10 @@ def create_test_data(size = 6, rnd = None): | ||||||
| 	# 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 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_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 | 	# generování úloh k tématům ve všech číslech | ||||||
| 	gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) | 	gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ from django.db import transaction | ||||||
| import seminar.models as s | import seminar.models as s | ||||||
| from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci | from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci | ||||||
| #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | ||||||
| from seminar import utils,treelib | from seminar import utils, treelib | ||||||
| from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm | from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm | ||||||
| import seminar.forms as f | import seminar.forms as f | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky