Upgrade odevzdavatka #30

Merged
zelvuska merged 37 commits from upgrade_odevzdavatka into master 2 years ago
zelvuska commented 2 years ago
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 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 added 2 commits 2 years ago
zelvuska added 2 commits 2 years ago
zelvuska added 2 commits 2 years ago
zelvuska added 2 commits 2 years ago
mam added 1 commit 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska added 2 commits 2 years ago
2ef3311bff Multiple select se nemají zavírat
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
ledoian reviewed 2 years ago
# 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]
Poster
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 :-))
Poster
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?
Poster
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 2 years ago
"insitetree": true,
"parent": 23,
"sort_order": 52,
"title": "Nahrát řešení k nadproblému {{nadproblem_id}}",
Poster
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 :-)
Poster
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 2 years ago
.select2multiple .select2-results__option--highlighted {
background-color: #e84e10 !important;
}
Poster
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.
Poster
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`
Poster
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?)
Poster
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…
Poster
Owner

A barvu bych tedy dal všude…

A barvu bych tedy dal všude…
Poster
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 2 years ago
<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>
Poster
Owner

„Další auto__ry__“

„Další auto__ry__“
Poster
Owner

„Osobní__ch__ údaj__ích__“

„Osobní__ch__ údaj__ích__“
zelvuska marked this conversation as resolved
ledoian reviewed 2 years ago
return data
class NahrajReseniNadproblemView(LoginRequiredMixin, ListView):
Poster
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 2 years ago
# Zaříznutí starých řešitelů:
# FIXME: Je to tady dost naprasené, mělo by to asi být jinde…
Poster
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 2 years ago
return super().get(request, *args, **kwargs)
def get_initial(self):
nadproblem_id = self.kwargs["nadproblem_id"]
Poster
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…
Poster
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 2 years ago
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
Poster
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 2 years ago
<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>
Poster
Owner

„Nahrát “ bez í asi

„Nahrát “ bez í asi
zelvuska marked this conversation as resolved
ledoian reviewed 2 years ago
# 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]] = ()):
Poster
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 2 years ago
zelvuska added 3 commits 2 years ago
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.)
Poster
Owner

Díky :)

Díky :)
zelvuska added 2 commits 2 years ago
zelvuska added 1 commit 2 years ago
zelvuska merged commit 0528dbbb9c into master 2 years ago
zelvuska deleted branch upgrade_odevzdavatka 2 years ago
The pull request has been merged as 0528dbbb9c.
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.