Dobrý deň všetkým!
29. februára 2020 sa uskutočnila oficiálna mikro-verzia knižníc smart-env a python-shell. Tým, ktorí nie sú v obraze, navrhujem najprv si prečítať .
Ak to zhrniem, medzi zmenami sú – automatické doplňovanie príkazov, rozšírené možnosti spustenia príkazov, trochu refaktoringu a opráv chýb.
Pre podrobnosti prosím pokračujte ďalej.
Čo je nové v python-shell?
Začnem hneď s dezertom.
Automatické doplňovanie príkazov
Súhlasíte, že je pohodlné, keď editor/IDE/terminál navrhne názov príkazu, a niekedy aj parametre volania? Tak aj python-shell sa pomaly posúva v zabezpečení podobnej funkčnosti. Vzhľadom k tomu, že polia triedy Shell pod kapotou de-facto nie sú jeho poliami (všadeprítomný __getattr__), automatické doplňovanie bolo vytvorené tiež od nuly (preťažovaním, príslušne, metódy __dir__). V súčasnosti automatické doplňovanie funguje v prostredí BPython a IPython. Samozrejme, chceli by sme vidieť integráciu s prestížnejšími produktmi ako PyCharm, a v tomto smere prebieha štúdium možností realizácie.
Pridanie vlastností
V rámci vydania získala trieda Shell novú vlastnosť last_command. Potreba tejto vlastnosti vznikla z dôvodu, že pri generovaní výnimky ShellException príkazom s nenulovým kódom návratu sa objekt Command nevrátil z volania __call__() objektu príkazu. Teraz je však možné spraviť nasledovné:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandRovnako sa rozšíril zoznam vlastností objektu Command. Pridané pole errors, ktoré vracia výstup príkazu do chybového prúdu.
Spúšťanie príkazov s Python-neplatnými názvami
Takmer v každom systéme existuje aspoň jeden program, ktorého názov nie je vhodný ako identifikátor v Pythone (napríklad známa utilita 2to3). Vyvolať ho pomocou
Shell.2to3() sa nepodarí – interpret to neprepustí.
Riešenie – vyvolať príkaz obchádzajúco:
Shell("2to3") # vracia objekt príkazuJe dobré poznamenať, že rovnakým spôsobom je možné spúšťať aj platné príkazy z pohľadu interpretu, čo ponecháva možnosť vytvárať flexibilné skripty ako
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Malé zmeny
- Bola implementovaná metóda __repr__() a __str__() objektu triedy Command, ktoré teraz vydávajú intuitívne pochopiteľné hodnoty (príkaz s parametrami a jeho stdout výstup).
- Malé opravy v kóde.
- Pridanie pokrytia testami a reorganizácia existujúcich.
- Pridanie tried Subprocess a Process, ktorých cieľom je vytvorenie dodatočnej úrovne abstrakcie pri práci s modulom subprocess. Väčšinou to je potrebné na odstránenie opakovaní kódu pri práci s Python 2/3, ale potenciálne to môže priniesť aj ďalšie výhody.
Čo je nového v smart-env?
Na rozdiel od python-shell, v knižnici smart-env sa udialo menej zmien. Dôvod je jednoduchý — nedostatok voľného času, počas ktorého niektoré potenciálne zlepšenia (napríklad automatické doplňovanie premenných prostredia) boli presunuté na ďalší release.
V skutočnosti boli v knižnici vykonané nasledujúce zmeny:
- Malé opravy v kóde.
- Refaktorovanie.
- Reorganizácia a úprava existujúcich testov.
Plány na ďalšie release
Knižnica python-shell
- Pridanie podpory pre neblokujúce volania príkazov (paralelizácia vykonávania).
Knižnica smart-env
- Implementácia automatického doplňovania premenných prostredia v triede ENV.
- Podpora operátora in na kontrolu existencie env-pola.
- Implementácia podpory funkcií str() a repr() pre triedu ENV.
O termínoch budúcich release bude oznámené v nasledujúcich komunikačných kanáloch:
- Aktualizáciou v tomto článku.
Zdroj: habr.com
