Upgrade odevzdavatka #30

Merged
zelvuska merged 37 commits from upgrade_odevzdavatka into master 2023-06-19 20:48:30 +02:00
Owner

Pokus o to, udělat řešitelům lepší prostředí na odevzdávání (a víc je přesvědčit, aby dělali to co mají)…

Pokus o to, udělat řešitelům lepší prostředí na odevzdávání (a víc je přesvědčit, aby dělali to co mají)…
zelvuska added 9 commits 2023-05-16 00:18:09 +02:00
zelvuska added 1 commit 2023-05-16 13:27:22 +02:00
zelvuska added 1 commit 2023-05-22 21:19:10 +02:00
zelvuska added 1 commit 2023-05-22 21:23:05 +02:00
zelvuska added 2 commits 2023-05-22 21:54:24 +02:00
zelvuska added 2 commits 2023-05-22 22:28:44 +02:00
zelvuska added 2 commits 2023-05-23 01:10:50 +02:00
zelvuska added 2 commits 2023-05-23 01:40:05 +02:00
mam added 1 commit 2023-06-01 17:34:50 +02:00
zelvuska added 1 commit 2023-06-12 22:20:49 +02:00
zelvuska added 2 commits 2023-06-13 08:50:35 +02:00
This reverts commit 4a3f8c66
Už jsem se internetu správně zeptal a dostal odpověď: select2 bere parametry jako atributy data-camel-case-vec=cosi (stejné jako select2({camelCaseVec: cosi}))
zelvuska added 1 commit 2023-06-13 09:12:22 +02:00
zelvuska added 1 commit 2023-06-15 17:10:31 +02:00
zelvuska added 1 commit 2023-06-15 18:57:23 +02:00
zelvuska added 1 commit 2023-06-17 09:25:45 +02:00
ledoian reviewed 2023-06-19 18:51:06 +02:00
@ -90,0 +80,4 @@
# Seřadíme tak, aby ty s nadproblem==None byly dole (větší motivace tam naklikat konkrétní úlohy) a pak nějak rozumně.
# Tohle je řazení pro odevzdávátko, kde je definován nadproblém, proto je to v tomto ifu. (Jinde si to netroufám řadit)
qs = qs.order_by("nadproblem", "kod", "nazev")
qs = [problem for problem in qs if problem.hlavni_problem.id == nadproblem_id]
Owner

Tohle je možná lepší psát nějakým filterem (ať už QuerySetovým, nebo čistě pythonovým list(filter(lambda: ..., qs)) – není to úprava dat, jen filtrování, tak ať je to názornější.

(A přirozeně, pokud by to šlo tím QuerySetovým, tak to může být rychlejší, protože databáze není napsaná v Pythonu :-))

Tohle je možná lepší psát nějakým filterem (ať už QuerySetovým, nebo čistě pythonovým `list(filter(lambda: ..., qs))` – není to úprava dat, jen filtrování, tak ať je to názornější. (A přirozeně, pokud by to šlo tím QuerySetovým, tak to může být rychlejší, protože databáze není napsaná v Pythonu :-))
Author
Owner

No QuerySetovým to nejde, protože hlavni_problem není databázová věc… Nebo to jde nějak obejít?

No QuerySetovým to nejde, protože hlavni_problem není databázová věc… Nebo to jde nějak obejít?
Owner

Já si úplně nepamatuju, jestli to je nebo není DB věc :-) Takže holt klasickým pythoním filterem.

Já si úplně nepamatuju, jestli to je nebo není DB věc :-) Takže holt klasickým pythoním filterem.
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 18:56:42 +02:00
@ -1029,0 +1048,4 @@
"insitetree": true,
"parent": 23,
"sort_order": 52,
"title": "Nahrát řešení k nadproblému {{nadproblem_id}}",
Owner

Zatím jsem neviděl realizaci, ale pojem „nadproblém“ bych nepsal nikam, kde ho můžou vidět řešitelé. Přijde mi dost matoucí i pro orgy, ale ti se aspoň mají koho zeptat :-)

Zatím jsem neviděl realizaci, ale pojem „nadproblém“ bych nepsal nikam, kde ho můžou vidět řešitelé. Přijde mi dost matoucí i pro orgy, ale ti se aspoň mají koho zeptat :-)
Author
Owner

Tohle políčkoje skryté, takže ho vidí jen pokud budou prohlížet html. To mi přijde dostatečně „ne můžou vidět“.

Tohle políčkoje skryté, takže ho vidí jen pokud budou prohlížet html. To mi přijde dostatečně „ne můžou vidět“.
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 18:58:19 +02:00
@ -1263,0 +1277,4 @@
.select2multiple .select2-results__option--highlighted {
background-color: #e84e10 !important;
}
Owner

Přemýšlím, kde všude jsou Select2Multiple, jestli je to nerozbíjí. Ale snad ne.

Přemýšlím, kde všude jsou Select2Multiple, jestli je to nerozbíjí. Ale snad ne.
Author
Owner

