Skip to content
/ pydyn Public

Extract python code, use IDE to modify (as it should be) & overwrite python code in dynamo file

License

Notifications You must be signed in to change notification settings

eraschle/pydyn

Repository files navigation

Dear English speaking user. My English is not the best, which is why I wrote the text in German. Whether you or I click on Google Translate, the result is the same

Was ist das Problem?

In Dynamo BIM kann durch Verbinden von Blöcken und darin enthaltenen Funktionen Skripts erstellt werden. Man kann auch Python-Code schreiben und verwenden. Der integrierte Python-Editor ermöglicht lediglich die farbliche Hervorhebung einiger Python-Keywords wie def, class usw. So schnell wird es auch keine IDE-Funktionalitäten geben, welche vor allem bei der Suche nach Fehlern schmerzlich vermisst werden. Es ist möglich, eine Dynamo-Datei, eine JSON-Datei mit modifizierter Extension, in jedem Editor zu öffnen. Durch das Maskieren von Steuerzeichen vor dem Einfügen in die Datei ist eine Bearbeitung direkt in der Dynamo-Datei nicht möglich. Da Dynamo von IronPython 2.7 auf Python 3.8 gewechselt hat und zeitnah IronPython 2.7 nicht mehr unterstützt wird, ist eine Überarbeitung vom Python Code unausweichlich. Der Druck und die Vorstellung, diese Sisyphusarbeit im integrierten Editor zu erledigen, brachten mich auf die von hinten durch Brust ins Auge Lösung aus folgenden Punkten:

  1. Dynamo-Dateien können immer verändert und geändert werden.
  2. Konvertierung von Python-Code aus Dynamo-Datei in eine Python-Datei
    • Information der Quelle speichern
    • Aufbereiten vom Code ermöglichen.
  3. Überarbeitung vom Code
    • Vorgabe: Erste Zeile für die Angaben der Quelle reserviert
  4. Konvertierten Code aus der Python-Datei in die Quelle einfügen.
    • Bereinigung von Python-Kommentaren (Formatierung & Type-Check)

Warum nicht VS Code

Es hätte eine VS Code Extension oder etwas wahrscheinlicher ein Python-Skript werden, Wenn ich nicht von einer IDE gelesen hätte, die Namensgeber einer Verletzung ist und, kaum zu glauben, eine Partei im Krieg der Editoren ist. Ich wollte/musste einfach mehr darüber erfahren.

  1. die Verletzung existiert, kann aber einfach vermieden werden.
  2. der Krieg hat sich bis heute fortgesetzt.
  3. Emacs beeindruckte durch die vielen Packages und die Möglichkeiten, die daraus resultieren.
    • Verwendet Lisp für Installation und Konfiguration.
  4. VIM überzeugte vor allem durch das besondere Konzept, auf dem Navigation und Bearbeiten von Text basiert.
    • Verwendet Vimscript für Installation und Konfiguration
  5. Evil-Mode ermöglicht VIM Funktionen in Emacs anzuwenden.
  6. Gemeinsamkeit von Emacs und VIM:
    • Beide werden ausschliesslich mit der Tastatur bedient
    • Stammen aus einem anderen Jahrtausend

Obwohl die Vorgeschichte bereits ein paar Jahre her ist, faszinieren mich die beiden Editoren immer noch. Dank WSL kann Emacs unter Linux installiert werden. Lösungen für Probleme lassen sich schnell finden und können oft durch Kopieren von Befehlen angewendet werden. Das Framework doomemacs erlaubt die Installation von vorkonfigurierten Modulen. Module lassen sich nach der Installation meist ohne oder mit sehr wenig Konfiguration verwenden. Um mehr in die Welt von Doom/Emacs einzutauchen und beim Schreiben von Lisp Code Fortschritte zu machen, habe ich die Idee in meinem ersten Emacs-Package verwirklicht.

Beschreibung

Im Paket gibt es je einen Minor-Mode für Dynamo- oder Python-Dateien. Neben verschiedenen Optionen für Import bzw. Export gibt es in jedem Mode zusätzliche Funktionen, um die Bearbeitung und den Prozess zu unterstützen. Nachdem der Entschluss gefasst wurde, das Package zu veröffentlichen. Musste die Konfigurationen von LSP, Stubs Dateien, usw. aus dem Package entfernen werden, um die Abhängigkeiten zu verringern. Eine neue Seite der Hooks wurde ersichtlich. Diese nicht nur für die Konfiguration nützlich, sondern haben Einfluss auf die Implementierung der Minor Mode. Ein Hook und die registrierten Funktionen werden beim Aktivieren oder Deaktivieren von Mode’s ausgeführt. Durch eine neue Funktion und die Registrierung der Funktion beim Hook vom Minor-Mode, konnte der Code aus dem Package in die Funktion verschoben werden. Bei der Überarbeitung konnten die Abhängigkeit von anderen Packages auf ein Minimum reduziert werden und in den beiden Minor Mode’s sind nur noch die notwendigen Funktionen enthalten. Das Package befolgt somit die Unix-Philosophien Do One Thing and Do It Well und Keep it Simple, Stupid.

Durch Minor-Mode für Dynamo- und Python-Dateien zusammen mit den DOOM vorkonfigurierten Packages wie Magit, ORG und dem Python Module mit den IDE-Funktionen, ermöglichen den ganzen Prozess zum Bearbeiten von Dynamo-Dateien ausschliesslich in EMACS und keinem weiterem Programm abzuarbeiten.

