Vylepšení odevzdávátka #13

Merged
zelvuska merged 17 commits from vylepseni_odevzdavatka into master 2023-01-02 20:25:01 +01:00
Owner
No description provided.
zelvuska added 2 commits 2022-11-21 23:28:46 +01:00
zelvuska added 1 commit 2022-11-22 00:15:41 +01:00
zelvuska added 1 commit 2022-11-22 00:25:15 +01:00
Author
Owner

Tohle by postupně mělo řešit #1237, tedy umět přidat další řešitele + umět body automaticky dopočítávat, a #1354, tedy umět napovídat body. Plus bych k tomu zařadil, že to má umět i říct, kolik řešitel bodů už za tento problém má…

Tohle by postupně mělo řešit #1237, tedy umět přidat další řešitele + umět body automaticky dopočítávat, a #1354, tedy umět napovídat body. Plus bych k tomu zařadil, že to má umět i říct, kolik řešitel bodů už za tento problém má…
zelvuska added 3 commits 2022-12-06 01:11:20 +01:00
zelvuska changed title from WIP: Vylepšení odevzdávátka to Vylepšení odevzdávátka 2022-12-19 20:06:37 +01:00
Author
Owner

Tu část, která je tu bychom měli mergenout předtím, než začnou řešitelé znovu odevzdávat…

Tu část, která je tu bychom měli mergenout předtím, než začnou řešitelé znovu odevzdávat…
Owner

Takže chceš, aby to někdo viděl ideálně ještě dneska?

Takže chceš, aby to někdo viděl ideálně ještě dneska?
Author
Owner

Ano prosím :)

