PowerConsole Blues

27. 1. 2012 9:28 (aktualizováno) Pavel Císař

Minulý týden jsem si konečně udělal dost času na kompletní přepracování PowerConsole. Díky zkušenostem z druhého prototypu postaveném na wxPythoním PyShellu jsem si ujasnil celkovou koncepci a současná verze by měla posloužit jako pevný základ pro další vývoj.

Protože webové stránky projektu ještě nejsou hotové, nejdřív pár rámcových informací pro ty, co o PowerConsoli zatím neslyšeli.

PowerConsole (pwc) je v principu standardní interpret (shell) Pythonu s možností rozšiřování o další vestavěné příkazy. Jde tedy o něco podobného jako je IPython. Od zmíněného IPythonu se liší tím, že má jednoduchou modulární strukturu navrženou tak, by bylo možné co nejjednodušeji vytvářet specializované verze shellu (čistá konzole, grafická konzole, web interface, embedded atd.) a nové příkazy.

Každý příkaz je tvořen samostatnou třídou, která se do libovolné verze shellu instaluje jako zásuvný modul (pomocí setuptools). K vytvoření nového příkazu je nutné nejprve definovat jeho gramatiku pomocí modulu pyparsing. To může na první pohled vypadat složitě, ale pyparsing i základní třídy pwc definici gramatiky hodně zjednodušují díky předpřipraveným stavebním blokům. Tato gramatika je pak používána shellem pro transformaci příkazu (zadaného z konzole nebo jinak) na volání výkonné metody objektu, která realizuje jeho vykonání. Interní příkazy se přitom mohou objevit kdekoliv v kódu, tedy jak přímo na základní úrovni, tak např. ve smyčkách, funkcích, metodách tříd atd. Díky použití modulu pyparsing je možné v jediném kroku transformovat i poměrně složité příkazy na volání metody s příslušnými parametry. Implementace příkazu je tak významně usnadněna, protože je redukována na definici gramatiky a jediné výkonné metody.

Samotný „motor“ pwc je vytvořen podle vzoru InteractiveInterpreter / InteractiveConsole z modulu code standardní knihovny Pythonu, takže je poměrně snadné jej zabudovat to libovolného shellu postaveném nad tímto modulem (např. do již zmíněného PyShelluwxPythonu).

Zatím je hotové pouze nové jádro, tedy základní infrastruktura pro příkazy, interpreter, několik základních příkazů (help a run) a jednoduchá konzole pro příkazovou řádku. Toto jádro možná ještě dozná drobnějších změn a především rozšíření, ale v podstatě by jeho stávající interface měl být stabilní, a jeho podoba konečná. Další části PowerConsole budou vytvářeny jako samostatné moduly, které lze volitelně doinstalovat.

Jádro PowerConsole je distribuováno pod linceci IDPL (pročištěná MPL), a můžete si ho stáhnout v podobě hadího vejce. Vyžaduje pyparsing 1.4.3 nebo novější, který ovšem není k dispozici jako vejce, takže si ho musíte buď vyrobit sami, nebo stáhnout zde (pro Python 2.4). Pokud se vám výše popsaný koncept líbí, můžete již začít vytvářet své vlastní příkazy. Dokumentace sice zatím není k dispozici, ale zdrojový text by měl být hodně přehledný a dobře okomentovaný.

Jen co mi zbude trochu času (a vyřeším problémy s GPG) tak modul zaregistruji na PyPI, a dodělám webové stránky (budou zde). Pokud máte poznámky a náměty týkající se PowerConsole, můžete mi je poslat na pcisar AT ibphoenix DOT cz.

Dalším krokem bude vytvoření modulu pwcFirebird, který bude obsahovat podporu SQL a speciální příkazy a datové struktury pro práci s databázemi Firebirdu. Tímto modulem se z PowerConsole stane de facto Firebird PowerTool o kterém byla řeč na posledních dvou Firebird konferencích (prezentace z poslední konference jako PPT nebo PDF). Bohužel vydání první verze tohoto modulu bude asi chvíli trvat, protože kód z posledního prototypu musí být upraven na nové jádro a musí být přepsán pro novou verzi kinterbasdb která již obsahuje podporu více transakcí v rámci jednoho připojení (což se ukázalo jako nezbytná podmínka pro implementaci mnoha zamýšlených příkazů). Navíc mám i jiné věci na práci než vývoj pwc (tento měsíc vydáváme novou aktualizovanou sadu Developer a Deployment CD – což vyrábím já, a pracuje se na vydání Preview Firebirdu 2.1).

Sdílet