Keine Doom/Emacs Erfahrung?

Um den Einstieg zu vereinfachen, hier ein paar - hoffentlich nützliche - Information

  1. WSL Installation
  2. Anleitung für WSL mit
    • node-js
    • pyenv
    • pyright
    • Emacs
    • DOOM
  3. Konfiguration-Vorlage für
    • Aktivierung virtueller Python-Umgebung
    • Einrichten von pyright (Bsp: Stubs)
    • Konfiguration von autopep8 - Formatter
    • DOOM-Tastenkombination Localleader (SPC-m)

Python

Konvertierung zu Dynamo

  1. Datei lesen
    • Information Source-Datei/Block
    • Code kopieren
  2. Leere Zeilen vor und nach dem Code entfernen.
    • Information Source-Datei/Block
  3. Kommentare entfernen
    • Type Checker
    • Formatierung
  4. Einrückung in TAB umwandeln
  5. Codierung für JSON-String
  6. String im Python-Block ersetzten.

Funktionen

  • pydyn-python-mode-on

    Aktiviert den Python Minor Mode

  • pydyn-python-mode-off

    Deaktiviert den Python Minor Mode

  • pydyn-python-goto-dynamo-node

    Öffnet die Dynamo-Datei und verschiebt den Cursor zum Python-Block auf die Zeile, in der sich der Code befindet.

  • pydyn-python-if-remove-bracket

    Löscht unnötige Klammern in if Statements. Das Ersetzen muss vom Benutzer bestätigt werden.

  • pydyn-python-to-dynamo-node

    Konvertiert und ersetzt den Code aus der aktuellen Datei im Python-Block.

  • pydyn-python-to-dynamo-script

    Konvertiert und ersetzt den Code aus den Python-Dateien in allen Python-Blöcken des ausgewählten Skripts.

  • pydyn-python-to-dynamo-folder

    Konvertiert und ersetzt den Code aus den Python-Dateien in allen Python-Blöcken in allen Dynamo-Dateien innerhalb des ausgewählten Ordners und Unterordners.

  • pydyn-python-ignore-toggle

    Erstellt oder löscht den Type-Checker-Kommentar in der Zeile, in der sich der Cursor befindet.

  • pydyn-python-ignore-to-inputs

    Fügt die Type-Checker-Kommentare zu allen Dynamo-Inputs. Das ist Bestandteil der Dynamo-zu-Python-Konvertierung.

  • pydyn-python-ignore-to-errors

    Fügt Type-Checker-Kommentare zu allen bekannten Type-Checker Fehler ein. Weil diese Fehler keine Fehler sind und/oder diese nicht gelöst werden können, wird diese nicht mehr als Fehler angezeigt

  • pydyn-python-backslash-ensure

    Überprüft die Anzahl der Backslashs in einem String.

  • pydyn-python-formatter-disable

    Deaktiviert das Formatieren für die aktivierte Region

  • pydyn-python-formatter-enable

    Aktiviert das Formatieren durch Löschen der Python-Kommentare, sofern sich der Cursor innerhalb eines deaktivierten Bereichs befindet.

Dynamo

Konvertierung zu Python

  1. Code aus Python-Block auslesen
  2. Decodieren des Strings
  3. Datei erstellen/überschreiben
    • Information zum Zurückschreiben
    • Code einfügen
  4. Einrückung anpassen (IronPython: TAB / Python 3: Space)
  5. Optional
    • Kommentare vom Python Template entfernen:
    • Type-Checker Kommentare bei bekannten Fehlern einfügen

Funktionen

  • pydyn-dynamo-mode-on

    Aktiviert Dynamo Minor Mode

  • pydyn-dynamo-mode-off

    Deaktiviert Dynamo Minor Mode

  • pydyn-dynamo-jump-to-node

    Verschiebt den Cursor zum ausgewählten Python-Block.

  • pydyn-dynamo-goto-python

    Öffnet die Python-Datei, sofern sich der Cursor innerhalb eines Python-Blocks befindet

  • pydyn-dynamo-at-point-to-python

    Konvertiert den Code in eine Python-Datei, sofern sich der Cursor innerhalb eines Python-Blocks befindet.

  • pydyn-dynamo-script-to-python

    Konvertiert alle Python-Blöcke der ausgewählten Dynamo-Datei

  • pydyn-dynamo-folder-to-python

    Konvertiert alle Python-Blöcke aus allen Dynamo-Dateien innerhalb eines Ordners und Unterordner

  • pydyn-dynamo-clean-orphan-code-file

    Löscht alle Python-Dateien, wenn der Python-Block nicht mehr in der aktuellen Dynamo-Datei befindet.

  • pydyn-dynamo-clean-orphan-code-folder

    Überprüft alle Dynamo-Dateien im ausgewählten Ordner und Unterordner. Dabei werden Python-Dateien gelöscht, wenn der Python-Block nicht mehr in der aktuellen Dynamo-Datei befindet.

  • pydyn-dynamo-python-code-preview (under construction)

    Zeigt den Code in einem Fenster an, sofern sich der Cursor innerhalb eines Python-Blocks befindet. Es wird aber keine Python-Datei erstellt.

About

Extract python code, use IDE to modify (as it should be) & overwrite python code in dynamo file

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published