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 | ||||
| 		super(KorekturovanePDF, self).save() | ||||
| 
 | ||||
| 	def save(self): | ||||
| 	def save(self, **kwargs): | ||||
| 		# Pokud se nezmenilo PDF, tak nepregenerovavej nahledy | ||||
| 		try: | ||||
| 			original = KorekturovanePDF.objects.get(pk=self.pk) | ||||
|  | @ -113,7 +113,7 @@ class KorekturovanePDF(models.Model): | |||
| 		except ObjectDoesNotExist: | ||||
| 			pass | ||||
| 		# uložíme nahrávané pdf | ||||
| 		super(KorekturovanePDF, self).save() | ||||
| 		super(KorekturovanePDF, self).save(kwargs) | ||||
| 
 | ||||
| 		# uložíme png a změněný počet stran | ||||
| 		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 -*- | ||||
| 
 | ||||
| import datetime | ||||
| 
 | ||||
| from django.contrib.auth.models import Permission | ||||
| from pytz import timezone | ||||
| import random | ||||
| import lorem | ||||
|  | @ -9,6 +11,7 @@ from django.db import transaction | |||
| import unidecode | ||||
| 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 | ||||
| import seminar.models as m | ||||
| 
 | ||||
|  | @ -70,7 +73,7 @@ def gen_osoby(rnd, size): | |||
| 		if pokusy >= max_pokusy: | ||||
| 			print("Chyba, na danou velikost testovacích dat příliš málo možných" | ||||
| 				" jmen a příjmení") | ||||
| 			exit | ||||
| 			exit() | ||||
| 		prezdivka = rnd.choice(prezdivky) | ||||
| 		email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) | ||||
| 		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...') | ||||
| 
 | ||||
| 	resitele = [] | ||||
| 	x = 0 | ||||
| 	resitel_perm = Permission.objects.filter(codename__exact='resitel').first() | ||||
| 	for os in osoby: | ||||
| 		rand = rnd.randint(0, 8) | ||||
| 		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), | ||||
| 				rok_maturity=rnd.randint(2019, 2029), | ||||
| 				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)) | ||||
| 	return prijemci | ||||
| 
 | ||||
| def gen_organizatori(rnd, osoby, last_rocnik, users): | ||||
| def gen_organizatori(rnd, osoby, last_rocnik): | ||||
| 	logger.info('Generuji organizátory...') | ||||
| 	organizatori = [] | ||||
| 
 | ||||
|  | @ -149,6 +163,8 @@ def gen_organizatori(rnd, osoby, last_rocnik, users): | |||
| 	seznam_oboru = ["matematiku", "matematiku", "matematiku", "fyziku", "literaturu", | ||||
| 			"informatiku", "informatiku", "běhání dokolečka"] | ||||
| 
 | ||||
| 	x = 0 | ||||
| 	org_perm = Permission.objects.filter(codename__exact='org').first() | ||||
| 	for os in osoby: | ||||
| 		rand = rnd.randint(0, 8) | ||||
| 		if (rand % 8 == 0): | ||||
|  | @ -175,6 +191,15 @@ def gen_organizatori(rnd, osoby, last_rocnik, users): | |||
| 
 | ||||
| 			if do.year > datetime.datetime.now().year: | ||||
| 				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, | ||||
| 				organizuje_od=od, organizuje_do=do, strucny_popis_organizatora = popis_orga)) | ||||
| 	return organizatori | ||||
|  | @ -681,14 +706,14 @@ def otec_syn(otec, syn): | |||
| 	syn.save() | ||||
| 	otec.save() | ||||
| 
 | ||||
| def gen_clanek(rnd): | ||||
| def gen_clanek(rnd, organizatori, resitele): | ||||
| 	logger.info("Generuji článek do čísla 22.2") | ||||
| 	clanek = m.Clanek.objects.create( | ||||
| 		nazev="Článek o Lorem ipsum", | ||||
| 		nadproblem=None, | ||||
| 		stav='vyreseny', | ||||
| 		zamereni=['I'], | ||||
| 		garant=rnd.choice(m.Organizator.objects.all()), | ||||
| 		garant=rnd.choice(organizatori), | ||||
| 		kod='cl', | ||||
| 		) | ||||
| 	clanek.save() | ||||
|  | @ -696,7 +721,7 @@ def gen_clanek(rnd): | |||
| 	reseni = m.Reseni.objects.create( | ||||
| 		zverejneno=True, | ||||
| 		) | ||||
| 	reseni.resitele.add(rnd.choice(m.Resitel.objects.all())) | ||||
| 	reseni.resitele.add(rnd.choice(resitele)) | ||||
| 	reseni.save() | ||||
| 
 | ||||
| 	cislo = m.Cislo.objects.get(rocnik__rocnik=22, poradi=2) | ||||
|  | @ -771,6 +796,17 @@ def create_test_data(size = 6, rnd = None): | |||
| 
 | ||||
| 	# users | ||||
| 	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'] | ||||
| 	users = [] | ||||
|  | @ -789,8 +825,8 @@ def create_test_data(size = 6, rnd = None): | |||
| 
 | ||||
| 	# resitele a organizatori | ||||
| 	last_rocnik = 25 | ||||
| 	organizatori = gen_organizatori(rnd, osoby, last_rocnik) | ||||
| 	resitele = gen_resitele(rnd, osoby, skoly) | ||||
| 	organizatori = gen_organizatori(rnd, osoby, last_rocnik, users) | ||||
| 
 | ||||
| 	#generování novinek | ||||
| 	novinky = gen_novinky(rnd, organizatori) | ||||
|  | @ -830,6 +866,9 @@ def create_test_data(size = 6, rnd = None): | |||
| 	#generování konfer | ||||
| 	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 | ||||
| 			# 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 | ||||
|  | @ -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 | ||||
| 
 | ||||
| 	# 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ě | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Jonas Havelka
						Jonas Havelka