Žangovinky #32

Komentovaný překlad Django Dose Community Catchup, Episode #32.

Během prosince se na svém blogu Seek Nuance pěkně rozepsal John DeRosa. V článku “A performance lesson on Django QuerySets” dokazuje, že bezmyšlenkovité nasazení QuerySet funkce iterator() přináší spoustu problémů. Menší paměťové nároky byly v jeho případě draze vykoupeny četností dotazů na databázi (co iterace to dotaz, navíc umocněné dvaceti simultánně spuštěnými Celery tasky).
V druhé polovině článku se zmiňuje o špatném pochopení vlastnosti QuerySetu, tj. že jsou lazy (k vyhodnocení dojde až je to nezbytně nutné) a kešované. Na praktické ukázce demonstruje, že každý vytvořený QuerySet generuje databázový dotaz, což v kontextu jeho kódu znamenalo neúměrné zatížení PostgreSQL.

David Cramer je masakrální drsoň. Pokaždé když něco publikuje, tak je to perla. A pokaždé mi trvá sakra dlouho, než pochopím o co jde.
Nejinak tomu je i v článku “Tracking changes to fields in Django”. Pokud jsem se někde šeredně nesek, tak nám dává k dispozici dekorátor, s jehož pomocí můžeme sledovat historické změny atributů u konkrétního modelu. Fachá to tak, že pokud např. obj.name == 'Petr' a přenastavíme jej na obj.name = 'Pavel', pak metoda obj.has_changed('name') vrátí True (atribut name se změnil), metoda obj.old_value('name') vrátí ‘Petr’ a metoda obj.whats_changed() nás podaruje slovníkem změněných atributů. Tato ultimátní “změnokeška” se resetuje při vytvoření instance a během uložení objektu.

Daniel Greenfeld rozvířil debatu o Template Languages. Ve svém postu hájí směr, který tvrdí že šablonovací jazyk musí být stupidní. Čím méně toho umí, tím lépe.
Reakce na sebe nenechaly dlouho čekat. Autoři alternativních šablonovací jazyků (Armin Ronacher — Jinja2, Mike Bayer — Mako) vysvětlují, proč toho jejich jazyky umí víc + jeden pohled zvenčí.

Špetka sci-fi z velkého světa (pro mě rozhodně). Pokud stejně jako chlapci z The Washington Times spravujete vícero serverů a začínáte mít binec v Python balíčcích (na serveru A verzi 1, na serveru B verzi 1.2 a na serveru C nic), může se vám šiknout jejich fabfile.py.

Poslední zpráva hodná zmínky: nedávno implementovaná unittest metoda assertNumQueries dráždila Luke Planta natolik, že pro ni napsal speciální pomocnou třídu FuzzyInt. S její pomocí je možné testovat počet SQL dotazů v zadaném intervalu. Jak Luke trefně komentuje, vlivem kešování se lehce stane, že počet SQL dotazů v aplikaci kolísá, a testovat je na exaktní počet přináší spíš problémy než užitek.

A teď něco úplně jiného. Novinky z chobotu:

  • Byly rozšířeny funkce mail_admins() a mail_managers(). Odteďka je možné k nim připínat HTML přílohy, čehož se hned využilo pro odesílání přítulnějších error emailů. 3× hurá!
  • Odskočme si do views, přesněji na jejich konce. Pokud nejste moc indie, budete tam mít buďto nějakou HttpResponse, render_to_response nebo generické view. Odteďka ale budeme potkávat nového kamaráda TemplateResponse. Ten dostal do vínku kopec lenosti, a obsah generuje až to je skutečně nutné. Díky této povaze bude např. možné změnit na poslední chvíli jméno šablony, nebo do ní poslat upravený či rozšířený kontext. Už se těším na prčovní middlewary, které z této vlastnosti vytěží maximum.

Poznámka: Kopa práce, těžká témata a blížící se vánoce. Výsledek? Žangovinky #31 nejsou a nebudou. Komu chybí, nechť opráší AČ slovník, a postne sem link.

Pěkné vánoce!