Dober dan vsem!
29. februar 2020 se je odvijal uradni mikro-izdaja knjižnic smart-env in python-shell. Tistim, ki niste v toku, predlagam, da preberete .
Na kratko, med spremembami so avtomatsko dopolnjevanje ukazov, širitev možnosti za izvajanje ukazov, nekoliko refaktorizacije in odpravljanja napak.
Za podrobnosti vas prosim pod kat.
Kaj novega pri python-shell?
Začel bom takoj s sladico.
Samodejno dopolnjevanje ukazov
Se strinjate — priročno je, ko urejevalnik / IDE / terminal predlaga ime ukaza, včasih pa tudi parametre klica? Tako se python-shell postopoma razvija v zagotavljanju tovrstne funkcionalnosti. Glede na to, da polja razreda Shell pod pokrovom de-facto niso njegova polja (vseprisotni __getattr__), je bilo avtomatsko dopolnjevanje ustvarjeno tudi z ničle (s preobremenitvijo, ustrezno, metode __dir__). Trenutno avtomatsko dopolnjevanje deluje v okoljih BPython in IPython. Seveda si želimo videti integracijo z bolj prepoznavnimi izdelki, kot je PyCharm, in v tej smeri poteka raziskovanje možnosti izvedbe.
Dodajanje lastnosti
V okviru izdaje je razred Shell prejel novo lastnost last_command. Potreba po njej je nastala, ker ob generiranju izjeme ShellException z ukazom, ki ima nenulte kode vrnitve, objekt Command ni bil vrnjen iz klica __call__() objekta ukaza. Zdaj pa je mogoče narediti tako:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_commandPoleg tega se je razširil seznam lastnosti objekta Command. Dodano je polje errors, ki vrne izhod ukaza v tok napak.
Zagnanje ukazov s Python-invalidnimi imeni
V praktično vsakem sistemu je vsaj en program, katerega ime ni primerno kot identifikator v Pythonu (na primer, znana pripomoček 2to3). Kličejo ga lahko z
Shell.2to3() ne bo delovalo — interpreter ne bo omogočil.
Rešitev je, da ukaz pokličemo poobhodno:
Shell("2to3") # vrne objekt ukazaOpaziti je treba, da lahko na ta način zaženete tudi veljavne ukaze z vidika interpreterja, kar omogoča izdelavo fleksibilnih skript, kot je
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)Majhne spremembe
- Izvedene so bile metode __repr__() in __str__() objekta razreda Command, ki sedaj vračata intuitivno razumljive vrednosti (ukaz s parametri in njegova stdout-izhodna vrednost).
- Majhni popravki kode.
- Dodajanje pokritja s testi ter reorganizacija obstoječih.
- Dodajanje razredov Subprocess in Process, katerih cilj je ustvariti dodatno plast abstrakcije pri delu z modulom subprocess. V večini primerov je potrebno za odpravo ponavljanja kode pri delu s Python 2/3, lahko pa prinese tudi druge koristi.
Kaj je novega v smart-env?
V nasprotju s python-shell se v knjižnici smart-env ni zgodilo veliko sprememb. Razlog je preprost — pomanjkanje prostega časa, zaradi česar so nekatere potencialne izboljšave (na primer samodejno dopolnjevanje okolijskih spremenljivk) preložene na naslednjo različico.
Dejansko so v knjižnici izvedene naslednje spremembe:
- Majhni popravki kode.
- Refaktorizacija.
- Reorganizacija in dopolnitev obstoječih testov.
Načrti za naslednje različice
Knjižnica python-shell
- Dodajanje podpore za neblokirne klice ukazov (paralelizacija izvajanja).
Knjižnica smart-env
- Izvedba samodejnega dopolnjevanja okolijskih spremenljivk v razredu ENV.
- Podpora operatorju in za preverjanje obstoja env-spremenljivke.
- Izvedba podpore za funkcije str() in repr() za razred ENV.
O datumih naslednjih različic bo dodatno obveščeno preko naslednjih komunikacijskih kanalov:
- Posodobitev v tem članku.
Izvor: habr.com