Ano prosím :)
auburn reviewed 2022-12-19 20:38:27 +01:00
@ -47,0 +56,4 @@
).exclude(
prezdivka_resitele=""
).filter(
prezdivka_resitele__startswith=self.q
Owner

Možná to chceme mít aspoň case-insensitive.

Možná to chceme mít aspoň case-insensitive.
Author
Owner

asi …__icontains=self.q

asi `…__icontains=self.q`
zelvuska marked this conversation as resolved
auburn reviewed 2022-12-19 20:42:20 +01:00
@ -0,0 +2,4 @@
function zkontroluj_hodnoceni() {
const pocet = $('.hodnoceni').length;
if (pocet === 1) { // vydím pouze plusko
Owner

i

i
zelvuska marked this conversation as resolved
zelvuska added 1 commit 2022-12-19 20:43:22 +01:00
ledoian reviewed 2022-12-19 22:33:29 +01:00
@ -47,0 +54,4 @@
qs = m.Resitel.objects.filter(
prezdivka_resitele__isnull=False
).exclude(
prezdivka_resitele=""
Owner

Nebylo by lepší ty řádky spojit do něčeho jako prezdivka__len__gt=0?

Nebylo by lepší ty řádky spojit do něčeho jako `prezdivka__len__gt=0`?
Author
Owner

Mě to takhle asi přijde popisnější a jsem si jistější, že to funguje…

Mě to takhle asi přijde popisnější a jsem si jistější, že to funguje…
zelvuska marked this conversation as resolved
ledoian reviewed 2022-12-19 22:36:54 +01:00
@ -47,0 +57,4 @@
prezdivka_resitele=""
).filter(
prezdivka_resitele__icontains=self.q
).all()
Owner

Tenhle způsob zalámání nejspíš nikde nemáme – trochu mi to rozbíjí čtení kódu. Ale možná nikde nemáme takovýhle kód, takže by to pokus o fluent kód (vizte níž) udělal možná taky…

Pod fluent kódem si představuji cca toto:

qs = (m.Resitel.objects
    .filter()
    .exclude(...)
    .whatever()
    .all())

(Je to o něco kratší a neskáče tam odsazení jak na pile, což mi přijde trošičku lepší pro čtení, ale je to jen malá preference…)

Tenhle způsob zalámání nejspíš nikde nemáme – trochu mi to rozbíjí čtení kódu. Ale možná nikde nemáme takovýhle kód, takže by to pokus o fluent kód (vizte níž) udělal možná taky… Pod fluent kódem si představuji cca toto: ```python3 qs = (m.Resitel.objects .filter(…) .exclude(...) .whatever() .all()) ``` (Je to o něco kratší a neskáče tam odsazení jak na pile, což mi přijde trošičku lepší pro čtení, ale je to jen malá preference…)
Author
Owner

Tak takhle mi zase chvíli trvá, než mi dojde, k čemu ta tečka na začátku řádku patří…

Tak takhle mi zase chvíli trvá, než mi dojde, k čemu ta tečka na začátku řádku patří…
zelvuska marked this conversation as resolved
zelvuska added 1 commit 2022-12-19 22:52:17 +01:00
ledoian reviewed 2022-12-19 22:55:29 +01:00
@ -66,3 +14,2 @@
<p>Řešitelé: {% for r in object.resitele.all %} {{ r }} (<a href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}">{{ r.osoba.email }}</a>)
{% if forloop.revcounter0 != 0 %}, {% endif %} {% endfor %}</p>
<p>Řešitelé: {% for r in object.resitele.all %}{{ r }}{% if edit %}(<a href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}">{{ r.osoba.email }}</a>){% endif %}{% if forloop.revcounter0 != 0 %}, {% endif %} {% endfor %}</p>
Owner

Přijde mi lepší se nesnažit všechno nacpat na jeden řádek. To HTML se vykreslí stejně a v tomhle se mi špatně orientuje…

Přijde mi lepší se nesnažit všechno nacpat na jeden řádek. To HTML se vykreslí stejně a v tomhle se mi špatně orientuje…
Author
Owner

No až na to, že tam přibydou mezery. Nechceš to nasekat ty?

No až na to, že tam přibydou mezery. Nechceš to nasekat ty?
Owner

Sice nevím, kde přibudou mezery, kouknu na testweb, ale pak to klidně nasekám…

Sice nevím, kde přibudou mezery, kouknu na testweb, ale pak to klidně nasekám…
Author
Owner

Na testwebu to aktuálně běží…

Na testwebu to aktuálně běží…
Owner

LGTM

LGTM
Author
Owner

Za mě všechno, nasekáš to?

Za mě všechno, nasekáš to?
Owner

Klidně to mergni, nasekám, ale možná to o pár desítek minut odložím (a když na to zapomenu úplně, tak to bolet taky nebude…)

Klidně to mergni, nasekám, ale možná to o pár desítek minut odložím (a když na to zapomenu úplně, tak to bolet taky nebude…)
Owner

Na jak velkou míru enterprise kódu míříme? DjangoTemplates jsou trochu na palici a těch mezer kvůli odřádkování se neumí zbavit, ale skoro určitě se to dá obejít pomocí triviálního filtru, takže by se pak dalo použít něco jako {{ o | withemail }}, což by rovnou udělalo tu výslednou věc a ten kód by byl přehlednější, ač na jednom řádku.

Ale znamená to mít k tomu ještě kousek kódu vedle.

Alternativně se něco takového dá spočítat už ve view, což se ale bude motat s výkonným kódem, který už tak je nejspíš na spodní hranici přehlednosti…

(A nebo se smíříme s tím, že ten řádek nejde tak jednoduše přečíst. Ostatně, nebyl by první – výsledkovky v TeXu trpí stejným problémem…)

Možná se mi podaří tam dát aspoň pár málo odřádkování, ale těžko odhadnout…

Na jak velkou míru enterprise kódu míříme? DjangoTemplates jsou trochu na palici a těch mezer kvůli odřádkování se neumí zbavit, ale skoro určitě se to dá obejít pomocí triviálního filtru, takže by se pak dalo použít něco jako `{{ o | withemail }}`, což by rovnou udělalo tu výslednou věc a ten kód by byl přehlednější, ač na jednom řádku. Ale znamená to mít k tomu ještě kousek kódu vedle. Alternativně se něco takového dá spočítat už ve view, což se ale bude motat s výkonným kódem, který už tak je nejspíš na spodní hranici přehlednosti… (A nebo se smíříme s tím, že ten řádek nejde tak jednoduše přečíst. Ostatně, nebyl by první – výsledkovky v TeXu trpí stejným problémem…) Možná se mi podaří tam dát aspoň pár málo odřádkování, ale těžko odhadnout…
Author
Owner

Co takhle?

Co takhle?
Owner

👎 Pořád je to na jednom řádku a teď tam navíc překážejí komentáře.

👎 Pořád je to na jednom řádku a teď tam navíc překážejí komentáře.
Author
Owner

Tak to nechávám na tobě, protože na tohle máš očividně daleko vyšší nároky (mě to totiž ty komentáře naopak hezky oddělují…).

Tak to nechávám na tobě, protože na tohle máš očividně daleko vyšší nároky (mě to totiž ty komentáře naopak hezky oddělují…).
Author
Owner

Nebo mě ještě napadlo tohle…

Nebo mě ještě napadlo tohle…
Author
Owner

Případně ještě něco jako

    {% for r in object.resitele.all %}{{ r }} (<a
        href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}">{{ r.osoba.email }}</a
    >){% if forloop.revcounter0 != 0 %}, {% endif %}{% endfor %}

čímž celý e-mail bude na jednom řádku, ale zase je to dost nahouby z pohledu tagů

Případně ještě něco jako ``` {% for r in object.resitele.all %}{{ r }} (<a href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}">{{ r.osoba.email }}</a >){% if forloop.revcounter0 != 0 %}, {% endif %}{% endfor %} ``` čímž celý e-mail bude na jednom řádku, ale zase je to dost nahouby z pohledu tagů
Author
Owner

Případně

    {% for r in object.resitele.all %}{{ r }} (<a
      href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}"
      >{{ r.osoba.email }}</a
    >){% if forloop.revcounter0 != 0 %}, {% endif %}{% endfor %}

nebo

    {% for r in object.resitele.all %}{{ r }} (<a
      href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}"
      >{{ r.osoba.email }}</a>){% if forloop.revcounter0 != 0 %}, {% endif %}{% endfor %}
