Django, testy, fixtůry a posraté rekurze

Psát testy je pruda. O to větší, když po dvouhodinové přípravě ku*va-fix tur spustíte test a výstup v konzoli je plný hlášek typu:

Exception RuntimeError: 'maximum recursion depth exceeded in *' in  ignored

(za * si dosaďte cokoli vás napadne)

Kura co to je? Google neporadí (teda ne přímo), ve výstupu absolutně nedopátratelné z kama vítr vane. Tak až se vám podobná situace namane, vězte, že chyba není ve vás. To je útěcha co?

Django (či Python?) nemá rádo velké, navzájem do sebe propletené fixtury. V mém případě měl JSON něco okolo 2000 řádek s celkem 70 objekty z nejrůznějších modelů. V naprosté zoufalosti jsem tuto jednu “obřímí” fixturu rozbil na menší a hle, po recursion mrdce ni vidu, ni slechu.

No ale přeci nepodlehnu takové blbosti. Nechci mít jednu fixturu rozbitou na deset menších!

Google tentokrát pomohl. Přidejte si do testu totok a pošlete mi pusu na dobrou noc:

import sys
sys.setrecursionlimit(2000)

PS: určo záleží na systému, pod kterým pracujete. Na mém OSX sněžném kočičákovi je defaultně recursionlimit nastaven na hodnotu 1500.

Žangovinky #29

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

Začněme blogy. Peter Bengtsson ve svém článku Local Django development with Nginx radí, jak na lokální mašině nakonfigurovat Nginx a využít jej k servírování statického obsahu (CSS, JS, obrázky). Ukazuje jednoduchý postup, kterým dosáhl zrychlení z původních 446.34 req/s na 15709.54 req/s, což se pozitivně projevilo během ladění Javascriptových kódu v prohlížeči.

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

  • Zásadní zpráva. Seznam autorů byl doplněn o Honzu Krále, jediného našince který se na vývoji Djanga aktivně podílí. Gratulace! (a velké díky)
  • Od revize 14139 Django podporuje knihovnu unittest2, která mimo jiné přináší nové assert metody pro pohodlnější testování seznamů, slovníků nebo datetime objektů.
  • Třída TestCase byla doplněna o metodu assertNumQueries (revize 14183), s pomocí které je možné ověřit počet databázových dotazů generovaných zadaným kódem.
  • U testování ještě zůstaneme. Díky nové třídě RequestFactory (revize 14191) je možné vytvořit fake request objekt a ten v testu podsunout konkrétnímu view (čímž elegantně obejdeme pravidla v urls.py)

Poslední novinka se týká “class based views”, oficiálního začlenění views v podobě tříd (konečně!). Russell Keith-Magee sepsal letový plán, který by nám měl do Djanga 1.3 dopravit tuto vysněnou vlastnost. Držme palce.