Add testdata: adminova osoba, osoby uživatelů, korektury
This commit is contained in:
		
							parent
							
								
									41a027a941
								
							
						
					
					
						commit
						9a1cf6928c
					
				
					 5 changed files with 5242 additions and 9 deletions
				
			
		|  | @ -103,7 +103,7 @@ class KorekturovanePDF(models.Model): | ||||||
| 		# Změnil se počet stran, ukládáme | 		# Změnil se počet stran, ukládáme | ||||||
| 		super(KorekturovanePDF, self).save() | 		super(KorekturovanePDF, self).save() | ||||||
| 
 | 
 | ||||||
| 	def save(self): | 	def save(self, **kwargs): | ||||||
| 		# Pokud se nezmenilo PDF, tak nepregenerovavej nahledy | 		# Pokud se nezmenilo PDF, tak nepregenerovavej nahledy | ||||||
| 		try: | 		try: | ||||||
| 			original = KorekturovanePDF.objects.get(pk=self.pk) | 			original = KorekturovanePDF.objects.get(pk=self.pk) | ||||||
|  | @ -113,7 +113,7 @@ class KorekturovanePDF(models.Model): | ||||||
| 		except ObjectDoesNotExist: | 		except ObjectDoesNotExist: | ||||||
| 			pass | 			pass | ||||||
| 		# uložíme nahrávané pdf | 		# uložíme nahrávané pdf | ||||||
| 		super(KorekturovanePDF, self).save() | 		super(KorekturovanePDF, self).save(kwargs) | ||||||
| 
 | 
 | ||||||
| 		# uložíme png a změněný počet stran | 		# uložíme png a změněný počet stran | ||||||
| 		self.convert() | 		self.convert() | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								korektury/testpdfs/A.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								korektury/testpdfs/A.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5125
									
								
								korektury/testpdfs/B.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5125
									
								
								korektury/testpdfs/B.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										69
									
								
								korektury/testutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								korektury/testutils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,69 @@ | ||||||
|  | import logging | ||||||
|  | import os | ||||||
|  | from shutil import copyfile, rmtree | ||||||
|  | 
 | ||||||
|  | from django.db import transaction | ||||||
|  | from django.conf import settings | ||||||
|  | 
 | ||||||
|  | from korektury.models import KorekturovanePDF, generate_filename | ||||||
|  | 
 | ||||||
|  | logger = logging.getLogger(__name__) | ||||||
|  | 
 | ||||||
|  | @transaction.atomic | ||||||
|  | def create_test_pdf(rnd, organizatori): | ||||||
|  | 	logger.info('Vyrábím testovací pdf ke korekturovani') | ||||||
|  | 	try: | ||||||
|  | 		testpdfs = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'testpdfs') | ||||||
|  | 
 | ||||||
|  | 		# smaže minulé pdfka a obrázky k nim a vytvoří (znovu) jejich složky | ||||||
|  | 		pdf_dir = os.path.join(settings.BASE_DIR, os.path.join('media', settings.KOREKTURY_PDF_DIR)) | ||||||
|  | 		img_dir = os.path.join(settings.BASE_DIR, os.path.join('media', settings.KOREKTURY_IMG_DIR)) | ||||||
|  | 		rmtree(pdf_dir, ignore_errors=True) | ||||||
|  | 		os.makedirs(pdf_dir) | ||||||
|  | 		rmtree(img_dir, ignore_errors=True) | ||||||
|  | 		os.makedirs(img_dir) | ||||||
|  | 
 | ||||||
|  | 		def gen_filename(filename): | ||||||
|  | 			name = generate_filename(None, filename) | ||||||
|  | 			print(name) | ||||||
|  | 			copyfile(os.path.join(testpdfs, filename), os.path.join(settings.BASE_DIR, os.path.join('media', name))) | ||||||
|  | 			return name | ||||||
|  | 
 | ||||||
|  | 		# TODO silent ghostscript (vypisuje odstavec za každou stránku…) | ||||||
|  | 
 | ||||||
