Compare commits

...

5 commits

Author SHA1 Message Date
Pavel "LEdoian" Turinsky
e29bce66a4 Merge branch 'maillink' into maillink_dev_ledoian 2023-01-08 18:38:16 +01:00
Pavel 'LEdoian' Turinsky
71a85571c1 Přidání tagu {% maillink %}
Vyrábí odkazy, které vedou na poslání mailu.

Psal jsem to spíš po paměti, nejsem si jistý, že to takhle je přesně
podle příslušného RFC, ale jako PoC dobrý a když to nebude fungovat, tak
se implementace opraví.

Všimněte si, že to je otestované, takže když někdo opraví testy
(=předpis chování), tak je pak snadné z diffu a všeho odvodit úpravu.

V Django dokumentaci se píše něco o tom, že by se měl použít spíš
`format_html` a `conditional_escape`, ale zatím jsem to víc nezkoumal.

Je žádoucí z tagu {% maillink %} odddělit i tag {% mailurl %}, který by
vracel samotnou URL. Obojí dává smysl umět (speciálně bastlení odkazů z
URL je stejně strašně nepřehledné, takže je lepší to zavřít do {%
maillink %} a nikdy nevidět), ale zatím to oddělené není… (Ale jsou na
to testy, takže by se mělo aspoň dát poznat, že rozdělení nerozbije
chování.)
2023-01-05 04:40:16 +01:00
Pavel 'LEdoian' Turinsky
6fdf4dc470 NEMERGOVAT. Ochrana proti moc aktivním zásahům do větví :-)
Tahle větev je _moje_ a slouží jen k tomu, aby se dala použít i větev se
zrychlením testů. Skutečné commity se budou cherry-pickovat do větve
`maillink` a tahle větev je odsouzená k zániku.
2023-01-05 02:40:40 +01:00
Pavel "LEdoian" Turinsky
3a1aade3a2 Testy: bereme parametry
Umožňuje testovat konkrétní moduly a nespouštět vždy všechno.
2023-01-04 02:11:15 +01:00
Pavel "LEdoian" Turinsky
af6628367f Testy: Schováváme si databázi napříč běhy
Při běžení testů nejdéle trvá namigrovat (prázdnou) databázi. Toto tento
krok přeskočí.

By default django pro testy používá in-memory SQLite3 databázi, která se
schovat přirozeně nedá. Používání souborů trvá déle (data níž), ale
další běhy už jsou rychlé.

Zatím nevím, jestli se někde nemůže omylem schovávat nějaký nežádoucí
stav, ale testy mi i opakovaně běží, takže se to asi nerozbíjí úplně
moc. Na první pohled je uložená databáze prázdná.

Pro produkci a CI bych klidně běžel testy od nuly, tam nevadí čekat pár
desítek sekund až jednotky minut na výsledek. Tato optimalizace je
důležitá jen pro lokální vývoj, kde je žádoucí mít testy co
nejrychlejší.

V .gitignore už přesně toto jméno souboru je. Nevím proč, ale možná to
tak bylo by default v některém dávném Djangu.

Data
---
Spouštěl jsem příkaz `time ./manage.py test [--keepdb] api`. Běhy byly
relativně konzistentní (±1 s) a trvaly u mě:
- In memory SQLite (default): 26 s
- První spuštění s db na disku (HDD): 44 s
- Následná spuštění: 7.7 s
Data jsou nejspíš zkreslena tím, že všechno je nejspíš nacachované v
systému, ale i tak je vidět zřetelné zrychlení.

Původní motivace: úplně triviální a nedatabázový test na starém
notebooku běžel kolem 3:14, což je zoufale nepoužitelné když si chci
napsat testy jako pomůcku pro vývoj.
2023-01-04 01:51:02 +01:00
5 changed files with 11 additions and 6 deletions

View file

@ -6,4 +6,4 @@ set -exuo pipefail
ensure_web_installed
trap - ERR # Testy nejspíš selžou, ale nechceme kolem toho dělat další chybovou hlášku.
./manage.py test -v2
./manage.py test -v2 --keepdb "$@"

View file

@ -40,7 +40,10 @@ DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db-local.sqlite3'),
}
'TEST': {
'NAME': os.path.join(BASE_DIR, 'db-test.sqlite3'),
},
},
}
#DATABASES = {
# 'default': {

View file

@ -12,6 +12,8 @@ import os.path
# Import common settings
from .settings_common import *
raise RuntimeError('Kdo to zamergoval, ať si mě nepřeje.')
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/

View file

@ -12,6 +12,8 @@ import os.path
# Import common settings
from .settings_common import * # zatim nutne, casem snad vyresime # noqa
raise RuntimeError('Zdravím testweb, tohle se nemělo stát.')
MIDDLEWARE += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)

View file

@ -42,14 +42,12 @@ function sousdeadline() {
<h1>
{% block nadpis1a %}
Vítej
NEMERGOVAT!
{% endblock %}
</h1>
<div>
M&amp;M je korespondenční seminář pro středoškoláky. Vydáváme časopis, v němž najdeš různá témata z matematiky, fyziky a informatiky.
Součástí témat jsou problémy a úlohy, nad kterými se můžeš zamyslet, experimentovat a bádat.
<a href="prihlaska/?"> <div class="button"> Zaregistruj se! </div> </a>
Jestli se tohle dostane na produkci, tak někdo dostane facku! Tahle větev je moje, a mergovat se nemá!
</div>
</div>