Tak tohle je jen tam, kam jsme explicitně přidali 'data-dropdown-css-class': 'select2multiple'. Spíš si teď naopak říkám, že ta barva možná měla být bez toho .select2multiple

Tak tohle je jen tam, kam jsme explicitně přidali `'data-dropdown-css-class': 'select2multiple'`. Spíš si teď naopak říkám, že ta barva možná měla být bez toho `.select2multiple`
Owner

Měl jsem na mysli obecně všechny Select2Multiple, nemělo se to týkat jen barvy…

Barva asi může být všude (v Adminu tyhle styly stejně nepoužíváme, ne?)

Měl jsem na mysli obecně všechny Select2Multiple, nemělo se to týkat jen barvy… Barva asi může být všude (v Adminu tyhle styly stejně nepoužíváme, ne?)
Author
Owner

No ale tohle neovlivňuje všechny selecty. Tohle ovlivňuje jen ty, kterým tu třídu předhodíme…

No ale tohle neovlivňuje všechny selecty. Tohle ovlivňuje jen ty, kterým tu třídu předhodíme…
Author
Owner

A barvu bych tedy dal všude…

A barvu bych tedy dal všude…
Owner

Třída .select2multiple je naše? Tak bych ji tím pádem pojmenoval nějak aspoň parciálně česky, myslel jsem, že hackujeme nějakou vestavěnou. (Uznávám, nečetl jsem kód moc pozorně…)

Možná .s2m-se-zaskrtavatky?

Třída `.select2multiple` je naše? Tak bych ji tím pádem pojmenoval nějak aspoň parciálně česky, myslel jsem, že hackujeme nějakou vestavěnou. (Uznávám, nečetl jsem kód moc pozorně…) Možná `.s2m-se-zaskrtavatky`?
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:04:37 +02:00
@ -35,0 +47,4 @@
<hr>
<h4>Spolupráce s&nbsp;dalšími řešiteli</h4>
<p>Pokud řešíte ve více lidech, je <strong>potřeba</strong> přidat tyto lidi jako „Další autoři“. V&nbsp;tomto poli se vyhledává podle přezdívek, které si lze nastavit v&nbsp;„Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze <strong>jednou</strong> (ne každý sám).</p>
Owner

„Další auto__ry__“

„Další auto__ry__“
Owner

„Osobní__ch__ údaj__ích__“

„Osobní__ch__ údaj__ích__“
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:09:11 +02:00
@ -399,12 +399,27 @@ class PosliReseniView(LoginRequiredMixin, FormView):
return data
class NahrajReseniNadproblemView(LoginRequiredMixin, ListView):
Owner

Možná lepší pojmenovat ve stylu NahrajReseniRozcestnikTematekView nebo NahrajReseniVyberHlavnihoProblemuView, nebo dokonce OdevzdavatkoVyberTematkaView? Tady se žádné řešení nenahrává, a technicky to ani není nadproblém, ale hlavní problém (bo i nadproblém může mít nadproblém, teoreticky).

Možná lepší pojmenovat ve stylu `NahrajReseniRozcestnikTematekView` nebo `NahrajReseniVyberHlavnihoProblemuView`, nebo dokonce `OdevzdavatkoVyberTematkaView`? Tady se žádné řešení nenahrává, a technicky to ani není nadproblém, ale hlavní problém (bo i nadproblém může mít nadproblém, teoreticky).
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:16:52 +02:00
@ -408,2 +421,4 @@
# Zaříznutí starých řešitelů:
# FIXME: Je to tady dost naprasené, mělo by to asi být jinde…
Owner

Tohle FIXME se vztahuje IMHO i na zaříznutí nezadaných problémů… Teď bych to asi neřešil, ale možná ho dává smysl přesunout výš…

(.get() není funkce, která by měla za úkol řešit jakákoliv práva, takže by to sémanticky mělo být někam vyčleněno. Ale pořád nemám rozmyšleno / nastudováno kam…)

Tohle FIXME se vztahuje IMHO i na zaříznutí nezadaných problémů… Teď bych to asi neřešil, ale možná ho dává smysl přesunout výš… (`.get()` není funkce, která by měla za úkol řešit jakákoliv práva, takže by to sémanticky mělo být někam vyčleněno. Ale pořád nemám rozmyšleno / nastudováno kam…)
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:18:43 +02:00
@ -418,2 +433,4 @@
return super().get(request, *args, **kwargs)
def get_initial(self):
nadproblem_id = self.kwargs["nadproblem_id"]
Owner

Nechceme ten nadproblém rovnou uložit jako Problém do self? Na první čtení jsem tady měl pocit, že když mi někdo předhodí blbost do URL, že někde něco musí spadnout…

Nechceme ten nadproblém rovnou uložit jako Problém do `self`? Na první čtení jsem tady měl pocit, že když mi někdo předhodí blbost do URL, že někde něco musí spadnout…
Owner

