LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Poor Http / Publisher: dispatch_table.py

V dnešním článku si rozebereme možnosti souboru dispatch_table.py, který je vyžadován a používán pythonovským rozhraním Poor Publisher, resp. serverem Poor Http, dále dohromady jen Poor API.

22.6.2011 00:00 | Ondřej Tůma | Články autora | přečteno 2338×

Jak již bylo ukázáno v minulém článku, je soubor dispatch_table.py základním souborem při použití Poor API.

handlers

Jedinou podmíněnou komponentou souboru dispatch_table.py je slovník handlers. Ten pak musí obsahovat pár metoda a tuple typ metody a funkce, která metodu obslouží. Funkce v parametru dostane objekt Request. Zřejmé to bude z ukázky:

handlers = {
    '/'             : (http.METHOD_GET, index),
    '/login'        : (http.METHOD_GET, login),
    '/dologin'      : (http.METHOD_POST, dologin),
    '/dologout'     : (http.METHOD_GET_POST, dologout),
}

Typ METHOD_GET_POST značí, že metoda aplikace bude obsloužena jak v případě GET tak POST požadavku. V případě že nějaká metoda aplikace má nastavený pouze typ METHOD_POST, nebude obsloužena GET požadavkem a server vrátí chybu 404 Not Found. Z výše popsaného také vyplývá, že každý typ požadavku může být obsloužen jinak. Například metoda / může mít obsluhu na typ METHOD_HEAD, která bude jen testovat ostatní komponenty aplikace, třeba spojení do databáze.

errors

Slovník errors je nepovinný a musí obsahovat páry http_chyba, funkce obsluhy chyb. Stejně jako funkce obsluhující metodu aplikace, i funkce obsluhující http chybu dostávají v parametru objekt Request. Tento slovník se tedy používá, chceme-li obsloužit chybové stavy aplikace vlastními stránkami. V případě, že potřebujeme rozlišit obsluhu různých druhů výjimek v aplikaci, můžeme v handleru chyby 500 testovat hodnotu sys.exc_type.

errors = {
    http.HTTP_INTERNAL_SERVER_ERROR : my_internal_server_error,
    http.HTTP_NOT_FOUND : my_page_not_found,
}

Definice vlastního chybového handleru zpracovávající status 500 Internal Server Error:

def my_internal_server_error(req):
    req.status = HTTP_INTERNAL_SERVER_ERROR
 
    if sys.exc_type == exceptions.MemoryError:
        req.write(„problem s pameti”)
    elif sys.exc_type == exceptions.TypeError:
        req.write(„divny typ”)
    else:
        req.write(„Proste chyba”)

    return DONE

setreq

Funkce setreq pokud je v souboru dispatch_table.py definována, je volána před každou obsluhou http požadavku, tedy ještě dříve než je známa informace, zda tento požadavek může být vůbec obsloužen. Tato funkce se hodí například na zpracování konfigurace, případě před-vypočítání nějakých hodnot. Stejně jako ostatní handlery (obsluhující funkce) i tento dostává v parametru objekt Request.

init = False
re_mail = None

def setreq(req):
    global re_mail
    global init

    if not init:
        re_mail = re.compile("^[a-z0-9\-_\.]+@[a-z0-9\-_\.]+$")

        req.log_error('Reinicalizace ...', http.LOG_DEBUG)
        init = True
    #endif

    req.re_mail = re_mail
#enddef

V ukázce je využíváno situace, kdy apache je puštěn v režimu prefork, nebo poor http v režimu single příp. thread. Tyto režimy importují soubor dispatch_table.py jen jednou, případně jednou za N požadavků. Díky tomu je možné v jeho namespace nastavit nějaké proměnné, které pak zjišťují poslední stav, a jeli to třeba provedou příslušnou inicializaci. Zkompilování regulárního výrazu je samozřejmě jen příklad, protože to se může dít přímo v souboru mimo jakou-koli funkci. Po testování této funkce, se v při různých režimech serveru objeví v logu hlášení o reinicializaci různě často.

