mamweb/soustredeni/testutils.py
Pavel "LEdoian" Turinsky d288fefecc Zrušení dočasných odkazů do seminar.models.*
Poznámky:
- `seminar.models.base` je v pořádku (není to dočasný soubor)
- dočasné importy v `seminar/models/*.py` jsou taky validní, protože
  odtamtud zmizí. Jde mi o to, aby náhodné věci buď používaly
  už-správnou aplikaci, nebo postaru `seminar.models` jako celek, aby
  během odstřelu nebylo potřeba všechny věci přepisovat.

Ano, tohle je potenciálně kontroverzní commit. Ale je dočasný a mně
poněkud rozbíjí workflow, když mi v náhodné okamžiky odmítne běžet
náhodná část webu na kterou nesahám jen kvůli tomu, že importuje věci
odněkud, odkud to nečekám.

Alternativní řešení: dát správné importy (s dočasnými
`seminar.models.*`) do správných `aplikace/models.py` už teď a
importovat věci rovnou z výsledných modulů. To zajišťuje jak
konzistenci, tak to, že při odstřelu se cesta změní na jednom očekávaném
místě (resp. spíš se prostě smaže) a všechno ostatní bude pokračovat ve
fungování.
2024-10-23 22:54:14 +02:00

69 lines
2.7 KiB
Python

import logging
import datetime
import random
from typing import Sequence
import lorem
from .models import Soustredeni, Konfera
import seminar.models as am # tvorba
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=am.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