Případně ``` {% for r in object.resitele.all %}{{ r }} (<a href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}" >{{ r.osoba.email }}</a >){% if forloop.revcounter0 != 0 %}, {% endif %}{% endfor %} ``` nebo ``` {% for r in object.resitele.all %}{{ r }} (<a href="mailto:{{ r.osoba.email }}?subject={{ "Oprava řešení M&M " | urlencode }}{{ object.problem.all.0.hlavni_problem | urlencode }}" >{{ r.osoba.email }}</a>){% if forloop.revcounter0 != 0 %}, {% endif %}{% endfor %} ```
ledoian reviewed 2022-12-19 22:58:56 +01:00
@ -132,0 +88,4 @@
</tr>
{% endfor %}
</table>
{% endif %}
Owner

Tohle nečtu, to se uvidí na testwebu, jak to vypadá… Čitelné to nejspíš je, tak asi dobrý…

Tohle nečtu, to se uvidí na testwebu, jak to vypadá… Čitelné to nejspíš je, tak asi dobrý…
Author
Owner

A jak to vypadá?

A jak to vypadá?
Owner

LGTM

LGTM
ledoian marked this conversation as resolved
ledoian reviewed 2022-12-19 23:02:28 +01:00
@ -13,6 +13,8 @@
<p style="text-align: justify">Když řešení různých témátek vložíš každé zvlášť, lépe se v nich vyznáme a&nbsp;třeba ti je i&nbsp;rychleji opravíme.</p>
<p>Pokud řešíte ve více lidech, je <b>nutné</b> přidat tyto lidi jako „Autory řešení“! V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze <b>jednou</b> (ne každý sám)!</p>
Owner

Nejsem si jistý, jestli není lepší spíš používat <emph> a <strong>. A možná bych si odpustil ty vykřičníky, mohly by působit trochu děsivě…

(To, jak moc velká zeď textu v odevzdávátku vzniká, posoudím za chvíli vizuálně…)

Nejsem si jistý, jestli není lepší spíš používat `<emph>` a `<strong>`. A možná bych si odpustil ty vykřičníky, mohly by působit trochu děsivě… (To, jak moc velká zeď textu v odevzdávátku vzniká, posoudím za chvíli vizuálně…)
zelvuska marked this conversation as resolved
ledoian reviewed 2022-12-19 23:04:47 +01:00
@ -235,2 +259,4 @@
return ctx
def check_access(self):
""" Na orga máme nároky už v urls.py """
Owner

