Сдружваем Python і Bash: рэліз бібліятэк python-shell і smart-env v. 1.0.1
Добрага часу сутак усім!
29 Люты 2020 года адбыўся афіцыйны мікра-рэліз бібліятэк smart-env и python-shell. Тым, хто не ў курсе, прапаную папярэдне прачытаць першы пост.
Калі сцісла, то сярод змен - аўтадапаўненне каманд, пашырэнне магчымасцяў па запуску каманд, трохі рэфактарынгу і багфіксаў.
За дэталямі прашу пад кат.
Што новага ў python-shell?
Пачну адразу з дэсерту.
Аўтадапаўненне каманд
Пагадзіцеся - зручна, калі рэдактар/IDE/тэрмінал падказвае назву каманды, а часам і параметры выкліку? Вось і python-shell пакрысе прасоўваецца ў забеспячэнні падобнага функцыяналу. У сувязі з тым, што палі класа Shell пад капотам de-facto не з'яўляюцца яго палямі (усюдыісны __getattr__), аўтададатак створана таксама з нуля (перагрузкай, адпаведна, метаду __dir__). У дадзены момант аўтададатак працуе асяроддзях BPython і IPython. Вядома, жадаецца ўбачыць інтэграцыю з больш масцітымі прадуктамі накшталт PyCharm, і ў гэтым кірунку ідзе вывучэнне магчымасцяў рэалізацыі.
Даданне ўласцівасцяў
У рамках рэлізу клас Shell атрымаў новую ўласцівасць last_command. Запатрабаванне ў ім узнікла з прычыны таго, што пры генерацыі выключэння ShellException камандай з ненулявым кодам звароту аб'ект Command не вяртаўся з выкліку __call__() аб'екта каманды. Цяпер жа ёсць магчымасць зрабіць так:
Таксама пашырыўся спіс уласцівасцяў аб'екта Command. Дададзена поле errors, якое вяртае выснову каманды ў струмень памылак.
Запуск каманд з Python-неваліднымі імёнамі
Практычна ў любой сістэме ёсць хоць адна праграма, назва якой не падыходзіць у якасці ідэнтыфікатара ў Python (напрыклад, вядомая ўтыліта 2to3). Выклікаць яе з дапамогай
Shell.2to3()
не атрымаецца - інтэрпрэтатар не прапусціць.
Рашэнне - выклікаць каманду абыходным шляхам:
Shell("2to3") # возвращает объект команды
Варта заўважыць, што такой жа выявай можна запускаць і валідныя з пункта гледжання інтэрпрэтатара каманды, што пакідае магчымасць рабіць гнуткія скрыпты накшталт
Рэалізаваны метады __repr__() і __str__() аб'екта класа Command, якія зараз выдаюць інтуітыўна зразумелыя значэнні (каманду з параметрамі і яе stdout-выхлап адпаведна).
Дробныя выпраўленні па кодзе.
Даданне пакрыцця тэстамі, а таксама рэарганізацыя існуючых.
Даданне класаў Subprocess і Process, мэта якіх - стварэнне дадатковага ўзроўню абстракцыі пры працы з модулем subprocess. Па большай частцы, неабходна для ўхілення паўтораў кода пры працы з Python 2/3, але патэнцыйна можа і даць і іншыя бонусы.
Што новага ў smart-env?
У адрозненне ад python-shell, у бібліятэцы smart-env змен адбылося менш. Чыннік таму простая — недахоп вольнага часу, падчас чаго некаторыя патэнцыйныя паляпшэнні (напрыклад, аўтададатак зменных асяроддзі) былі перанесеныя на наступны рэліз.
Па факце, у бібліятэцы зроблены наступныя змены:
Дробныя выпраўленні па кодзе.
Рэфакторынг.
Рэарганізацыя і дапрацоўка наяўных тэстаў.
Планы па наступных рэлізах
Бібліятэка python-shell
Даданне падтрымкі неблакіруючых выклікаў каманд (паралелізацыя выканання).
Бібліятэка smart-env
Рэалізацыя аўтадапаўнення зменных асяроддзі ў класе ENV.
Падтрымка аператара in для праверкі існавання env-пераменнай.
Рэалізацыя падтрымкі функцый str() і repr() для класа ENV.
Пра даты наступных рэлізаў будзе дадаткова абвешчана ў наступных каналах сувязі: