Meitsje Python en Bash Friendship: Release fan de python-shell en smart-env v bibleteken. 1.0.1

Goeie dei allegearre!

29 febrewaris 2020 jier offisjele mikro-release fan biblioteken fûn plak smart-env и python-shell. Foar dyjingen dy't net yn 't witte, stel ik foar dat jo it earst lêze earste post.

Koartsein, de wizigingen omfetsje foltôging fan kommando, útwreide mooglikheden foar it útfieren fan kommando's, wat refactoring en bugfixes.

Foar details sjoch kat.

Wat is nij yn python-shell?

Ik sil daliks begjinne mei it dessert.

Kommando foltôging

Iens - it is handich as de bewurker / IDE / terminal jo freget om de namme fan it kommando, en soms sels de opropparameters? Sa makket python-shell stadichoan foarútgong by it leverjen fan ferlykbere funksjonaliteit. Fanwegen it feit dat de fjilden fan 'e Shell-klasse ûnder de motorkap de-facto net har fjilden binne (de ubiquitous __getattr__), waard autofoltôging ek fanôf it begjin makke (troch respektivelik de __dir__-metoade te oerladen). Autocompletion wurket op it stuit yn BPython- en IPython-omjouwings. Fansels, ik soe graach sjen yntegraasje mei mear earbiedweardige produkten lykas PyCharm, en ymplemintaasje mooglikheden wurde bestudearre yn dizze rjochting.

Eigenskippen tafoegje

As ûnderdiel fan 'e frijlitting krige de Shell-klasse in nij last_command-eigenskip. De needsaak foar it ûntstie omdat doe't in ShellException waard smiten troch in kommando mei in net-nul return koade, it kommando foarwerp waard net werom út de __call__ () oprop oan it kommando foarwerp. No is d'r in kâns om dit te dwaan:

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

De list mei eigenskippen fan it Command-objekt is ek útwreide. In flaterfjild tafoege dat de kommandoútfier werombringt nei de flaterstream.

Opdrachten útfiere mei ûnjildige Python-nammen

Hast elk systeem hat op syn minst ien programma wêrfan de namme net geskikt is as identifier yn Python (bygelyks it bekende 2to3-hulpprogramma). Belje har mei

Shell.2to3()

As it net slagget, lit de tolk it net troch.
De oplossing is om it kommando op in rûnwei manier op te roppen:

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

It is de muoite wurdich op te merken dat jo op deselde manier kommando's kinne útfiere dy't jildich binne út it eachpunt fan 'e tolk, wat de kâns lit om fleksibele skripts te meitsjen lykas

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

Lytse feroarings

  • De metoaden __repr__() en __str__() fan it Command-klasseobjekt binne ymplementearre, dy't no yntuïtive wearden produsearje (in kommando mei respektivelik parameters en syn stdout-útfier).
  • Lytse koade fixes.
  • Testdekking tafoegje, lykas besteande reorganisearjen.
  • It tafoegjen fan de subproses- en prosesklassen, wêrfan it doel is om in ekstra nivo fan abstraksje te meitsjen by it wurkjen mei de subprosesmodule. Meast nedich om te elimineren koade duplication by it wurkjen mei Python 2/3, mar kin mooglik foarsjen oare bonussen ek.

Wat is nij yn smart-env?

Oars as python-shell, binne d'r minder feroarings west yn 'e smart-env-bibleteek. De reden hjirfoar is ienfâldich - gebrek oan frije tiid, wêryn guon potinsjele ferbetterings (bygelyks autofoltôging fan omjouwingsfariabelen) waarden ferpleatst nei de folgjende release.

Yn feite binne de folgjende wizigingen makke yn 'e biblioteek:

  • Lytse koade fixes.
  • Refactoring.
  • Reorganisaasje en ferfining fan besteande tests.

Plannen foar folgjende releases

python-shell bibleteek

  • Stipe tafoegje foar net-blokkearjende kommando-oproppen (parallelisaasje fan útfiering).

smart-env bibleteek

  • Utfiering fan autofoltôging fan omjouwingsfariabelen yn 'e ENV-klasse.
  • Stipe foar de yn-operator om it bestean fan in env-fariabele te kontrolearjen.
  • Útfiering fan stipe foar de str () en repr () funksjes foar de ENV klasse.

De datums fan 'e folgjende releases sille fierder wurde oankundige yn' e folgjende kommunikaasjekanalen:

Boarne: www.habr.com

Add a comment