From 3cf9c938d5008d53984e85be0313e46c7f6f47d9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 17:14:29 +0000 Subject: [PATCH] =?UTF-8?q?CI=20gr=C3=BCn:=20fehlender=20json-Import,=20un?= =?UTF-8?q?definierte=20Variable,=20flake8-Fehlalarme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der flake8-Schritt der GitHub-Action bricht seit Anfang Juli bei jedem Lauf mit 7 F821-Fehlern ab, dadurch läuft pytest nie an. Zwei der Meldungen sind echte Laufzeitfehler: editor/controller/snippet_controller.py json.load/json.dump werden benutzt, ohne dass json importiert ist. Folge: „Markierten Code als Snippet speichern" scheitert mit Speicherfehler, gespeicherte Snippets werden nie geladen. → import json ergänzt. ui/manager.py _filter_makros prüft `if inhalt_modus:` — die Variable existiert nirgends im Projekt. Folge: NameError, sobald im Makro-Browser ein Suchbegriff eingegeben wird. Die Statuszeile soll dort immer erscheinen, deshalb die Bedingung entfernt. InitGui.py Fehlalarm: _MODDIR wird über globals() gesetzt, weil FreeCAD die Datei per exec(code, globals, locals) ausführt und eine normale Zuweisung in exec-locals landen würde, wo Klassen-Methoden sie nicht sehen. Statische Prüfer erkennen das nicht — die vier Verwendungen bekommen „# noqa: F821" plus erklärenden Kommentar. tests/conftest.py (neu) test_editor_live.py importiert PySide6/PySide2 beim Laden. Ohne Qt — wie auf dem Actions-Runner — bricht pytest schon beim Einsammeln ab. Fehlt Qt, wird die Datei jetzt übersprungen. Beide CI-Schritte lokal geprüft: flake8 endet mit 0, pytest meldet 53 bestandene Tests. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01SaJk9iHXDogxEwuRLiJ3ao --- InitGui.py | 10 ++++++---- editor/controller/snippet_controller.py | 1 + tests/conftest.py | 24 ++++++++++++++++++++++++ ui/manager.py | 5 ++--- 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 tests/conftest.py diff --git a/InitGui.py b/InitGui.py index b79f572..6eeec2c 100644 --- a/InitGui.py +++ b/InitGui.py @@ -11,6 +11,8 @@ # __file__ ist im FlatPak-FreeCAD nicht gesetzt → Fallback auf getUserAppDataDir. # globals() schreibt _MODDIR in exec-globals, damit Klassen-Methoden es sehen. +# Statische Prüfer sehen diese Zuweisung nicht — jede Verwendung von _MODDIR +# trägt deshalb ein "# noqa: F821". Zur Laufzeit ist der Name gesetzt. try: globals()['_MODDIR'] = os.path.dirname(os.path.abspath(__file__)) except NameError: @@ -25,7 +27,7 @@ class KiAssistentCommand: def GetResources(self): ki_path = os.path.join(os.path.expanduser("~"), "Schreibtisch", "Macros", "KI Muli source Assistent") - assets = os.path.join(_MODDIR, "assets") + assets = os.path.join(_MODDIR, "assets") # noqa: F821 icon = "" for kandidat in (os.path.join(ki_path, "ki_icon.svg"), os.path.join(assets, "Icon.svg")): @@ -89,8 +91,8 @@ def Activated(self): # ── Pfade einrichten ─────────────────────────────────────────────────────────── def _pfade_einrichten(): - if _MODDIR not in sys.path: - sys.path.insert(0, _MODDIR) + if _MODDIR not in sys.path: # noqa: F821 + sys.path.insert(0, _MODDIR) # noqa: F821 def _panel_starten(): @@ -114,7 +116,7 @@ class MeineMakroWorkbench(Gui.Workbench): def __init__(self): super().__init__() - self.Icon = os.path.join(_MODDIR, "Icon.svg") + self.Icon = os.path.join(_MODDIR, "Icon.svg") # noqa: F821 def Initialize(self): # Immer aufgerufen wenn Workbench zum ersten Mal aktiviert wird diff --git a/editor/controller/snippet_controller.py b/editor/controller/snippet_controller.py index b237bf9..a771e5a 100644 --- a/editor/controller/snippet_controller.py +++ b/editor/controller/snippet_controller.py @@ -18,6 +18,7 @@ """ import os +import json from core.qt_compat import QtWidgets, QtCore, QtGui from core import theme diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..aaa5c9d --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +""" +conftest.py +─────────── +Sammel-Regeln für pytest. + +test_editor_live.py startet echte Qt-Widgets und importiert PySide6 bzw. +PySide2 schon beim Laden der Datei. Auf Rechnern ohne Qt — etwa dem +GitHub-Actions-Runner — bricht pytest deshalb bereits beim Einsammeln der +Tests ab, bevor ein einziger Test läuft. + +Fehlt Qt, wird die Datei hier übersprungen. Die Qt-freien Tests in +test_back_funktionen.py laufen davon unberührt weiter. +""" + +collect_ignore = [] + +try: + import PySide6 # noqa: F401 +except ImportError: + try: + import PySide2 # noqa: F401 + except ImportError: + collect_ignore.append("test_editor_live.py") diff --git a/ui/manager.py b/ui/manager.py index 19d276b..e6e53fa 100644 --- a/ui/manager.py +++ b/ui/manager.py @@ -243,9 +243,8 @@ def _filter_makros(self, text): sichtbare_ordner.add(rel_low) anzahl = sum(1 for btn, *_ in self._makro_buttons if btn.isVisible()) - if inhalt_modus: - self.status.setText( - f"{anzahl} Treffer – Klick öffnet Datei im Editor") + self.status.setText( + f"{anzahl} Treffer – Klick öffnet Datei im Editor") for rel_pfad, lbl in self._ordner_labels.items(): rel_low = rel_pfad.lower()