Release PoorWSGI je připraven k vydání

V tomto blog postu se pokusím zodpovědět na dvě nejdůležitější otázky, které si laskavý čtenář pythonista položí. Co to je PoorWSGI a proč jsem ho vůbec psal. Tedy do toho.

Co je PoorWSGI

PoorWSGI je WSGI konektor, knihovna, někdo by mohl říct framework, častěji, se ale používá midleware. Co tedy je ? Je to obal wsgi rozhraní, které poskytuje WSGI server. Rozhraní není třeba moc obalovat, v principu je velmi jednoduché, WSGI server vlastně zavolá funkci, nebo __call__ metodu instance třídy. Této funkci, nebo metodě předá prostředí, což je slovník, často shodný s os.environment a funkci, kterou se zahajuje odpověď. Více si můžete přečíst v příslušném PEP dokumentu.


PoorWSGI stejně jako jiné obdobné projekty nad touto jednoduchou funkčností vytváří ucelený mechanismus obslužných handlerů nebo callbacků, které obsluhují příslušné url adresy. To je v podstatě vše.


Dřív byl PoorWSGI konektor psán s cílem vytvořit kompatibilní rozhraní k mod_pythonu. Díky tomu by pak vývojáři mohli svůj projekt snadno migrovat z mod_pythonu. Tuto původní myšlenku projekt neopustil, resp. já jako autor jsem tuto myšlenku neopustil. Bylo ale nutné projekt náležitě modernizovat, tak abych jej mohl sám pohodlně používat, a aby ho mohli používat i ostatní vývojáři. Více o těchto myšlenkách se můžete dočít v předchozím blog postu o PoorWSGI.


Co, resp. čím je PoorWSGI dnes ?

V současné době se v GIT repositáři projektu nachází druhý release kandidát výsledné python knihovy, jenž nazývám konektorem. Sám nepovažuji projekt za framework. To je dle mého robustní knihovna, která umožňuje stavět aplikaci jako skládačku. Tím PoorWSGI rozhodně není. Na rozdíl od např. Flasku umí PoorWSGI opravdu jen napojit callbacky na ruzné stavy wsgi aplikace. Umí definovat obsluhu jak statických url, tak dynamických, definovaných pomocí regulárních výrazů, umí umožnit obsloužit běžné http metody, i http stavy včetně chybových stavů, jako 500 Internal Server Error.


K této funkčnosti používá do částečné míry kompatibilní objekt Request s mod_pythonem. Navíc, umí jen primitivní obsluhu adresářů a souborů tak, jak to výrazně lépe umí velké http servery a obsahuje třídu PoorSession, určenou pro práci s cookie, podobně snadno, jako to umí PHP a jeho SESSION. To vše umí v obou verzích pythonu, tedy jak ve verzi 2.x tak 3.x. A na závěr, snaží se nabídnout moderní api s dekorátory.


Modernizace proběhla po vzoru konkurence. Pokud tedy chcete prohlásit, že jsem opisoval, do toho, sám se k tomu přiznávám. Opisoval sem však jen do jisté míry a to pokud možno tak, aby starý kód buď byl plně kompatibilní, nebo alespoň co nejvíce kompatibilní. PoorWSGI tak vedle dekorátorů a variabilních url, nabízí i filtry, které můžete aplikovat na variabilní url a vyčítat tak proměnné přímo z url. Dále automaticky parsuje argumenty z url, nebo z POST požadavaku. Nová funkčnost je však plně konfigurovatelná, a lze snadno ji nahradit vlastním řešením.


Co v PoorWSGI chybí ?

Pokud je otázka mířena na kód. Tak nic. Vlastně ano, jistě by si konektor zasloužil unit testy. A osobně se mi moc líbí funkční autoreload, který má Flask. Více bych do konektoru nerad přidával. Ano zajisté se najde nějaká malá funkce, která se hodí, a objekt v mod_pythonu ji měl. Možná lze nějaký kus kódu optimalizovat. Další rozvoj se však bude týkat stávající funkčnosti. Žádné šablonovací nástroje, žádné spojení do DB nebo něco podobného. Konektor byl od začátku navržen jako malá knihovna, taková, která nebude zbytečně zdržovat. Pokud hledáte komplexní framework, PoorWSGI jím rozhodně není a nebude.


Proč další WSGI midleware ?

Dobrá otázka. A proč ne ? :) Ne mým záměrem opravdu nebylo plýtvat časem, nebo vynalézat kolo. Na druhou stranu, také vynalézání kola Vám přinese někdy daleko více, než by jste čekali.


V době, kdy sem na tomto projektu začal pracovat, jsem prostě žádný ekvivalent, který bych mohl použít neznal. Prostě se mi do ruky nedostalo nic, co bych chápal a dokázal použít. Navíc k mé smůle, má první zkušenost s pythonem na webu, byla právě s mod_pythonem. To bylo zejména proto, že v té době provozovat python aplikace, byla pro mě trochu španělská vesnice a nenažraný Apache byl všude. Začal jsem tedy pátrat, jak mod_python obejít. Našel jsem WSGI a začal si s ním hrát. A protože jsem mezi tím už stihl napsat nějaké weby v mod_pythonu, první kroky byly právě ke kompatibilitě.


Po relativně krátkém čase vznikl celý HTTP-WSGI server napsaný v pythonu. A ano, vím že tohle už tu je: Cherrypy. Ten však byl na můj vkus až moc hotový http server. Začal jsem tedy stavět weby nad mým serverem lehkým HTTP-WSGI serverem. Kompatibilita s mod_pythonem přinesla své ovoce a já začal v pythonu psát další weby. Díky tomu že z hostingového hlediska je mod_wsgi od Googlu zcela nepoužitelný, můj PoorHTTP byl výbornou konkurencí.


A jak šel čas, já zatoužil oddělit HTTP vrstvu od WSGI, a projekt se rozštěpil do dvou samostatných celků. PoorHTTP zůstal dál, a je možné jej použit jako HTTP-WSGI server. Je to vlastně jen obal nad WSGIServerem z Pythonu. Jen obohacený o takové ty maličkosti jako pid soubor, logy, přepnutí na jiného uživatele než je root atd. No a nově vzniknuvší PoorWSGI je samostatným WSGI midlwarem, který je otestován s mod_wsgi od Googlu, s uWsgi serverem a samozřejmě s PoorHTTP.


A dál ?

Suma sumárum, jsem věnoval tomu kódu hodně času. Jeho kvalitu Však musí posoudit někdo jiný. Protože jej používám v několika fungujících webech, nechce se mi jej smazat, a prohlásit jej za slepou kolej. Byť dnes již znám i malé knihovny, které bych nejspíš použil, kdybych si ji nenapsal sám. Cíl tedy bylo jej zmodernizovat, dokončit, odladit a vydat. Díky němu jsem se naučil spoustu zajímavých a užitečných věcí a navíc, líbí se mi ta myšlenka, že Request objekt je vstupem každé obslužné funkce, než aby to byl globálně přístupný objekt.


Zbývá jen odkaz na nejdůležitější zdoj informací o projektu. Tím jsou samozřejmě stránky poohttp.zeropage.cz, kde jsou všechny důležité informace a to včetně dokumentace k API a několika příkladů sepsaných do krátkého tutoriálu. A jako vždy, budu rád za všechny reakce, i ty špatné a o to více budu rád za libovolnou pomoc, ať už s testováním, s opravami v kódu, nebo v dokumentaci.

Autor:

Diskuze

Váš komentář:

© 2023 Ondřej Tůma McBig. Ondřej Tůma | Based on: Morias | Twitter: mcbig_cz | RSS: články, twitter