|  | 		KorekturovanePDF.objects.create( | ||||||
|  | 			nazev='B', komentar='Neuronové sítě', org=rnd.choice(organizatori), pdf=gen_filename(filename='B.pdf') | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		KorekturovanePDF.objects.create( | ||||||
|  | 			nazev='A', komentar='M&M: Jak řešit?', org=rnd.choice(organizatori), pdf=gen_filename(filename='A.pdf') | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		korekturovane_pdf = KorekturovanePDF.objects.create( | ||||||
|  | 			nazev='A', komentar='M&M: Jak řešit?', org=rnd.choice(organizatori), pdf=gen_filename(filename='A.pdf'), | ||||||
|  | 			status='zanaseni' | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		KorekturovanePDF.objects.create( | ||||||
|  | 			nazev='A', komentar='M&M: Jak řešit?', org=rnd.choice(organizatori), pdf=gen_filename(filename='A.pdf'), | ||||||
|  | 			status='zastarale' | ||||||
|  | 		) | ||||||
|  | 	except (FileNotFoundError, Exception) as e: | ||||||
|  | 		# TODO najít správné chyby, které vyhazují různé systémy při neexistenci ImageMagick, nebo knihoven | ||||||
|  | 		logger.error(str(e)) | ||||||
|  | 		logger.error( | ||||||
|  | 			'Chyba vytváření testovacích korektur, pravděpodobně není nainstalován ImageMagick nebo některá z knihoven' | ||||||
|  | 			'pro práci se soubory pdf (ghostscript) nebo png (libpng?).\n' | ||||||
|  | 			''' | ||||||
|  | 				Instalaci na linux provedete např. příkazy: | ||||||
|  | 				sudo apt-get build-dep imagemagick | ||||||
|  | 				git clone https://github.com/ImageMagick/ImageMagick.git | ||||||
|  | 				cd ImageMagick/ | ||||||
|  | 				./configure | ||||||
|  | 				make | ||||||
|  | 				sudo make install | ||||||
|  | 				sudo ldconfig /usr/local/lib | ||||||
|  | 				cd .. | ||||||
|  | 				rm -r ImageMagick/ | ||||||
|  | 			''' | ||||||
|  | 		) | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
| import datetime | import datetime | ||||||
|  | 
 | ||||||
|  | from django.contrib.auth.models import Permission | ||||||
| from pytz import timezone | from pytz import timezone | ||||||
| import random | import random | ||||||
| import lorem | import lorem | ||||||
|  | @ -9,6 +11,7 @@ from django.db import transaction | ||||||
| import unidecode | import unidecode | ||||||
| import logging | import logging | ||||||
| 
 | 
 | ||||||
|  | from korektury.testutils import create_test_pdf | ||||||
| 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 | import seminar.models as m | ||||||
| 
 | 
 | ||||||
|  | @ -70,7 +73,7 @@ def gen_osoby(rnd, size): | ||||||
| 		if pokusy >= max_pokusy: | 		if pokusy >= max_pokusy: | ||||||
| 			print("Chyba, na danou velikost testovacích dat příliš málo možných" | 			print("Chyba, na danou velikost testovacích dat příliš málo možných" | ||||||
| 				" jmen a příjmení") | 				" jmen a příjmení") | ||||||
| 			exit | 			exit() | ||||||
| 		prezdivka = rnd.choice(prezdivky) | 		prezdivka = rnd.choice(prezdivky) | ||||||
| 		email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) | 		email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) | ||||||
| 		telefon = "".join([str(rnd.choice([k for k in range(10)])) for i in range(9)]) | 		telefon = "".join([str(rnd.choice([k for k in range(10)])) for i in range(9)]) | ||||||
|  | @ -124,9 +127,20 @@ def gen_resitele(rnd, osoby, skoly): | ||||||
| 	logger.info('Generuji řešitele...') | 	logger.info('Generuji řešitele...') | ||||||
| 
 | 
 | ||||||
| 	resitele = [] | 	resitele = [] | ||||||
|  | 	x = 0 | ||||||
|  | 	resitel_perm = Permission.objects.filter(codename__exact='resitel').first() | ||||||
| 	for os in osoby: | 	for os in osoby: | ||||||
| 		rand = rnd.randint(0, 8) | 		rand = rnd.randint(0, 8) | ||||||
| 		if not (rand % 8 == 0): | 		if not (rand % 8 == 0): | ||||||
|  | 			if not os.user: | ||||||
|  | 				if x: | ||||||
|  | 					user = User.objects.create(username='r'+str(x), email=os.email, password='r') | ||||||
|  | 				else: | ||||||
|  | 					user = User.objects.create(username='r', email=os.email, password='r') | ||||||
|  | 				x += 1 | ||||||
|  | 				os.user = user | ||||||
|  | 				os.save() | ||||||
|  | 			os.user.user_permissions.add(resitel_perm) | ||||||
| 			resitele.append(Resitel.objects.create(osoba=os, skola=rnd.choice(skoly), | 			resitele.append(Resitel.objects.create(osoba=os, skola=rnd.choice(skoly), | ||||||
| 				rok_maturity=rnd.randint(2019, 2029), | 				rok_maturity=rnd.randint(2019, 2029), | ||||||
| 				zasilat=rnd.choice(Resitel.ZASILAT_CHOICES)[0])) | 				zasilat=rnd.choice(Resitel.ZASILAT_CHOICES)[0])) | ||||||
|  | @ -139,7 +153,7 @@ def gen_prijemci(rnd, osoby, kolik=10): | ||||||
| 		prijemci.append(Prijemce.objects.create(osoba=i)) | 		prijemci.append(Prijemce.objects.create(osoba=i)) | ||||||
| 	return prijemci | 	return prijemci | ||||||
| 
 | 
 | ||||||
| def gen_organizatori(rnd, osoby, last_rocnik, users): | def gen_organizatori(rnd, osoby, last_rocnik): | ||||||
| 	logger.info('Generuji organizátory...') | 	logger.info('Generuji organizátory...') | ||||||
| 	organizatori = [] | 	organizatori = [] | ||||||
| 
 | 
 | ||||||
|  | @ -149,6 +163,8 @@ def gen_organizatori(rnd, osoby, last_rocnik, users): | ||||||
| 	seznam_oboru = ["matematiku", "matematiku", "matematiku", "fyziku", "literaturu", | 	seznam_oboru = ["matematiku", "matematiku", "matematiku", "fyziku", "literaturu", | ||||||
| 			"informatiku", "informatiku", "běhání dokolečka"] | 			"informatiku", "informatiku", "běhání dokolečka"] | ||||||
| 
 | 
 | ||||||
|  | 	x = 0 | ||||||
|  | 	org_perm = Permission.objects.filter(codename__exact='org').first() | ||||||
| 	for os in osoby: | 	for os in osoby: | ||||||
| 		rand = rnd.randint(0, 8) | 		rand = rnd.randint(0, 8) | ||||||
| 		if (rand % 8 == 0): | 		if (rand % 8 == 0): | ||||||
|  | @ -175,6 +191,15 @@ def gen_organizatori(rnd, osoby, last_rocnik, users): | ||||||
| 
 | 
 | ||||||
| 			if do.year > datetime.datetime.now().year: | 			if do.year > datetime.datetime.now().year: | ||||||
| 				do = None | 				do = None | ||||||
|  | 			if not os.user: | ||||||
|  | 				if x: | ||||||
|  | 					user = User.objects.create(username='o'+str(x), email=os.email, password='o') | ||||||
|  | 				else: | ||||||
|  | 					user = User.objects.create(username='o', email=os.email, password='o') | ||||||
|  | 				x += 1 | ||||||
|  | 				os.user = user | ||||||
|  | 				os.save() | ||||||
|  | 			os.user.user_permissions.add(org_perm) | ||||||
| 			organizatori.append(Organizator.objects.create(osoba=os, | 			organizatori.append(Organizator.objects.create(osoba=os, | ||||||
| 				organizuje_od=od, organizuje_do=do, strucny_popis_organizatora = popis_orga)) | 				organizuje_od=od, organizuje_do=do, strucny_popis_organizatora = popis_orga)) | ||||||
| 	return organizatori | 	return organizatori | ||||||
|  | @ -681,14 +706,14 @@ def otec_syn(otec, syn): | ||||||
| 	syn.save() | 	syn.save() | ||||||
| 	otec.save() | 	otec.save() | ||||||
| 
 | 
 | ||||||
| def gen_clanek(rnd): | def gen_clanek(rnd, organizatori, resitele): | ||||||
| 	logger.info("Generuji článek do čísla 22.2") | 	logger.info("Generuji článek do čísla 22.2") | ||||||
| 	clanek = m.Clanek.objects.create( | 	clanek = m.Clanek.objects.create( | ||||||
| 		nazev="Článek o Lorem ipsum", | 		nazev="Článek o Lorem ipsum", | ||||||
| 		nadproblem=None, | 		nadproblem=None, | ||||||
| 		stav='vyreseny', | 		stav='vyreseny', | ||||||
| 		zamereni=['I'], | 		zamereni=['I'], | ||||||
| 		garant=rnd.choice(m.Organizator.objects.all()), | 		garant=rnd.choice(organizatori), | ||||||
| 		kod='cl', | 		kod='cl', | ||||||
| 		) | 		) | ||||||
| 	clanek.save() | 	clanek.save() | ||||||
|  | @ -696,7 +721,7 @@ def gen_clanek(rnd): | ||||||
| 	reseni = m.Reseni.objects.create( | 	reseni = m.Reseni.objects.create( | ||||||
| 		zverejneno=True, | 		zverejneno=True, | ||||||
| 		) | 		) | ||||||
| 	reseni.resitele.add(rnd.choice(m.Resitel.objects.all())) | 	reseni.resitele.add(rnd.choice(resitele)) | ||||||
| 	reseni.save() | 	reseni.save() | ||||||
| 
 | 
 | ||||||
| 	cislo = m.Cislo.objects.get(rocnik__rocnik=22, poradi=2) | 	cislo = m.Cislo.objects.get(rocnik__rocnik=22, poradi=2) | ||||||
|  | @ -771,6 +796,17 @@ def create_test_data(size = 6, rnd = None): | ||||||
| 
 | 
 | ||||||
| 	# users | 	# users | ||||||
| 	admin = User.objects.create_superuser(username='admin', email='', password='admin') | 	admin = User.objects.create_superuser(username='admin', email='', password='admin') | ||||||
|  | 	os_admin = Osoba.objects.create( | ||||||
|  | 		user=admin, jmeno='admin', prijmeni='admin', | ||||||
|  | 		prezdivka='admin', pohlavi_muz=1, email='admin@admin.admin', | ||||||
|  | 		telefon='123 456 789', datum_narozeni=datetime.date(2000, 1, 1), | ||||||
|  | 		ulice='admin', mesto='admin', psc='100 00', | ||||||
|  | 		datum_registrace=datetime.date(2020, 9, 6) | ||||||
|  | 	) | ||||||
|  | 	or_admin = Organizator.objects.create( | ||||||
|  | 		osoba=os_admin, organizuje_od=None, organizuje_do=None, | ||||||
|  | 		strucny_popis_organizatora="Organizátor k uživateli Admin" | ||||||
|  | 	) | ||||||
| 
 | 
 | ||||||
| 	usernames = ['anet', 'bara', 'cyril', 'david', 'eva', 'filip'] | 	usernames = ['anet', 'bara', 'cyril', 'david', 'eva', 'filip'] | ||||||
| 	users = [] | 	users = [] | ||||||
|  | @ -789,8 +825,8 @@ def create_test_data(size = 6, rnd = None): | ||||||
| 
 | 
 | ||||||
| 	# resitele a organizatori | 	# resitele a organizatori | ||||||
| 	last_rocnik = 25 | 	last_rocnik = 25 | ||||||
|  | 	organizatori = gen_organizatori(rnd, osoby, last_rocnik) | ||||||
| 	resitele = gen_resitele(rnd, osoby, skoly) | 	resitele = gen_resitele(rnd, osoby, skoly) | ||||||
| 	organizatori = gen_organizatori(rnd, osoby, last_rocnik, users) |  | ||||||
| 
 | 
 | ||||||
| 	#generování novinek | 	#generování novinek | ||||||
| 	novinky = gen_novinky(rnd, organizatori) | 	novinky = gen_novinky(rnd, organizatori) | ||||||
|  | @ -830,6 +866,9 @@ def create_test_data(size = 6, rnd = None): | ||||||
| 	#generování konfer | 	#generování konfer | ||||||
| 	konfery = gen_konfery(size, rnd, organizatori, resitele, soustredeni) | 	konfery = gen_konfery(size, rnd, organizatori, resitele, soustredeni) | ||||||
| 
 | 
 | ||||||
|  | 	# vytvoreni pdf ke korekturam | ||||||
|  | 	create_test_pdf(rnd, organizatori) | ||||||
|  | 
 | ||||||
| 			# TODO: nastavi správně, kolik se čeho generuje, aby rozsahy přibližně odpovídaly | 			# TODO: nastavi správně, kolik se čeho generuje, aby rozsahy přibližně odpovídaly | ||||||
| 			# FIXME: misto typu ruzne typy objektu a vnoreni do sebe (Tom nechápe, co je tímto fixme míněno) | 			# FIXME: misto typu ruzne typy objektu a vnoreni do sebe (Tom nechápe, co je tímto fixme míněno) | ||||||
| 			# TODO: vytvorit temata s ruznymi vlakny | 			# TODO: vytvorit temata s ruznymi vlakny | ||||||
|  | @ -840,7 +879,7 @@ def create_test_data(size = 6, rnd = None): | ||||||
| 			# TODO: přidat ke konferám řešení a dát je do čísel | 			# TODO: přidat ke konferám řešení a dát je do čísel | ||||||
| 
 | 
 | ||||||
| 	# Dohackované vytvoření jednoho článku | 	# Dohackované vytvoření jednoho článku | ||||||
| 	gen_clanek(rnd) | 	gen_clanek(rnd, organizatori, resitele) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	# obecné nastavení semináře, musí být už přidané ročníky a čísla, jinak se nastaví divně | 	# obecné nastavení semináře, musí být už přidané ročníky a čísla, jinak se nastaví divně | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jonas Havelka
						Jonas Havelka