Сдружваем 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__() аб'екта каманды. Цяпер жа ёсць магчымасць зрабіць так:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

Таксама пашырыўся спіс уласцівасцяў аб'екта Command. Дададзена поле errors, якое вяртае выснову каманды ў струмень памылак.

Запуск каманд з Python-неваліднымі імёнамі

Практычна ў любой сістэме ёсць хоць адна праграма, назва якой не падыходзіць у якасці ідэнтыфікатара ў Python (напрыклад, вядомая ўтыліта 2to3). Выклікаць яе з дапамогай

Shell.2to3()

не атрымаецца - інтэрпрэтатар не прапусціць.
Рашэнне - выклікаць каманду абыходным шляхам:

Shell("2to3")  # возвращает объект команды

Варта заўважыць, што такой жа выявай можна запускаць і валідныя з пункта гледжання інтэрпрэтатара каманды, што пакідае магчымасць рабіць гнуткія скрыпты накшталт

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

Дробныя змены

  • Рэалізаваны метады __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.

Пра даты наступных рэлізаў будзе дадаткова абвешчана ў наступных каналах сувязі:

Крыніца: habr.com

Дадаць каментар