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 4600×

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ů

1.12.2016 22:13 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.
Komentářů: 1

4.9.2016 20:13 /Pavel `Goldenfish' Kysilka
PR: Dne 22.9.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, provozování ERP v cloudu, o hostování různých typů softwaru, ale třeba i o zálohování dat nabízeném podnikům formou služby.
Přidat komentář

1.9.2016 11:27 /Honza Javorek
Česká konference o Pythonu, PyCon CZ, stále hledá přednášející skrz dobrovolné přihlášky. Máte-li zajímavé téma, neváhejte a zkuste jej přihlásit, uzávěrka je již 12. září. Konference letos přijímá i přednášky v češtině a nabízí pomoc s přípravou začínajícím speakerům. Řečníci mají navíc vstup zadarmo! Více na webu.
Přidat komentář

27.8.2016 8:55 /Delujek
Dnes po 4 letech komunitního vývoje vyšla diaspora 0.6.0.0
diaspora* je open-source, distribuovaná sociální síť s důrazem na soukromý
Více v oficiálním blog-postu
Přidat komentář

24.8.2016 6:44 /Ondřej Čečák
Poslední týden CFP LinuxDays 2016; pokud byste rádi přednášeli na LinuxDays 2016 8. a 9. října v Praze, můžete svůj příspěvek přihlásit, následovat bude veřejné hlasování.
Přidat komentář

9.8.2016 22:56 /Petr Ježek
Zařazení souborového systému reiser4 do jádra 4.7 znamená konečně konec patchování jádra jen kvůli možnosti použít reiser4.
Přidat komentář

12.7.2016 13:14 /František Kučera
Spolek OpenAlt zve na 130. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 21. července od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

11.7.2016 16:53 /Redakce Linuxsoft.cz
Konference LinuxDays hledá přednášející. Přihlášky poběží do konce prázdnin, v září bude hlasování a program. Více na https://www.linuxdays.cz/2016/cfp/.
Přidat komentář

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

> Poslední diskuze

7.12.2016 8:10 / Hamon
scottish cottages

4.12.2016 22:54 / František Kučera
Dárek

9.11.2016 7:42 / Mane
hardwood floor waxing

8.11.2016 13:38 / Mira
Konfigurace maldet na Centos serveru

2.11.2016 11:06 / Warlock
Odkaz v PHP

Více ...

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