Poor WSGI modernizován

Pomalu se chystám vydat novou verzi Poor WSGI. Co mě k tomu vedlo a v jakém stavu projekt je a co s ním bude dál se pokusím rozebrat zde.

Historie PoorHttp

Na nových stránkách Poor WSGI jsem se (v angličtině) rozepsal, kde se vlastně Poor WSGI vzal. Má angličtina je, co si budu nalhávat, tragická, tak se pokusím to napsat ještě jednou zde, česky. Snad to bude lepší.


Kdysi dávno, podle data první verze to jsou čtyři roky, jsem hledal způsob jak psát webové aplikace v pythonu. Opouštěl jsem tehdy PHP, a tak libovolná cesta k pythonu byla lepší. PHPčkaři prominou, ale dokud neuvidíte co a jak se dá psát v pythonu, nepochopíte :) V té době, i když už na ústupu, byla jedna z možností použít mod_python. Já v té době používal uzavřenou knihovnu na mod_pythonu postavenou pro projekty zaměstnavatele. Logickým krokem tedy bylo, rozběhat i mod_python u sebe na serveru a začít. To se povedlo a vznikl tak Poor Publisher. Ten obsahoval primitivní a i na tehdejší dobu zastaralý způsob, jak obsluhovat určité url adresy.


Protože sem se koukal dál, a hledal nové možnosti a trendy, narazil sem celkem logicky na WSGI. Python má sám HTTP/WSGI server v sobě. Vytvořil sem tedy aplikaci, takový server, který měl pokud možno kompatibilní vrstvu právě s mod_pythonem. Vznikl tak PoorHttp. Ten byl proti apache serveru velmi efektivní a to i přes to, že byl vlastně celý napsán v pythonu.


Doba šla dál, já postupně pracoval na několika větších soukromých projektech a začal jsem pokukovat po způsobu, jak vlastně tyto aplikace provozovat na serveru. Shodou okolností sem narazil na jednu velmi zákeřnou chybu v mod_pythonu, díky které jsem byl prostě nucen, provozovat python aplikace jinak. Na PoorHttp v provozu nakonec nedošlo, protože sem objevil uWsgi. Malý, velmi výkonný WSGI server, který umí víc, než můj PoorHttp. Projekt sem tedy rozdělil a vznikl tak PoorHTTP a PoorWSGI.


Dnes běží na mém soukromém serveru několik instancí uWsgi serveru, které používají právě Poor WSGI. Projekt sem ale nijak zvlášť neobnovoval, starý, původní návrh zestárl o další léta a bylo třeba jej nahradit, modernizovat.

Poor WSGI dnes

Aktuálně je projekt přepsán do alespoň trochu použitelného stavu. Je to knihovna, jenž se snadno používá. Povinný prvek application je nyní instancí objektu, jenž má metodu __call__, díky které může být volána jako funkce. Obsahuje některé metody – dekorátory, díky kterým je snazší definovat obsluhu známých url aplikace, nebo třeba chybové stavy.


Díky tomu byl výrazně přepsán model routovací tabulky, byl rozšířen o nové možnosti a celý tak nějak dospěl alespoň do puberty. Ano s ostatními se ještě nemůže měřit, ale chová se teď moderněji a přeci jen víc tak, jak by asi měl. Z funkcionalit mu ještě schází obsluha url definovaných dle regulárních výrazů a jako třešnička na dortu, obsluha url dle regulárních výrazů, které dokáží získávat hodnoty z nalezených skupin. Například

@app.rroute('/article/\w+')		# obyčejný regulární výraz
def articles_handler(req):
    ...

@app.groute('/article/(?P<name>\w+)')	# regulární výraz s pojmenovanýma skupinama
def article_handler(req):
    name = req.path.name 		# nebo tak něco
    ...

Ještě to nemám v hlavě úplně usazené, jedna z možností jak by se to mohlo chovat, že vytvořím nějaký velmi primitivní zápis skupin, ze kterých budu generovat regulární výrazy. Takto použité obslužné funkce by v Request objektu rovnou dostávali url ve zpracované podobě.


Tak jako tak, objekt Request, jakožto držitel informací požadavku od http klienta. Tento objekt je tak nějak kompatibilní s mod_pythonem. To bych chtěl zachovat, ovšem rád bych odstranil zbytečné omezení, které jsem do této třídy z mod_pythonu přenesl.


Až knihovnu – wsgi konektor, řádně otestuji, zaregistruji ji na PyPI, a vytvořím zdrojový tarball. O projektu schválně nemluvím jako o frameworku, neboť si myslím, že na to je ta knihovna malinká a navíc, nic dalšího, mima rozhraní mezi WSGI serverem a aplikací ani neumí. Nehledě na to, že PoorWSGI je jen jednou ze tří, a nyní už ze čtyř částí původního PoorHttp projektu sídlícího na stránkách http://poorhttp.zeropage.cz.


Samozřejmě že budu rád, za jakékoli připomínky, návrhy, rady, opravy či jinou pomoc a to nejen s kódem, ale i s dokumentací.

Autor:

Diskuze

Váš komentář:

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