Tohle nemá být docstring, ale komentář.

Tohle nemá být docstring, ale komentář.
zelvuska marked this conversation as resolved
ledoian reviewed 2022-12-19 23:05:35 +01:00
@ -236,1 +260,4 @@
def check_access(self):
""" Na orga máme nároky už v urls.py """
pass
Owner

„Better safe than sorry“? Je to ±jeden řádek tak jak tak, a aspoň stačí vidět jen jeden soubor…

„Better safe than sorry“? Je to ±jeden řádek tak jak tak, a aspoň stačí vidět jen jeden soubor…
zelvuska marked this conversation as resolved
ledoian reviewed 2022-12-19 23:06:57 +01:00
@ -238,4 +266,2 @@
def hodnoceniReseniView(request, pk, *args, **kwargs):
reseni = get_object_or_404(m.Reseni, pk=pk)
template_name = 'odevzdavatko/detail.html'
form_class = f.OhodnoceniReseniFormSet
Owner

Tohle zmizelo proč? (Na první pohled to vypadá jako velmi podezřelá změna, ale ještě jsem nedočetl zbytek kódu…)

Tohle zmizelo proč? (Na první pohled to vypadá jako velmi podezřelá změna, ale ještě jsem nedočetl zbytek kódu…)
Owner

Dočetl jsem a tuhle změnu pořád nechápu.

Dočetl jsem a tuhle změnu pořád nechápu.
Author
Owner

Protože se to tam vůbec nepoužívalo?

Protože se to tam vůbec nepoužívalo?
Author
Owner

Já vůbec nechápu proč to tam bylo…

Já vůbec nechápu proč to tam bylo…
Owner

LOL aha. Já čekal, že se ten template vykresluje, ale on je tam redirect, tak je to jedno. Budiž :-)

LOL aha. Já čekal, že se ten template vykresluje, ale on je tam redirect, tak je to jedno. Budiž :-)
ledoian marked this conversation as resolved
ledoian reviewed 2022-12-19 23:10:04 +01:00
@ -193,0 +209,4 @@
if prezdivka_resitele == '':
return prezdivka_resitele
try:
Resitel.objects.get(prezdivka_resitele=prezdivka_resitele)
Owner

Tohle velmi zní, jako že ta přezdívka prostě nejde editovat vůbec – pokud už v databázi jsem, tak tohle matchne.

Tohle velmi zní, jako že ta přezdívka prostě nejde editovat vůbec – pokud už v databázi jsem, tak tohle matchne.
Author
Owner

?

?
Owner

Pokud si Alice nastaví přezdívku „Axolotl“, tak ji má v databázi. Dotaz Restitel.objects.get(prezdivka=Axolotl) tedy tuto přezdívku najde a celý ResitelEditForm kvůli tomu nepůjde Alici odeslat, přestože je to její přezdívka.

Pokud si Alice nastaví přezdívku „Axolotl“, tak ji má v databázi. Dotaz `Restitel.objects.get(prezdivka=Axolotl)` tedy tuto přezdívku najde a celý `ResitelEditForm` kvůli tomu nepůjde Alici odeslat, přestože je to její přezdívka.
Author
Owner

Promiň, tvůj komentář jsem pochopil jinak. Samozřejmě tohle je špatně… Dík

Promiň, tvůj komentář jsem pochopil jinak. Samozřejmě tohle je špatně… Dík
Author
Owner

Ha, já nevím, podle čeho určit, který řešitel to edituje…

Ha, já nevím, podle čeho určit, který řešitel to edituje…
Owner

A nestačí to prostě uložit a zjistit, jestli to vyšlo? (Dost možná nestačí, nemám nastudovanou interakci formů a modelů, ale kdyby to stačilo, tak je to zdaleka nejjednodušší…)

A nestačí to prostě uložit a zjistit, jestli to vyšlo? (Dost možná nestačí, nemám nastudovanou interakci formů a modelů, ale kdyby to stačilo, tak je to zdaleka nejjednodušší…)
Author
Owner

A poznáš, co selhalo? A přijde mi, že tohle by mělo být ještě v clean_…

A poznáš, co selhalo? A přijde mi, že tohle by mělo být ještě v clean_…
Author
Owner