Užitečnost uložení přímo Problemu je i v tom, že pak podproblémy můžeš určit jako nadproblem.podproblemy.count() > 0 o kus níž (v rychlosti nevidím, jestli related managers umí i .exists())

Disclaimer: kód haluzím, nechtělo se mi to hledat přesně :-)

Užitečnost uložení přímo Problemu je i v tom, že pak podproblémy můžeš určit jako `nadproblem.podproblemy.count() > 0` o kus níž (v rychlosti nevidím, jestli related managers umí i `.exists()`) Disclaimer: kód haluzím, nechtělo se mi to hledat přesně :-)
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:26:36 +02:00
@ -420,0 +436,4 @@
nadproblem_id = self.kwargs["nadproblem_id"]
return {
"nadproblem_id": nadproblem_id,
"problem": [] if m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY, nadproblem__id=nadproblem_id) else nadproblem_id
Owner

Uh, tohle dělá co? Ať už to dělá cokoliv, tak to z toho není zřejmé. Zejména není samozřejmé, kdy je QuerySet falsey.

Po chvíli čtení: když to má podproblémy, tak nic nenabízíme, jinak nabídneme tu věc přímo.

Buď bych za ten QuerySet aspoň přidal .exists() (Dokumentace), nebo úplně vyčlenil:

...
ma_podproblemy = QuerySet.exists()
...
return {
	...
    "problem": [] if ma_podproblemy else nadproblem_id,
    ...
    }
Uh, tohle dělá co? Ať už to dělá cokoliv, tak to z toho není zřejmé. Zejména není samozřejmé, kdy je `QuerySet` falsey. Po chvíli čtení: když to má podproblémy, tak nic nenabízíme, jinak nabídneme tu věc přímo. Buď bych za ten QuerySet aspoň přidal `.exists()` ([Dokumentace](https://docs.djangoproject.com/en/3.2/ref/models/querysets/#exists)), nebo úplně vyčlenil: ```python3 ... ma_podproblemy = QuerySet….exists() ... return { ... "problem": [] if ma_podproblemy else nadproblem_id, ... } ```
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:33:52 +02:00
@ -12,3 +12,3 @@
<a href="{% url 'logout' %}">Odhlásit se</a><br>
<a href="{% url 'seminar_resitel_edit' %}">Upravit údaje</a><br>
<a href="{% url 'seminar_nahraj_reseni' %}">Poslat řešení</a><br>
<a href="{% url 'seminar_nahraj_reseni' %}">Nahrátí řešení</a><br>
Owner

„Nahrát “ bez í asi

„Nahrát “ bez í asi
zelvuska marked this conversation as resolved
ledoian reviewed 2023-06-19 19:38:07 +02:00
@ -678,3 +679,3 @@
# Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí)
def formularOKView(request, text=''):
def formularOKView(request, text='', dalsi_odkazy: Iterable[tuple[str, str]] = ()):
Owner

V zájmu bezpečnosti bych možná spíš než Iterable použil Sequence, tj. věc, kde mají věci dané pořadí (množina a slovník jsou Iterable, ale ne Sequence; asi chceme, aby to pořadí, co tady napíšeme, se dodrželo.)

Ne že by někdo aktuálně moc kontroloval typy, ale třeba jednou bude :-D

V zájmu bezpečnosti bych možná spíš než `Iterable` použil `Sequence`, tj. věc, kde mají věci dané pořadí (množina a slovník jsou Iterable, ale ne Sequence; asi chceme, aby to pořadí, co tady napíšeme, se dodrželo.) Ne že by někdo aktuálně moc kontroloval typy, ale třeba jednou bude :-D
zelvuska marked this conversation as resolved
Owner

Za mě asi vesměs dobrý. Koukal jsem hlavně na kód, snažil jsem se ho udělat trochu přehlednější, vyloženě blbosti tam asi nevidím…

Za mě asi vesměs dobrý. Koukal jsem hlavně na kód, snažil jsem se ho udělat trochu přehlednější, vyloženě blbosti tam asi nevidím…
zelvuska added 3 commits 2023-06-19 20:13:13 +02:00
zelvuska added 3 commits 2023-06-19 20:25:02 +02:00
Owner

Jen pojmenovávací poznámka: objekt v Pythonu má atributy a metody, property je taková ta divná metoda, co se chová jako atribut. (Rychlý pokus v IPythonu mi naznačuje, že nemůžu mít property mimo třídu.)

Jen pojmenovávací poznámka: objekt v Pythonu má atributy a metody, property je taková ta divná metoda, co se chová jako atribut. (Rychlý pokus v IPythonu mi naznačuje, že nemůžu mít property mimo třídu.)
Author
Owner

Díky :)

Díky :)
zelvuska added 2 commits 2023-06-19 20:32:29 +02:00
zelvuska added 1 commit 2023-06-19 20:46:28 +02:00
zelvuska merged commit 0528dbbb9c into master 2023-06-19 20:48:30 +02:00
zelvuska deleted branch upgrade_odevzdavatka 2023-06-19 20:48:37 +02: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#30
No description provided.