Vylepšení odevzdávátka #13

Merged
zelvuska merged 17 commits from vylepseni_odevzdavatka into master 2 years ago
zelvuska commented 2 years ago
Owner
There is no content yet.
zelvuska added 2 commits 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
Poster
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 2 years ago
zelvuska changed title from WIP: Vylepšení odevzdávátka to Vylepšení odevzdávátka 2 years ago
Poster
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?
Poster
Owner

Ano prosím :)

Ano prosím :)
auburn reviewed 2 years ago
).exclude(
prezdivka_resitele=""
).filter(
prezdivka_resitele__startswith=self.q
auburn commented 2 years ago
Poster
Owner

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

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

asi …__icontains=self.q

asi `…__icontains=self.q`
zelvuska marked this conversation as resolved
auburn reviewed 2 years ago
function zkontroluj_hodnoceni() {
const pocet = $('.hodnoceni').length;
if (pocet === 1) { // vydím pouze plusko
auburn commented 2 years ago
Poster
Owner

i

i
zelvuska marked this conversation as resolved
zelvuska added 1 commit 2 years ago
ledoian reviewed 2 years ago
qs = m.Resitel.objects.filter(
prezdivka_resitele__isnull=False
).exclude(
prezdivka_resitele=""
Poster
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`?
Poster
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 2 years ago
prezdivka_resitele=""
).filter(
prezdivka_resitele__icontains=self.q
).all()
Poster
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…)
Poster
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 2 years ago
ledoian reviewed 2 years ago
<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>
Poster
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…
Poster
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?
Poster
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…
Poster
Owner

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

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

LGTM

LGTM
Poster
Owner

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

Za mě všechno, nasekáš to?
Poster
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…)
Poster
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…
Poster
Owner

Co takhle?

Co takhle?
Poster
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.
Poster
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í…).
Poster
Owner

Nebo mě ještě napadlo tohle…

Nebo mě ještě napadlo tohle…
Poster
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ů
Poster
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 2 years ago
</tr>
{% endfor %}
</table>
{% endif %}
Poster
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ý…
Poster
Owner

A jak to vypadá?

A jak to vypadá?
Poster
Owner

LGTM

LGTM
ledoian marked this conversation as resolved
ledoian reviewed 2 years ago
<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>
Poster
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 2 years ago
return ctx
def check_access(self):
""" Na orga máme nároky už v urls.py """
Poster
Owner

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

Tohle nemá být docstring, ale komentář.
zelvuska marked this conversation as resolved
ledoian reviewed 2 years ago
def check_access(self):
""" Na orga máme nároky už v urls.py """
pass
Poster
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 2 years ago
def hodnoceniReseniView(request, pk, *args, **kwargs):
reseni = get_object_or_404(m.Reseni, pk=pk)
template_name = 'odevzdavatko/detail.html'
form_class = f.OhodnoceniReseniFormSet
Poster
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…)
Poster
Owner

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

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

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

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

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

Já vůbec nechápu proč to tam bylo…
Poster
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 2 years ago
if prezdivka_resitele == '':
return prezdivka_resitele
try:
Resitel.objects.get(prezdivka_resitele=prezdivka_resitele)
Poster
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.
Poster
Owner

?

?
Poster
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.
Poster
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
Poster
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…
Poster
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šší…)
Poster
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_…
Poster
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 2 years ago
Resitel.objects.get(prezdivka_resitele=prezdivka_resitele)
raise forms.ValidationError('Přezdívka je již použita')
except ObjectDoesNotExist:
pass
Poster
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 2 years ago
</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.
Poster
Owner

👍

👍
zelvuska marked this conversation as resolved
zelvuska added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
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 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska reviewed 2 years ago
zelvuska left a comment

Řešíme rozsekání.

zelvuska reviewed 2 years ago
</p>
{% else %}
<p>Řešitelé: {{ object.resitele.all | join:", " }}</p>
{% endif %}
Poster
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 2 years ago
The pull request has been merged as 3110eb92a5.
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This pull request currently doesn't have any dependencies.

Loading…
There is no content yet.