Erscheinung der dokumentenorientierten Datenbank Apache CouchDB 3.0

Guten Tag allerseits!

29. Februar 2020 hat die offizielle Mikroversion der Bibliotheken stattgefunden smart-env und python-shell. Wer nicht informiert ist, sollte zuerst lesen den ersten Beitrag.

Kurz gesagt, unter den Änderungen gibt es die Autovervollständigung von Befehlen, erweiterte Möglichkeiten zum Ausführen von Befehlen, ein wenig Refactoring und Bugfixes.

Für Details bitte nach dem Klicken.

Was gibt es Neues im python-shell?

Ich fange gleich mit dem Wesentlichen an.

Automatische Vervollständigung von Befehlen

Es ist doch praktisch, wenn der Editor/IDE/Terminal den Befehl und manchmal auch die Parameter vorschlägt, oder? Und so macht python-shell schrittweise Fortschritte, um diese Funktionalität bereitzustellen. Da die Felder der Klasse Shell intern de facto keine Felder davon sind (allgegenwärtiges __getattr__), wurde die Autovervollständigung ebenfalls von Grund auf neu entwickelt (durch Überschreibung der Methode __dir__). Momentan funktioniert die Autovervollständigung in den Umgebungen BPython und IPython. Natürlich wäre es schön, eine Integration mit bekannteren Produkten wie PyCharm zu sehen, und in diese Richtung wird die Umsetzungsmöglichkeiten untersucht.

Hinzufügen von Eigenschaften

Im Rahmen des Releases hat die Klasse Shell eine neue Eigenschaft last_command erhalten. Der Bedarf entstand, weil bei der Generierung einer Ausnahme ShellException durch einen Befehl mit einem ungleich null Rückgabecode das Objekt Command nicht aus dem Aufruf __call__() des Objekts zurückgegeben wurde. Jetzt gibt es die Möglichkeit, es so zu machen:

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

Zudem hat sich die Liste der Eigenschaften des Objekts Command erweitert. Es wurde ein Feld errors hinzugefügt, das die Ausgabe des Befehls im Fehlerstrom zurückgibt.

Ausführen von Befehlen mit Python-invaliden Namen

In praktisch jedem System gibt es mindestens ein Programm, dessen Name sich nicht als Identifikator in Python eignet (zum Beispiel das bekannte Tool 2to3). Es lässt sich nicht mit

Shell.2to3()

auffrufen – der Interpreter erlaubt dies nicht.
Die Lösung besteht darin, den Befehl indirekt aufzurufen:

Shell("2to3")  # gibt das Befehlsobjekt zurück

Es ist zu beachten, dass man auf die gleiche Weise auch validen Befehle im Sinne des Interpreters starten kann, was die Möglichkeit lässt, flexible Skripte wie

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

Kleinere Änderungen

  • Die Methoden __repr__() und __str__() der Klasse Command wurden implementiert, die jetzt intuitiv verständliche Werte liefern (der Befehl mit Parametern und dessen stdout-Ausgabe entsprechend).
  • Kleinere Fehlerbehebungen im Code.
  • Hinzufügen von Tests zur Abdeckung sowie Neuorganisation der bestehenden.
  • Hinzufügen der Klassen Subprocess und Process, deren Ziel es ist, eine zusätzliche Abstraktionsebene bei der Arbeit mit dem Subprozess-Modul zu schaffen. Dies ist hauptsächlich erforderlich, um Codewiederholungen bei der Arbeit mit Python 2/3 zu vermeiden, könnte aber auch andere Vorteile mit sich bringen.

Was ist neu in smart-env?

Im Gegensatz zu python-shell gab es in der Bibliothek smart-env weniger Änderungen. Der Grund dafür ist einfach – es mangelte an Zeit, weshalb einige potenzielle Verbesserungen (wie die automatische Vervollständigung von Umgebungsvariablen) auf die nächste Version verschoben wurden.

Tatsächlich wurden in der Bibliothek folgende Änderungen vorgenommen:

  • Kleinere Fehlerbehebungen im Code.
  • Refactoring.
  • Neuorganisation und Überarbeitung der vorhandenen Tests.

Pläne für die nächsten Versionen

Die Bibliothek python-shell

  • Einführung der Unterstützung für nicht-blockierende Befehlsaufrufe (Parallelisierung der Ausführung).

Die Bibliothek smart-env

  • Implementierung der automatischen Vervollständigung von Umgebungsvariablen in der Klasse ENV.
  • Unterstützung des Operators in zur Überprüfung der Existenz von env-Variablen.
  • Implementierung der Unterstützung der Funktionen str() und repr() für die Klasse ENV.

Zu den Terminen der nächsten Versionen wird zusätzlich über folgende Kommunikationskanäle informiert:

Quelle: habr.com

60GB SSD 8Gb DDR4