Skip to content

GDML workbench fails to load on FreeCAD 1.1 - circular import in init_gui.py #174

Description

@sake-lyla

Description
After installing the GDML workbench via the Addon Manager, FreeCAD throws errors during startup/workbench initialization. The traceback shows a circular import inside FreeCAD's own draftguitools package, apparently triggered by init_gui.py's from draftguitools import gui_arrays and the subsequent fallback import DraftTools.

Environment
FreeCAD version: 1.1.1
OS: macOS 26.5.1
GDML workbench version/commit: v2.0.2 beta
Install method: Addon Manager

Steps to reproduce

  1. Install the GDML workbench via the Addon Manager.
  2. Restart FreeCAD.
  3. Observe the traceback in the Report view on startup (or when switching to/loading the GDML workbench).

Expected behavior
GDML workbench loads without errors, and the Draft module initializes normally.

Actual behaviour
The following traceback appears:

Traceback (most recent call last):
  File "/Users/sake/Library/Application Support/FreeCAD/v1-1/Mod/GDML/./freecad/gdml/init_gui.py", line 38, in <module>
    from draftguitools import gui_arrays
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftguitools/gui_arrays.py", line 37, in <module>
    import draftguitools.gui_circulararray
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftguitools/gui_circulararray.py", line 37, in <module>
    from draftguitools import gui_base
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftguitools/gui_base.py", line 38, in <module>
    from draftguitools import gui_trackers as trackers
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftguitools/gui_trackers.py", line 45, in <module>
    import Draft
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/Draft.py", line 351, in <module>
    from draftmake.make_hatch import make_hatch
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftmake/make_hatch.py", line 31, in <module>
    from draftviewproviders.view_hatch import ViewProviderDraftHatch
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftviewproviders/view_hatch.py", line 33, in <module>
    from draftguitools.gui_hatch import Draft_Hatch_TaskPanel
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/draftguitools/gui_hatch.py", line 36, in <module>
    class Draft_Hatch(gui_base.GuiCommandNeedsSelection):
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: partially initialized module 'draftguitools.gui_base' has no attribute 'GuiCommandNeedsSelection' (most likely due to a circular import)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 377, in InitApplications
  File "/Applications/FreeCAD.app/Contents/Resources/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/Users/sake/Library/Application Support/FreeCAD/v1-1/Mod/GDML/./freecad/gdml/init_gui.py", line 40, in <module>
    import DraftTools
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/DraftTools.py", line 53, in <module>
    import DraftGui  # Initializes the DraftToolBar class
    ^^^^^^^^^^^^^^^
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/DraftGui.py", line 2111, in <module>
    FreeCADGui.draftToolBar = DraftToolBar()
                              ^^^^^^^^^^^^^^
  File "/Applications/FreeCAD.app/Contents/Resources/Mod/Draft/DraftGui.py", line 221, in __init__
    self.tray.setObjectName("Draft tray")
    ^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'setObjectName'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions