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