mamweb/soustredeni/testutils.py

70 lines
2.7 KiB
Python
Raw Normal View History

import logging
import datetime
import random
from typing import Sequence
import lorem
from .models import Soustredeni, Konfera
from tvorba.models import Rocnik
import personalni.models as pm
logger = logging.getLogger(__name__)
def gen_soustredeni(
size: int,
resitele: Sequence[pm.Resitel],
organizatori: Sequence[pm.Organizator],
rnd: random.Random = None,
) -> Sequence[Soustredeni]:
logger.info('Generuji soustředění (size={})...')
rnd = rnd or random.Random(x=42)
soustredeni = []
for _ in range(1, 10): # FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?)
datum_zacatku = datetime.date(rnd.randint(2000, 2020), rnd.randint(1, 12), rnd.randint(1, 28))
working_sous = Soustredeni.objects.create(
rocnik=Rocnik.objects.order_by('?').first(),
verejne_db=rnd.choice([True, False]),
misto=rnd.choice(['Kremrolovice', 'Indiánov', 'U zmzliny', 'Vafláreň', 'Větrník', 'Horní Rakvička', 'Dolní cheesecake']),
typ=rnd.choice(['jarni', 'podzimni', 'vikend']),
datum_zacatku=datum_zacatku,
datum_konce=datum_zacatku + datetime.timedelta(days=7))
ucastnici = rnd.sample(resitele, min(len(resitele), 20))
working_sous.ucastnici.set(ucastnici)
orgove_vyber = rnd.sample(organizatori, min(len(organizatori), 20))
working_sous.organizatori.set(orgove_vyber)
working_sous.save()
soustredeni.append(working_sous)
return soustredeni
def gen_konfery(
size: int,
organizatori: Sequence[pm.Organizator],
soustredeni: Sequence[Soustredeni],
resitele: Sequence[pm.Resitel] = None,
rnd: random.Random = None,
) -> Sequence[Konfera]:
logger.info('Generuji konfery (size={})...'.format(size))
rnd = rnd or random.Random(x=42)
konfery = []
for _ in range(1, size): # FIXME Tu range si změňte jak chcete, nevím, co přesně znamená size (asi Anet?)
# Anet: size je parametr udávající velikost testovacích dat a dá se pomocí ní škálovat,
# kolik dat se nageneruje
konfera = Konfera.objects.create(
nazev=rnd.choice(['Pozorování', 'Zkoumání', 'Modelování', 'Počítání', 'Zkoušení']) + rnd.choice([' vlastností', ' jevů', ' charakteristik']) + rnd.choice([' vektorových prostorů', ' kinetické terorie látek', ' molekulární biologie', ' syntentických stromů']),
anotace=lorem.paragraph(),
abstrakt=lorem.paragraph(),
garant=rnd.choice(organizatori),
soustredeni=rnd.choice(soustredeni),
typ_prezentace=rnd.choice(['veletrh', 'prezentace']))
ucastnici_sous = resitele if resitele else list(konfera.soustredeni.ucastnici.all())
ucastnici = rnd.sample(ucastnici_sous, min(len(ucastnici_sous), rnd.randint(3, 6)))
konfera.ucastnici.set(ucastnici)
konfera.save()
konfery.append(konfera)
return konfery