Vyřešeno. Ten objekt má při použití nastavený username…

Vyřešeno. Ten objekt má při použití nastavený username…
zelvuska marked this conversation as resolved
ledoian reviewed 2022-12-19 23:11:54 +01:00
@ -193,0 +212,4 @@
Resitel.objects.get(prezdivka_resitele=prezdivka_resitele)
raise forms.ValidationError('Přezdívka je již použita')
except ObjectDoesNotExist:
pass
Owner

Reálně se celý try-block snaží jen imitovat podmínku „pokud přezdívka není zabraná“ – je přehlednější to vyřešit spíš něčím jako if m.Resitel.objects.….count() > 0: raise Exception() (ne nutně na jednom řádku a s určitě s příslušnými třídami a doplněními).

Reálně se celý try-block snaží jen imitovat podmínku „pokud přezdívka není zabraná“ – je přehlednější to vyřešit spíš něčím jako `if m.Resitel.objects.….count() > 0: raise Exception()` (ne nutně na jednom řádku a s určitě s příslušnými třídami a doplněními).
zelvuska marked this conversation as resolved
ledoian reviewed 2022-12-19 23:12:25 +01:00
@ -12,3 +12,3 @@
</p>
<p class="gdpr">
Veřejně vystavujeme pouze výsledkové listiny, které také uchováváme pro archivní účely. Pokud ale z nějakého důvodu nebudeš chtít mít své jméno či školu uvedené ve výsledkové listině, není problém to zařídit, napiš nám. Z tištěných materiálů samozřejmě údaje už odstranit nemůžeme.
Veřejně vystavujeme pouze seznam přezdívek (pro výběr spoluřešitelů k řešení) a výsledkové listiny, které také uchováváme pro archivní účely. Pokud ale z nějakého důvodu nebudeš chtít mít své jméno či školu uvedené ve výsledkové listině, není problém to zařídit, napiš nám. Z tištěných materiálů samozřejmě údaje už odstranit nemůžeme.
Owner

👍

👍
zelvuska marked this conversation as resolved
zelvuska added 1 commit 2022-12-19 23:12:49 +01:00
zelvuska added 1 commit 2022-12-19 23:39:52 +01:00
zelvuska added 1 commit 2022-12-19 23:52:19 +01:00
zelvuska added 1 commit 2022-12-19 23:55:33 +01:00
Owner

Bug: Pokud někdo už odmaturoval, tak sice on nemůže poslat řešení, ale někdo jiný tohoto člověka může přidat do svého řešení podle přezdívky. (Repro: nastavit řešiteli r1 přezdívku a jako r řešení poslat. r1 je odmaturovaný a už poslat řešení nemůže, ale tohle projde.)

Bug: Pokud někdo už odmaturoval, tak sice on nemůže poslat řešení, ale někdo jiný tohoto člověka může přidat do svého řešení podle přezdívky. (Repro: nastavit řešiteli `r1` přezdívku a jako `r` řešení poslat. `r1` je odmaturovaný a už poslat řešení nemůže, ale tohle projde.)
zelvuska added 1 commit 2022-12-20 12:29:30 +01:00
zelvuska added 1 commit 2022-12-20 12:41:05 +01:00
zelvuska added 1 commit 2022-12-20 14:26:54 +01:00
zelvuska added 1 commit 2022-12-20 14:29:12 +01:00
zelvuska reviewed 2022-12-20 14:37:59 +01:00
zelvuska left a comment
Author
Owner

Řešíme rozsekání.

Řešíme rozsekání.
zelvuska reviewed 2022-12-20 14:39:11 +01:00
@ -69,0 +18,4 @@
</p>
{% else %}
<p>Řešitelé: {{ object.resitele.all | join:", " }}</p>
{% endif %}
Author
Owner

Pardon, snažil jsem se nějak dostat sem do konverzace aktuální stav těch 5 řádků, ale asi to neumím.

Pardon, snažil jsem se nějak dostat sem do konverzace aktuální stav těch 5 řádků, ale asi to neumím.
zelvuska marked this conversation as resolved
zelvuska merged commit 3110eb92a5 into master 2023-01-02 20:25:01 +01:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 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#13
No description provided.