Dobrý den všem!
29. února 2020 se konal oficiální mikro-release knihoven smart-env a python-shell. Těm, kteří nejsou v obraze, doporučuji nejprve přečíst .
Pokud to shrnu, mezi změnami je automatické doplňování příkazů, rozšíření možností spouštění příkazů, drobné refaktoringy a opravy chyb.
Pro detaily prosím pod cut.
Co nového v python-shell?
Začnu hned dezertem.
Doplňování příkazů
Souhlasíte, že je pohodlné, když editor/IDE/terminál naznačuje název příkazu a někdy i parametry volání? Python-shell se pomalu posouvá směrem k zajištění podobné funkčnosti. Vzhledem k tomu, že pole třídy Shell pod kapotou de-facto nejsou jejími poli (všeobecný __getattr__), bylo automatické doplňování vytvořeno také od nuly (přetížením metody __dir__). V současné době automatické doplňování funguje v prostředí BPython a IPython. Samozřejmě, že bych rád viděl integraci s robustnějšími produkty, jako je PyCharm, a v tomto směru se zkoumá možné realizace.
Přidání vlastností
V rámci release třída Shell získala novou vlastnost last_command. Potřeba této vlastnosti vznikla proto, že při generování výjimky ShellException příkazem s nenulovým návratovým kódem se objekt Command nevracel z volání __call__() objektu příkazu. Nyní je však možné udělat toto:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandTaké se rozšířil seznam vlastností objektu Command. Bylo přidáno pole errors, které vrací výstup příkazu do chybového proudu.
Spuštění příkazů s nevalidními jmény v Pythonu
V téměř každém systému existuje alespoň jeden program, jehož název není vhodný jako identifikátor v Pythonu (například známý nástroj 2to3). Spustit ho pomocí
Shell.2to3() to nepůjde — interpretátor jej nepustí.
Řešení — zavolat příkaz obchvatem:
Shell("2to3") # vrací objekt příkazuJe třeba poznamenat, že stejným způsobem lze spouštět i validní příkazy z pohledu interpreteru, což ponechává možnost vytvářet flexibilní skripty, jako například
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Drobné změny
- Byly implementovány metody __repr__() a __str__() objektu třídy Command, které nyní vrací intuitivně pochopitelné hodnoty (příkaz s parametry a jeho stdout výstup).
- Drobné opravy v kódu.
- Přidání pokrytí testy a reorganizace stávajících.
- Přidání tříd Subprocess a Process, jejichž cílem je vytvořit další úroveň abstrakce při práci s modulem subprocess. Většinou je to nutné k odstranění duplicitního kódu při práci s Pythonem 2/3, ale potenciálně může nabídnout i jiné výhody.
Co je nového v smart-env?
Na rozdíl od python-shell došlo v knihovně smart-env k menším změnám. Důvodem je prostý nedostatek volného času, což vedlo k tomu, že některá potenciální vylepšení (například automatické dokončování proměnných prostředí) byla přesunuta na další verzi.
Ve skutečnosti byla v knihovně provedena následující změny:
- Drobné opravy v kódu.
- Refaktoring.
- Reorganizace a vylepšení stávajících testů.
Plány na další verze
Knihovna python-shell
- Přidání podpory pro neblokující volání příkazů (paralelizace provádění).
Knihovna smart-env
- Implementace automatického dokončování proměnných prostředí v třídě ENV.
- Podpora operátoru in pro kontrolu existence env-proměnné.
- Implementace podpory funkcí str() a repr() pro třídu ENV.
O termínech dalších vydání bude dodatečně oznámeno v následujících komunikačních kanálech:
- Aktualizací v tomto článku.
Zdroj: habr.com
