WIP: Nástroj pro plošné vyrábění problémů #17

Draft
ledoian wants to merge 9 commits from zadavatko_problemu into master
Owner
No description provided.
ledoian added 4 commits 2022-11-29 17:52:49 +01:00
Zatím nemám tušení, jak se ty věci zpracují a objeví, ale už máme nějaký
nástřel frontendu, se kterým můžeme interagovat a dodělávat ho.
Zatím je to spíš TODO list než kód :-)
Owner

Nenene, to sis spletl. Cílem webařů je problémy řešit, ne hromadně vyrábět…

Nenene, to sis spletl. Cílem webařů je problémy řešit, ne hromadně vyrábět…
Author
Owner

Není Problém: řádek m.Problem.objects.update(stav=STAV_VYRESENY) řeší všechny Problémy :-P

Není Problém: řádek `m.Problem.objects.update(stav=STAV_VYRESENY)` řeší všechny Problémy :-P
Author
Owner

Tipy, na co si dát pozor:

  • Přidání jen části problémů (některé přehlédnu / nemám rozmyšlené)
  • Nutné vždy vyplnit číslo zadání (jinak se nenabízí v autocomplete a jinde)

(Případné další problémy přidávejte (pun not intended) do seznamu, zaškrtnuté jsou ty, které by kód měl už umět řešit.)

Tipy, na co si dát pozor: - [ ] Přidání jen části problémů (některé přehlédnu / nemám rozmyšlené) - [ ] Nutné vždy vyplnit číslo zadání (jinak se nenabízí v autocomplete a jinde) (Případné další problémy přidávejte (pun not intended) do seznamu, zaškrtnuté jsou ty, které by kód měl už umět řešit.)
ledoian added 137 commits 2023-05-15 21:10:41 +02:00
Už máme ty jednoduché targety (nebo byly smazány), zbývá dořešit několik
složitých.
Thanks shellcheck
prosím čtěte…
Nic tam nebylo a teď je vidět ve `file *`, že tam nic není.
Je úplně k ničemu, když si nové skripty zapínají venv samy
Taky jsem smazal nějaké komentáře v Makefile_old, aby nepřekážely.
Nic moc nedělal, tak jsem ho nahradil (IMHO lepší) dokumentací.
`all` tam nemá žádnou sémantiku…
- Přidal jsem `set -euxo pipefail`, takže nejsou potřeba `&&` a obecně se
  to chová víc jako ostatní make skripty
- Venv se zapíná stejně jako v lokálních skriptech, takže se dá
  jednoduše změnit jeho cesta
Všechny make skripty stejně vyrábí venv přes `ensure_venv` a protože web
nikdo nikdy nebude instalovat jinak (nebo když bude, tak asi ví, co
dělá), tak tohle nedává smysl spouštět.
Ne že by mi na tom záviselo, ale kód to nezhoršuje a pokud to aspoň o
trochu zmenší šanci na nějaké přehlédnutí, tak je to OK.

A spoustu varování shellchecku jsem vyignoroval a nemíním plevelit kód
komentáři, o čem všem vím a on ne :-)
Uvědomil jsem si, že aktuálně nejde skoro vůbec poznat, jestli make
skript uspěl nebo ne. Tohle by se mělo vypsat, když se nepovede.

Víc by se mi líbilo, kdyby úspěšné doběhnutí ohlásilo "OK", ale to
neumím udělat bez nějakého zápatí skriptů.

(Resp. uměl bych: make/lib může být interpretr, který na začátku
zinicalizuje proměnné, pak natáhne příslušný skript a na konci ohlásí
OK. Ale přijde mi to trochu moc magické, takže pokud někdo nebude nějak
extra pro, tak to tak neudělám :-))
Teď vypadá víc jako readme, na které chceš narazit v gitee, než jako pár
random tipů. Random tipy jsem přesunul do dokumentace
Obsahuje tipy z Readme, obsahuje velkou část make/README.md.

Zatím nevím, co provedu s make/README.md, ale na něco třeba přijdu :-)
A není to zas tak moc README, spíš intro :-/
Není to častý bug, ale nějaký obsah přece potřebujeme :-)
Reviewed-on: #15
Pustil jsem na velkou část kódu skript, zatím nevím, co jsem rozbil.
Prosím o review :-)
# Conflicts:
#	odevzdavatko/templates/odevzdavatko/detail.html
(pokud jsem to napsal správně.)
Reviewed-on: #18
Reviewed-on: #13
Reviewed-on: #19
# Conflicts:
#	docs/index.rst
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.
Umožňuje testovat konkrétní moduly a nespouštět vždy všechno.
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í.)
Označení bylo zavádějící, protože se vůbec nejedná o objekt Hodnocení.
Neříkám, že nové jméno je nějak úchvatné, ale aspoň mě nemate a na
proměnnou s životností dva řádky je to stejně jedno…
Ten řádek má sice pořád 117 znaků, ale IMHO je to o dost lepší.

Mně to i správně vyplňuje subjecty v Thunderbirdu, takže můj kód asi
není úplně mimo :-)
Reviewed-on: #21
… moc nahlas.
Reviewed-on: #22
Podle toho, jak dopadne PR se to buď aplikuje takto, nebo se tenhle
commit revertne.
Po najetí myší řekne, co znamenají symboly…
Orgovi se může hodit vidět, jak zpětnou vazbu uvidí řešitel.

Možná by taky nebylo špatné odkázat na řešitelskou stránku z orgovské…
Reviewed-on: #25
Reviewed-on: #24
Reviewed-on: #23
ledoian added 1 commit 2023-05-16 13:43:01 +02:00
Bude potřeba to rebasovat a učesat, ale co už…
ledoian added 1 commit 2023-05-16 13:43:27 +02:00
Owner

Máme umět neceločíselný počet bodů.

Máme umět neceločíselný počet bodů.
zelvuska added 2 commits 2024-10-24 11:22:08 +02:00
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin zadavatko_problemu:zadavatko_problemu
git checkout zadavatko_problemu

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git checkout master
git merge --no-ff zadavatko_problemu
git checkout zadavatko_problemu
git rebase master
git checkout master
git merge --ff-only zadavatko_problemu
git checkout zadavatko_problemu
git rebase master
git checkout master
git merge --no-ff zadavatko_problemu
git checkout master
git merge --squash zadavatko_problemu
git checkout master
git merge --ff-only zadavatko_problemu
git checkout master
git merge zadavatko_problemu
git push origin master
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: mam/mamweb#17
No description provided.