Soubor dispatch_table.py samozřejmě může obsahovat i jednotlivé funkce, nebo chcete-li handlery. Ty je však vhodné dát do jiných souborů. Z tohoto textu bude vycházet i připravovaná dokumentace, budu proto velmi rád, pokud jej budete připomínkovat v diskuzi pod článkem.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

24.5.2013 6:42 /MaReK Olšavský
V rodině Arduina je nový přírůstek, Arduino Yún („Yún“ je čínsky „mrak“). Nové Arduino je nejen první s GNU/Linuxem, ale nabízí i WiFi konektivitu.
Přidat komentář

24.5.2013 6:42 /MaReK Olšavský
Na stránkách OMG! Ubuntu! vyšel krátký rozhovor s Markem Shuttleworthem. Tématy jsou Mir, Unity 8, budoucnost Ubuntu Touch, ale neunikl ani otázce na Windows 8.
Přidat komentář

23.5.2013 6:20 /MaReK Olšavský
Lektoři, kteří používají e-learning, se již nejspíše setkali s platformou Moodle, jejíž vývojáři vydali verzi 2.5 populární platformy. Vedle několika stovek drobných vylepšení přibyly i novinky v mobilním přístupu, podpora twitterovského Bootstrapu pro témata, nebo instalace pluginů přes administrátorskou část webového rozhraní.
Přidat komentář

23.5.2013 6:20 /MaReK Olšavský
Nová distribuce Pidora by měla zajímat Fedoristy, kteří mají Raspberry-Pi, jelikož je optimalizovaným spinem právě pro tuto platformu. Novinky Pidory shrnul Rick Lehrbaum .
Přidat komentář

23.5.2013 6:20 /MaReK Olšavský
Krátce po vydání Debianu 7 vyšel i Debian GNU/Hurd 2013. Jádro GNU/Hurd se vyvíjí delší dobu, než Linux, ale zatím je spíše zajímavostí, protože jádro Linux se etablovalo u velkých společností a změna kurzu je více než nepravděpodobná.
Přidat komentář

22.5.2013 6:46 /MaReK Olšavský
Svobodný software ve státní sféře nejsou jen vítězství, ale i mýty a pověry, které jej vylučují z výběru. 5 nejčastějších hloupostí o F/L/OSS zkritizoval Adam Firestone na stránkách OpenSource.com. Nesetkáváme se s podobnými argumenty i při snaze prosadit svobodný software ve firmách a u soukromých osob?
Přidat komentář

22.5.2013 6:46 /MaReK Olšavský
Embedovatelná databáze SQLite byla vydána ve verzi 3.7.17, která nabízí větší rychlost (v některých úlohách až dvojnásobnou), opravy několika chyb, nebo vylepšení možností nahrávání rozšíření. O SQLite se píše výrazně méně, než o konkurenci, ale velmi pravděpodobně jde o nejčastěji nasazené řešení, díky mnoha aplikacím.
Přidat komentář

22.5.2013 6:45 /MaReK Olšavský
14. května 2013 IBM oznámila konec vývoje Lotus SmartSuite , Lotus Organizer a Lotus 1-2-3, balíků aplikací, jež byly považovány za špičku v oboru. Krátký nekrolog za legendární Lotus 1-2-3, který byl vyvíjen 30 let, sepsal Steven J. Vaughan-Nichols.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

18.5.2013 17:55 / Martin Kumst
Re: zaheslování bash scriptu nebo složky

18.5.2013 7:44 / ---
Re: Prosím o pomoc či radu

15.5.2013 19:21 / Filip Vaněček
Cesty k souborům při používání coolurl

13.5.2013 6:50 / Radim Kolář
Zabbix

8.5.2013 6:07 / MaReK Olšavský
Web Upd8

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2013) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze | zákony online