Loading…
Reference in new issue
There is no content yet.
Delete Branch 'vylepseni_odevzdavatka'
Deleting a branch is permanent. It CANNOT be undone. Continue?
Deleting a branch is permanent. It CANNOT be undone. Continue?
https://mam-test.ks.matfyz.cz/resitel/reseni/33144: 13333,33333333333333333333333Opraveno
ae83838efc
tofa688ec8f3
2 years agoWIP: vylepseni_odevzdavatka fix #1354 fix #1237to vylepseni_odevzdavatka fix #1354 fix #1237 2 years agoJeště by to chtělo lépe zformulovat texty, ale jinak mi přijde, že už to dělá všechno tak, jak má.
</table>
<table id="form_set">
<tr><th>Problém</th><th>Body</th><th>Deadline pro body</th><th>Zpětná vazba pro řešitele</th></tr>
<tr><th>Problém</th><th>{# 📖 #}🧍</th><th>{# 🔵 #}🧍∑</th><th class="teamovaCast">{# 💪 #}🧑🤝🧑</th><th class="teamovaCast">{# ❤ #}🧑🤝🧑∑</th><th>Deadline pro body</th><th>Zpětná vazba pro řešitele</th></tr>
LOL komentáře. Za pár let je nikdo nepochopí, ale co už :-)
Na Apríla to změnit na zakomentované (a přidat popisky ❤ životy, 🔵 mana, 💪 síla, 📖 charisma)…
)
logger.info(f"Creating Hodnoceni: {hodnoceni}")
zmeny_bodu = [it for it in form.changed_data if it.startswith("body")]
if len(zmeny_bodu) == 1:
Nechceš spadnout / zalogogovat ERROR, když to bude větší než jedna?
Á, ono když bude 4, tak se nic nezměnilo (žádné pole není disabled…)
vylepseni_odevzdavatka fix #1354 fix #1237to Vylepšení odevzdávátka fix #1354 fix #1237 2 years agoreturn Hodnoceni.objects.filter(problem=self.problem, reseni__resitele=self.reseni.resitele.first(), body__isnull=False).aggregate(Sum("body"))["body__sum"]
@body_celkem.setter
def body_celkem(self, value):
Nechceš k tomu napsat assert nebo rovnou celý test, který by hlídal, že po nastavení bodů tímhle způsobem se správně aktualizuje počet bodů a celkový součet?
ditto níž
@property
def body_neprepocitane_max(self):
if self.body_max is None:
return None
IMHO spíš počet bodů za úlohu je počet nepřepočítaných bodů, i.e. když řešíš úlohu za $b$ bodů ve dvojici, tak plný počet označuje stav, kdy řešení dostane $b$ bodů a tedy každý řešitel jen $0.75b$.
No, tak $b$ bodů jsou nepřepočítané body, to je ten stav, který chceš většinou řešit.
A body ve výsledkovce (tedy body bez přívlastku) jsou už ty přepočítané pomocí našeho kouzelného vzorce z webu…
No, ale tvoje
self.body_max
vrací $b$, i když má vracet $3b/(n+2)$, protože $b$ má vracetself.body_neprepocitane_max
, ne?Mám to opačně, co?
A hlavně to aktuálně z nějakého důvodu nefunguje :'(
Áno, opačně
(Edit: fix race condition :-P)
if self.body_celkem is None:
self.body += value
else:
self.body += value - self.body_celkem
Tohle potenciálně generuje záporné body…
A to je špatně?
Považuji to za dost neočekávatelné chování, zvlášť když jako org píšu body kladné. Obecně si myslím, že spíš strhávat body od již udělených nechceme (možná vyjma „ujelo mi bodování, zpětně měním počet bodů)…
A jaké je tedy očekávané chování?
Nedovolit to vůbec (a že má kdyžtak org napsat webařům, pokud nechápe proč)? Hodit aspoň
alert()
, že se o to org pokouší a že to bude vypadat blbě ve výsledkovce?Ale doteď tam žádná taková šaráda nebyla. (Otestováno, záporné body mohu zadat vesele.) A já na frontendu nepoznám, kolik za to už řešitel dostal…
Ale doteď se ti nemohlo stát, že bys ty záporné body napsal omylem – musel bys explicitně zmáčknout mínus. Není potřeba orgy ochránit proti zlým úmyslům, ale proti dobrým chybám…
Přijde mi, že to v podstatě odchytává jen miniaturní část toho problému. To, když to zrovna vyjde záporné. Ale ve chvíli, kdy tam org zadá libovolný jiný nesprávný počet, tak to stejně nezjistíme. Tohle políčko prostě vyžaduje, aby tam org zadal správný počet.
Jakoby souhlasím s tím, že tam ta obrana může být (přídám tam asi javascript, který vykřikne, pokud při načtení libovolná z těch hodnot je záporná).
Ale nepřijde mi, že by to nějak signifikantně zvyšovalo ochranu proti špatnému zadání.
Kód jsem viděl a na první pohled je OK, jestli funguje jsem ještě nezkoušel.
# TODO najít správné místo
@staticmethod
def inverze_vzorecku_na_prepocet(body: decimal.Decimal, resitelu) -> decimal.Decimal:
return round(body * (resitelu + 2) / 3, 1)
seminar/utils.py? odevzdavatko/utils.py?
<p>{{ poznamka_form.poznamka }}</p>
<script>vporadku=true;</script>
{% for h in hodnoceni %}{% if h.body < 0.0 %} <script>if(vporadku){vporadku=false;alert("Pozor! Některé hodnocení má záporné body.\n\nBuď jde o záměr, nebo o špatné zadáný počet bodů (např. součet bodů za úlohu) nebo se něco pokazilo.\n\nPokud se to děje neočekávaně a opakovaně, napiš webařům :)");}</script> {% endif %}{% endfor %}
Nechceme to trochu pozalamovat?
if len(zmeny_bodu) == 1:
hodnoceni.__setattr__(zmeny_bodu[0], data_for_body[zmeny_bodu[0]])
if len(zmeny_bodu) != 1 and len(zmeny_bodu) != 4:
print(f"Hodnocení {hodnoceni} mělo mít nastavené víc různých bodů: {zmeny_bodu}. Nastavuji -0.1.")
Tenhle print je k něčemu dobrý? Nechal bych jen warning o řádek níž, je o dost víc konfigurovatelný…
zmeny_bodu = [it for it in form.changed_data if it.startswith("body")]
if len(zmeny_bodu) == 1:
hodnoceni.__setattr__(zmeny_bodu[0], data_for_body[zmeny_bodu[0]])
if len(zmeny_bodu) != 1 and len(zmeny_bodu) != 4:
Proč že můžou být 4?
Už to vidím: je to 4 když se nic nezmění. Prosím, napišme to k tomu do komentáře, rozhodně mi to nepřijde intuitivní.
Vylepšení odevzdávátka fix #1354 fix #1237to WIP: Vylepšení odevzdávátka fix #1354 fix #1237 2 years agoWIP: Vylepšení odevzdávátka fix #1354 fix #1237to WIP: Vylepšení odevzdávátka fix #1354 fix #1237 2 years agoWIP: Vylepšení odevzdávátka fix #1354 fix #1237to WIP: Vylepšení hodnotítka fix #1354 fix #1237 2 years agoWIP: Vylepšení hodnotítka fix #1354 fix #1237to Vylepšení hodnotítka fix #1354 fix #1237 2 years ago2ab6e76fbe
into master 2 years ago2ab6e76fbe
.