We combineren Python en Bash: release van de bibliotheken python-shell en smart-env v. 1.0.1

Goede middag allemaal!

29 februari 2020 vond de officiƫle micro-release van de bibliotheken plaats smart-env en python-shell. Voor degenen die niet op de hoogte zijn, stel ik voor om vooraf te lezen de eerste post.

In het kort, onder de veranderingen zijn er autocompletion voor commando's, uitgebreide mogelijkheden voor het uitvoeren van commando's, wat refactoring en bugfixes.

Voor details verwijs ik naar de rest van de post.

Wat is er nieuw in python-shell?

Ik begin meteen met het toetje.

Autocompletion voor commando's

Geeft u toe - het is handig wanneer de editor/IDE/terminal de naam van het commando suggereert, en soms zelfs de parameters? Ook python-shell breidt geleidelijk uit met het bieden van deze functionaliteit. Aangezien de velden van de klasse Shell onder de motorkap de facto geen werkelijke velden zijn (de alomtegenwoordige __getattr__), is de autocompletion ook vanaf nul ontwikkeld (door het overloaden van de methode __dir__). Momenteel werkt de autocompletion in de omgevingen BPython en IPython. Natuurlijk willen we integratie zien met meer gevestigde producten zoals PyCharm, en in deze richting worden de mogelijkheden voor implementatie onderzocht.

Toevoeging van eigenschappen

In het kader van de release heeft de klasse Shell een nieuwe eigenschap last_command gekregen. De behoefte hieraan ontstond omdat bij het genereren van een uitzondering ShellException met een niet-nul retourcode, het Command-object niet werd teruggegeven vanuit het __call__()-oppervlak van het commando. Nu is het mogelijk om dit te doen:

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

De lijst met eigenschappen van het Command-object is ook uitgebreid. Het veld errors is toegevoegd, dat de uitvoer van het commando naar de foutstroom retourneert.

Uitvoeren van commando's met Python-onvalide namen

In vrijwel elk systeem is er ten minste ƩƩn programma dat niet geschikt is als identificator in Python (bijvoorbeeld de bekende tool 2to3). Dit aanroepen met

Shell.2to3()

zal niet lukken - de interpreter zal dit niet toestaan.
De oplossing is om het commando via een omweg aan te roepen:

Shell("2to3")  # retourneert het commando-object

Het is vermeldenswaard dat op dezelfde manier ook valide commando's qua interpreter kunnen worden uitgevoerd, wat de mogelijkheid biedt om flexibele scripts te maken zoals

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

Kleine wijzigingen

  • De methoden __repr__() en __str__() van de klasse Command zijn geĆÆmplementeerd, die nu intuĆÆtief begrijpelijke waarden teruggeven (de commando met parameters en zijn stdout-uitvoer respectievelijk).
  • Kleine correcties in de code.
  • Toevoegen van testcoverage en reorganisatie van bestaande structuren.
  • Toevoegen van de Subprocess en Process klassen, met als doel om een extra abstractielaag te creĆ«ren bij het werken met de subprocess module. Dit is voornamelijk nodig om herhalingen in de code bij het werken met Python 2/3 te elimineren, maar kan ook andere voordelen bieden.

Wat is nieuw in smart-env?

In tegenstelling tot python-shell, zijn er minder veranderingen in de smart-env bibliotheek. De reden hiervoor is eenvoudig: een gebrek aan vrije tijd, waardoor sommige potentiƫle verbeteringen (zoals het automatisch aanvullen van omgevingsvariabelen) zijn doorgeschoven naar de volgende release.

In feite zijn de volgende wijzigingen in de bibliotheek aangebracht:

  • Kleine correcties in de code.
  • Refactoring.
  • Herschikking en verbetering van de bestaande tests.

Plannen voor komende releases.

Bibliotheek python-shell

  • Toevoegen van ondersteuning voor niet-blokkerende aanroepen van commando's (parallellisatie van uitvoering).

Bibliotheek smart-env

  • Implementatie van automatisch aanvullen van omgevingsvariabelen in de ENV klasse.
  • Ondersteuning voor de in-operator om het bestaan van een env-variabele te controleren.
  • Implementatie van ondersteuning voor de functies str() en repr() voor de ENV klasse.

Over de datums van volgende releases zal aanvullende informatie worden bekendgemaakt via de volgende communicatiekanalen:

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster