From cea3591b23d077154c35da0e81509ab5750755ab Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 00:30:20 -0400 Subject: [PATCH 01/12] Remove redundant copyright headers --- Addon.py | 21 ----------------- AddonCatalog.py | 21 ----------------- AddonCatalogCacheCreator.py | 21 ----------------- AddonManager.py | 22 ------------------ AddonManagerOptions.py | 21 ----------------- AddonManagerTest/app/mocks.py | 21 ----------------- AddonManagerTest/app/test_addon.py | 22 +----------------- .../app/test_addon_catalog_cache_creator.py | 21 ----------------- .../app/test_dependency_installer.py | 21 ----------------- .../app/test_freecad_interface.py | 21 ----------------- AddonManagerTest/app/test_git.py | 22 ------------------ .../app/test_installation_manifest.py | 21 ----------------- AddonManagerTest/app/test_installer.py | 21 ----------------- AddonManagerTest/app/test_licenses.py | 22 +----------------- AddonManagerTest/app/test_macro.py | 22 +----------------- .../app/test_macro_cache_creator.py | 21 ----------------- AddonManagerTest/app/test_macro_parser.py | 21 ----------------- AddonManagerTest/app/test_metadata.py | 22 +----------------- AddonManagerTest/app/test_python_deps.py | 22 +----------------- AddonManagerTest/app/test_uninstaller.py | 21 ----------------- AddonManagerTest/app/test_utilities.py | 21 ----------------- AddonManagerTest/app/test_workers_startup.py | 22 +----------------- AddonManagerTest/data/macro_template.FCStd | 23 +------------------ .../data/missing_macro_metadata.FCStd | 23 +------------------ AddonManagerTest/gui/gui_mocks.py | 21 ----------------- AddonManagerTest/gui/test_installer_gui.py | 22 +----------------- AddonManagerTest/gui/test_toolbar_adapter.py | 21 ----------------- AddonManagerTest/gui/test_uninstaller_gui.py | 21 ----------------- AddonManagerTest/gui/test_update_all_gui.py | 21 ----------------- .../gui/test_widget_addon_buttons.py | 21 ----------------- .../gui/test_widget_filter_selector.py | 21 ----------------- .../gui/test_widget_global_buttons.py | 21 ----------------- .../gui/test_widget_package_details_view.py | 21 ----------------- .../gui/test_widget_progress_bar.py | 21 ----------------- .../gui/test_widget_readme_browser.py | 22 ------------------ AddonManagerTest/gui/test_widget_search.py | 21 ----------------- .../gui/test_widget_view_control_bar.py | 22 +----------------- .../gui/test_widget_view_selector.py | 22 +----------------- AddonManagerTest/gui/test_workers_utility.py | 21 ----------------- AddonStats.py | 21 ----------------- MacroCacheCreator.py | 21 ----------------- NetworkManager.py | 21 ----------------- PySideWrapper.py | 21 ----------------- .../translations/run_translation_cycle.py | 21 ----------------- TestAddonManagerApp.py | 21 ----------------- TestAddonManagerGui.py | 21 ----------------- Widgets/addonmanager_colors.py | 21 ----------------- Widgets/addonmanager_utility_dialogs.py | 21 ----------------- Widgets/addonmanager_widget_addon_buttons.py | 21 ----------------- .../addonmanager_widget_filter_selector.py | 21 ----------------- Widgets/addonmanager_widget_global_buttons.py | 21 ----------------- ...ddonmanager_widget_package_details_view.py | 21 ----------------- Widgets/addonmanager_widget_progress_bar.py | 21 ----------------- Widgets/addonmanager_widget_readme_browser.py | 22 +----------------- Widgets/addonmanager_widget_search.py | 21 ----------------- .../addonmanager_widget_view_control_bar.py | 21 ----------------- Widgets/addonmanager_widget_view_selector.py | 21 ----------------- Widgets/spinner.py | 22 +----------------- addonmanager_connection_checker.py | 21 ----------------- addonmanager_dependency_installer.py | 21 ----------------- addonmanager_firstrun.py | 21 ----------------- addonmanager_freecad_interface.py | 21 ----------------- addonmanager_git.py | 21 ----------------- addonmanager_icon_utilities.py | 22 +----------------- addonmanager_installation_manifest.py | 23 ++----------------- addonmanager_installer.py | 22 +----------------- addonmanager_installer_gui.py | 22 +----------------- addonmanager_licenses.py | 22 +----------------- addonmanager_macro.py | 23 +------------------ addonmanager_macro_parser.py | 22 +----------------- addonmanager_metadata.py | 22 +----------------- addonmanager_package_details_controller.py | 22 +----------------- addonmanager_preferences_migrations.py | 22 +----------------- addonmanager_python_deps.py | 21 ----------------- addonmanager_python_deps_gui.py | 21 ----------------- addonmanager_readme_controller.py | 21 ----------------- addonmanager_uninstaller.py | 21 ----------------- addonmanager_uninstaller_gui.py | 21 ----------------- addonmanager_update_all_gui.py | 21 ----------------- addonmanager_utilities.py | 22 ------------------ addonmanager_workers_startup.py | 22 ------------------ addonmanager_workers_utility.py | 21 ----------------- composite_view.py | 21 ----------------- main.py | 22 +----------------- package.xml | 1 + package_list.py | 21 ----------------- 86 files changed, 26 insertions(+), 1793 deletions(-) diff --git a/Addon.py b/Addon.py index 26de1d78..66c45587 100644 --- a/Addon.py +++ b/Addon.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines the Addon class to encapsulate information about FreeCAD Addons""" diff --git a/AddonCatalog.py b/AddonCatalog.py index 275f416c..965b1b84 100644 --- a/AddonCatalog.py +++ b/AddonCatalog.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """The Addon Catalog is the main list of all Addons along with their various sources and compatible versions. Added in FreeCAD 1.1 to replace .gitmodules.""" diff --git a/AddonCatalogCacheCreator.py b/AddonCatalogCacheCreator.py index 05b0195a..6b387a42 100644 --- a/AddonCatalogCacheCreator.py +++ b/AddonCatalogCacheCreator.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Classes and utility functions to generate a remotely hosted cache of all addon catalog entries. Intended to be run by a server-side systemd timer to generate a file that is then loaded by the diff --git a/AddonManager.py b/AddonManager.py index e592ce59..9c7a1642 100644 --- a/AddonManager.py +++ b/AddonManager.py @@ -1,26 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * -# * Copyright (c) 2015 Yorik van Havre * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import os import functools diff --git a/AddonManagerOptions.py b/AddonManagerOptions.py index dacb1d1d..1a141ef1 100644 --- a/AddonManagerOptions.py +++ b/AddonManagerOptions.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Contains the Addon Manager's preferences dialog management class""" diff --git a/AddonManagerTest/app/mocks.py b/AddonManagerTest/app/mocks.py index 384c7c6c..31a97cf5 100644 --- a/AddonManagerTest/app/mocks.py +++ b/AddonManagerTest/app/mocks.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Mock objects for use when testing the addon manager non-GUI code.""" diff --git a/AddonManagerTest/app/test_addon.py b/AddonManagerTest/app/test_addon.py index ae330c69..db9c33e5 100644 --- a/AddonManagerTest/app/test_addon.py +++ b/AddonManagerTest/app/test_addon.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import os import tempfile import unittest diff --git a/AddonManagerTest/app/test_addon_catalog_cache_creator.py b/AddonManagerTest/app/test_addon_catalog_cache_creator.py index 6c019fca..cd60515c 100644 --- a/AddonManagerTest/app/test_addon_catalog_cache_creator.py +++ b/AddonManagerTest/app/test_addon_catalog_cache_creator.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """The AddonCatalogCacheCreator is an independent script that is run server-side to generate a cache of the addon metadata and icons. These tests verify the functionality of its methods.""" diff --git a/AddonManagerTest/app/test_dependency_installer.py b/AddonManagerTest/app/test_dependency_installer.py index c70e0849..135fc226 100644 --- a/AddonManagerTest/app/test_dependency_installer.py +++ b/AddonManagerTest/app/test_dependency_installer.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import functools import os diff --git a/AddonManagerTest/app/test_freecad_interface.py b/AddonManagerTest/app/test_freecad_interface.py index 82056233..835ff707 100644 --- a/AddonManagerTest/app/test_freecad_interface.py +++ b/AddonManagerTest/app/test_freecad_interface.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Tests for the Addon Manager's FreeCAD interface classes.""" diff --git a/AddonManagerTest/app/test_git.py b/AddonManagerTest/app/test_git.py index 81ffcc24..dc59feda 100644 --- a/AddonManagerTest/app/test_git.py +++ b/AddonManagerTest/app/test_git.py @@ -1,26 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** - import unittest import os diff --git a/AddonManagerTest/app/test_installation_manifest.py b/AddonManagerTest/app/test_installation_manifest.py index 9e6c5bd3..09269da8 100644 --- a/AddonManagerTest/app/test_installation_manifest.py +++ b/AddonManagerTest/app/test_installation_manifest.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import datetime import json diff --git a/AddonManagerTest/app/test_installer.py b/AddonManagerTest/app/test_installer.py index bd77cc12..c0bd2589 100644 --- a/AddonManagerTest/app/test_installer.py +++ b/AddonManagerTest/app/test_installer.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Contains the unit test class for addonmanager_installer.py non-GUI functionality.""" diff --git a/AddonManagerTest/app/test_licenses.py b/AddonManagerTest/app/test_licenses.py index 92616ae1..968c56e7 100644 --- a/AddonManagerTest/app/test_licenses.py +++ b/AddonManagerTest/app/test_licenses.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import unittest import unittest.mock as mock diff --git a/AddonManagerTest/app/test_macro.py b/AddonManagerTest/app/test_macro.py index 8ac290e0..3c606b71 100644 --- a/AddonManagerTest/app/test_macro.py +++ b/AddonManagerTest/app/test_macro.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import base64 import os import tempfile diff --git a/AddonManagerTest/app/test_macro_cache_creator.py b/AddonManagerTest/app/test_macro_cache_creator.py index 46e4a050..b98b3499 100644 --- a/AddonManagerTest/app/test_macro_cache_creator.py +++ b/AddonManagerTest/app/test_macro_cache_creator.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest from unittest.mock import patch, MagicMock diff --git a/AddonManagerTest/app/test_macro_parser.py b/AddonManagerTest/app/test_macro_parser.py index 53c7fdb8..0a258971 100644 --- a/AddonManagerTest/app/test_macro_parser.py +++ b/AddonManagerTest/app/test_macro_parser.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Tests for the MacroParser class""" diff --git a/AddonManagerTest/app/test_metadata.py b/AddonManagerTest/app/test_metadata.py index 57081250..60de73b8 100644 --- a/AddonManagerTest/app/test_metadata.py +++ b/AddonManagerTest/app/test_metadata.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023-2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import os import tempfile import unittest diff --git a/AddonManagerTest/app/test_python_deps.py b/AddonManagerTest/app/test_python_deps.py index e5bed28e..edaaedb2 100644 --- a/AddonManagerTest/app/test_python_deps.py +++ b/AddonManagerTest/app/test_python_deps.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import subprocess import unittest from unittest.mock import MagicMock, patch diff --git a/AddonManagerTest/app/test_uninstaller.py b/AddonManagerTest/app/test_uninstaller.py index 9ccfef5c..f6c2e843 100644 --- a/AddonManagerTest/app/test_uninstaller.py +++ b/AddonManagerTest/app/test_uninstaller.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Contains the unit test class for addonmanager_uninstaller.py non-GUI functionality.""" diff --git a/AddonManagerTest/app/test_utilities.py b/AddonManagerTest/app/test_utilities.py index 59dfd93d..0937fc85 100644 --- a/AddonManagerTest/app/test_utilities.py +++ b/AddonManagerTest/app/test_utilities.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** from datetime import datetime import unittest diff --git a/AddonManagerTest/app/test_workers_startup.py b/AddonManagerTest/app/test_workers_startup.py index 79c29688..48093942 100644 --- a/AddonManagerTest/app/test_workers_startup.py +++ b/AddonManagerTest/app/test_workers_startup.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import json import unittest from unittest.mock import patch, MagicMock diff --git a/AddonManagerTest/data/macro_template.FCStd b/AddonManagerTest/data/macro_template.FCStd index 9cc885bd..66062a70 100644 --- a/AddonManagerTest/data/macro_template.FCStd +++ b/AddonManagerTest/data/macro_template.FCStd @@ -1,27 +1,6 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later # -*- coding: utf-8 -*- -# *************************************************************************** -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of the FreeCAD CAx development system. * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * -# * 02110-1301 USA * -# * * -# *************************************************************************** - __Title__ = "TITLE" __Author__ = "AUTHOR" __Date__ = "DATE" diff --git a/AddonManagerTest/data/missing_macro_metadata.FCStd b/AddonManagerTest/data/missing_macro_metadata.FCStd index 1dc58af6..3d0843e5 100644 --- a/AddonManagerTest/data/missing_macro_metadata.FCStd +++ b/AddonManagerTest/data/missing_macro_metadata.FCStd @@ -1,25 +1,4 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later # -*- coding: utf-8 -*- -# *************************************************************************** -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of the FreeCAD CAx development system. * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * -# * 02110-1301 USA * -# * * -# *************************************************************************** - # This file contains no metadata diff --git a/AddonManagerTest/gui/gui_mocks.py b/AddonManagerTest/gui/gui_mocks.py index 3edd8c7e..90324835 100644 --- a/AddonManagerTest/gui/gui_mocks.py +++ b/AddonManagerTest/gui/gui_mocks.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import sys from typing import Optional diff --git a/AddonManagerTest/gui/test_installer_gui.py b/AddonManagerTest/gui/test_installer_gui.py index 2fd21275..e08a4d35 100644 --- a/AddonManagerTest/gui/test_installer_gui.py +++ b/AddonManagerTest/gui/test_installer_gui.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import sys from enum import IntEnum import os diff --git a/AddonManagerTest/gui/test_toolbar_adapter.py b/AddonManagerTest/gui/test_toolbar_adapter.py index 0d89f172..e4789677 100644 --- a/AddonManagerTest/gui/test_toolbar_adapter.py +++ b/AddonManagerTest/gui/test_toolbar_adapter.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest from unittest.mock import MagicMock, Mock, patch diff --git a/AddonManagerTest/gui/test_uninstaller_gui.py b/AddonManagerTest/gui/test_uninstaller_gui.py index 8c1c35fa..2561a7f0 100644 --- a/AddonManagerTest/gui/test_uninstaller_gui.py +++ b/AddonManagerTest/gui/test_uninstaller_gui.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import functools import unittest diff --git a/AddonManagerTest/gui/test_update_all_gui.py b/AddonManagerTest/gui/test_update_all_gui.py index b9a4de30..bf9394e0 100644 --- a/AddonManagerTest/gui/test_update_all_gui.py +++ b/AddonManagerTest/gui/test_update_all_gui.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** from unittest import TestCase from unittest.mock import patch diff --git a/AddonManagerTest/gui/test_widget_addon_buttons.py b/AddonManagerTest/gui/test_widget_addon_buttons.py index e14f60e5..964037f8 100644 --- a/AddonManagerTest/gui/test_widget_addon_buttons.py +++ b/AddonManagerTest/gui/test_widget_addon_buttons.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_filter_selector.py b/AddonManagerTest/gui/test_widget_filter_selector.py index c2d32809..7f8c5b1d 100644 --- a/AddonManagerTest/gui/test_widget_filter_selector.py +++ b/AddonManagerTest/gui/test_widget_filter_selector.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_global_buttons.py b/AddonManagerTest/gui/test_widget_global_buttons.py index 969248dd..99c58a0c 100644 --- a/AddonManagerTest/gui/test_widget_global_buttons.py +++ b/AddonManagerTest/gui/test_widget_global_buttons.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_package_details_view.py b/AddonManagerTest/gui/test_widget_package_details_view.py index de8293ec..56b25fc1 100644 --- a/AddonManagerTest/gui/test_widget_package_details_view.py +++ b/AddonManagerTest/gui/test_widget_package_details_view.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Tests for the PackageDetailsView widget. Many tests are currently just stubs that ensure the code paths are executed so that the CI can find any errors in Python or Qt5/Qt6 compatibility. diff --git a/AddonManagerTest/gui/test_widget_progress_bar.py b/AddonManagerTest/gui/test_widget_progress_bar.py index 1e6dca06..cf099bfa 100644 --- a/AddonManagerTest/gui/test_widget_progress_bar.py +++ b/AddonManagerTest/gui/test_widget_progress_bar.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import sys import unittest diff --git a/AddonManagerTest/gui/test_widget_readme_browser.py b/AddonManagerTest/gui/test_widget_readme_browser.py index fb2e3fec..7a5ede82 100644 --- a/AddonManagerTest/gui/test_widget_readme_browser.py +++ b/AddonManagerTest/gui/test_widget_readme_browser.py @@ -1,26 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** - import unittest diff --git a/AddonManagerTest/gui/test_widget_search.py b/AddonManagerTest/gui/test_widget_search.py index 27434c50..8c3f3a61 100644 --- a/AddonManagerTest/gui/test_widget_search.py +++ b/AddonManagerTest/gui/test_widget_search.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_view_control_bar.py b/AddonManagerTest/gui/test_widget_view_control_bar.py index 1d09764c..6a13bf63 100644 --- a/AddonManagerTest/gui/test_widget_view_control_bar.py +++ b/AddonManagerTest/gui/test_widget_view_control_bar.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import unittest from PySideWrapper import QtCore, QtWidgets diff --git a/AddonManagerTest/gui/test_widget_view_selector.py b/AddonManagerTest/gui/test_widget_view_selector.py index ae3664e0..af72d95c 100644 --- a/AddonManagerTest/gui/test_widget_view_selector.py +++ b/AddonManagerTest/gui/test_widget_view_selector.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import unittest from PySideWrapper import QtWidgets diff --git a/AddonManagerTest/gui/test_workers_utility.py b/AddonManagerTest/gui/test_workers_utility.py index 9f11a6b4..5a32e67a 100644 --- a/AddonManagerTest/gui/test_workers_utility.py +++ b/AddonManagerTest/gui/test_workers_utility.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import unittest import os diff --git a/AddonStats.py b/AddonStats.py index 4cf7b319..4b933a24 100644 --- a/AddonStats.py +++ b/AddonStats.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Classes and structures related to Addon sidecar information""" from __future__ import annotations diff --git a/MacroCacheCreator.py b/MacroCacheCreator.py index bd728a69..9067f8cd 100644 --- a/MacroCacheCreator.py +++ b/MacroCacheCreator.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """The MacroCacheCreator is an independent script run server-side to generate a cache of the macros and their metadata. Supports both git-based and wiki-based macros.""" diff --git a/NetworkManager.py b/NetworkManager.py index 7f90fa6a..8533645f 100644 --- a/NetworkManager.py +++ b/NetworkManager.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """ ############################################################################# diff --git a/PySideWrapper.py b/PySideWrapper.py index 44176b98..e3ec54de 100644 --- a/PySideWrapper.py +++ b/PySideWrapper.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Wrap PySide so the same import can use either PySide6 or PySide2. Also support using the FreeCAD wrapper, if that is available.""" diff --git a/Resources/translations/run_translation_cycle.py b/Resources/translations/run_translation_cycle.py index a4a57328..8047d610 100644 --- a/Resources/translations/run_translation_cycle.py +++ b/Resources/translations/run_translation_cycle.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * This is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * The software is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with the FreeCAD Addon Manager. If not, see * -# * . * -# * * -# *************************************************************************** """Run a full CrowdIn translation cycle for the Addon Manager. Requires that the CrowdIn API token is stored in ~/.crowdin-freecad-token, and that lupdate be in PATH.""" diff --git a/TestAddonManagerApp.py b/TestAddonManagerApp.py index 4aba8392..2ba786ff 100644 --- a/TestAddonManagerApp.py +++ b/TestAddonManagerApp.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import addonmanager_freecad_interface as fci diff --git a/TestAddonManagerGui.py b/TestAddonManagerGui.py index d55f2260..29e50134 100644 --- a/TestAddonManagerGui.py +++ b/TestAddonManagerGui.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import addonmanager_freecad_interface as fci diff --git a/Widgets/addonmanager_colors.py b/Widgets/addonmanager_colors.py index f4448ac4..92cbb99b 100644 --- a/Widgets/addonmanager_colors.py +++ b/Widgets/addonmanager_colors.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** import addonmanager_freecad_interface as fci from PySideWrapper import QtGui diff --git a/Widgets/addonmanager_utility_dialogs.py b/Widgets/addonmanager_utility_dialogs.py index 18027c8d..f4bbbcba 100644 --- a/Widgets/addonmanager_utility_dialogs.py +++ b/Widgets/addonmanager_utility_dialogs.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** from enum import Enum from PySideWrapper import QtWidgets diff --git a/Widgets/addonmanager_widget_addon_buttons.py b/Widgets/addonmanager_widget_addon_buttons.py index 22784325..11e26534 100644 --- a/Widgets/addonmanager_widget_addon_buttons.py +++ b/Widgets/addonmanager_widget_addon_buttons.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a QWidget-derived class for displaying the single-addon buttons.""" diff --git a/Widgets/addonmanager_widget_filter_selector.py b/Widgets/addonmanager_widget_filter_selector.py index e3754d74..333c00e7 100644 --- a/Widgets/addonmanager_widget_filter_selector.py +++ b/Widgets/addonmanager_widget_filter_selector.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * -# * * -# * This file is part of the FreeCAD Addon Manager. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a QWidget-derived class for displaying the view selection buttons.""" diff --git a/Widgets/addonmanager_widget_global_buttons.py b/Widgets/addonmanager_widget_global_buttons.py index 251f967f..2a4db47f 100644 --- a/Widgets/addonmanager_widget_global_buttons.py +++ b/Widgets/addonmanager_widget_global_buttons.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a QWidget-derived class for displaying a set of buttons that affect the Addon Manager as a whole (rather than a specific Addon). Typically inserted at the bottom of the Addon diff --git a/Widgets/addonmanager_widget_package_details_view.py b/Widgets/addonmanager_widget_package_details_view.py index b45eb6d7..0e5eddc1 100644 --- a/Widgets/addonmanager_widget_package_details_view.py +++ b/Widgets/addonmanager_widget_package_details_view.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** from dataclasses import dataclass from enum import Enum, auto diff --git a/Widgets/addonmanager_widget_progress_bar.py b/Widgets/addonmanager_widget_progress_bar.py index ad40e36f..fb0dd3f0 100644 --- a/Widgets/addonmanager_widget_progress_bar.py +++ b/Widgets/addonmanager_widget_progress_bar.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a QWidget-derived class for displaying the cache load status.""" diff --git a/Widgets/addonmanager_widget_readme_browser.py b/Widgets/addonmanager_widget_readme_browser.py index f4a2392f..dd01c55d 100644 --- a/Widgets/addonmanager_widget_readme_browser.py +++ b/Widgets/addonmanager_widget_readme_browser.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import re import addonmanager_freecad_interface as fci diff --git a/Widgets/addonmanager_widget_search.py b/Widgets/addonmanager_widget_search.py index e50186f1..78ae8568 100644 --- a/Widgets/addonmanager_widget_search.py +++ b/Widgets/addonmanager_widget_search.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a QWidget-derived class for displaying the view selection buttons.""" diff --git a/Widgets/addonmanager_widget_view_control_bar.py b/Widgets/addonmanager_widget_view_control_bar.py index e266823d..87465b25 100644 --- a/Widgets/addonmanager_widget_view_control_bar.py +++ b/Widgets/addonmanager_widget_view_control_bar.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a class derived from QWidget for displaying the bar at the top of the addons list.""" diff --git a/Widgets/addonmanager_widget_view_selector.py b/Widgets/addonmanager_widget_view_selector.py index 5c24c845..5996c699 100644 --- a/Widgets/addonmanager_widget_view_selector.py +++ b/Widgets/addonmanager_widget_view_selector.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines a QWidget-derived class for displaying the view selection buttons.""" diff --git a/Widgets/spinner.py b/Widgets/spinner.py index 8ab8ec81..4bec7742 100644 --- a/Widgets/spinner.py +++ b/Widgets/spinner.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import os from PySideWrapper import QtCore, QtGui, QtWidgets, QtSvg diff --git a/addonmanager_connection_checker.py b/addonmanager_connection_checker.py index a440933a..1c293eae 100644 --- a/addonmanager_connection_checker.py +++ b/addonmanager_connection_checker.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """System for checking the network connection status asynchronously.""" diff --git a/addonmanager_dependency_installer.py b/addonmanager_dependency_installer.py index 0f276b66..7a1fd269 100644 --- a/addonmanager_dependency_installer.py +++ b/addonmanager_dependency_installer.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Class to manage installation of sets of Python dependencies.""" diff --git a/addonmanager_firstrun.py b/addonmanager_firstrun.py index bbe31e5e..960e6576 100644 --- a/addonmanager_firstrun.py +++ b/addonmanager_firstrun.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Class to display a first-run dialog for the Addon Manager""" diff --git a/addonmanager_freecad_interface.py b/addonmanager_freecad_interface.py index ec10e72d..2f7548bd 100644 --- a/addonmanager_freecad_interface.py +++ b/addonmanager_freecad_interface.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Classes to encapsulate the Addon Manager's interaction with FreeCAD, and to provide replacements when the Addon Manager is not run from within FreeCAD (e.g. during unit diff --git a/addonmanager_git.py b/addonmanager_git.py index c48b85ab..dd9e76c7 100644 --- a/addonmanager_git.py +++ b/addonmanager_git.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Wrapper around git executable to simplify calling git commands from Python.""" diff --git a/addonmanager_icon_utilities.py b/addonmanager_icon_utilities.py index 201cad27..f448d7a7 100644 --- a/addonmanager_icon_utilities.py +++ b/addonmanager_icon_utilities.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import re import os diff --git a/addonmanager_installation_manifest.py b/addonmanager_installation_manifest.py index a347c5a7..153432b9 100644 --- a/addonmanager_installation_manifest.py +++ b/addonmanager_installation_manifest.py @@ -1,25 +1,6 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + + import json import os import threading diff --git a/addonmanager_installer.py b/addonmanager_installer.py index 5a8c4ad8..cd278128 100644 --- a/addonmanager_installer.py +++ b/addonmanager_installer.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Contains the classes to manage Addon installation: intended as a stable API, safe for external code to call and to rely upon existing. See classes AddonInstaller and MacroInstaller for details. diff --git a/addonmanager_installer_gui.py b/addonmanager_installer_gui.py index b68d2dc4..11ed8af7 100644 --- a/addonmanager_installer_gui.py +++ b/addonmanager_installer_gui.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Classes to manage the GUI presentation of installing an Addon (e.g., the sequence of dialog boxes that do dependency resolution, error handling, etc.). See AddonInstallerGUI and MacroInstallerGUI diff --git a/addonmanager_licenses.py b/addonmanager_licenses.py index b40b5275..0a730980 100644 --- a/addonmanager_licenses.py +++ b/addonmanager_licenses.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2024 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Utilities for working with licenses. Based on SPDX info downloaded from https://github.com/spdx/license-list-data and stored as part of the FreeCAD repo, loaded into a Qt diff --git a/addonmanager_macro.py b/addonmanager_macro.py index 90a04a41..eac68a26 100644 --- a/addonmanager_macro.py +++ b/addonmanager_macro.py @@ -1,26 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * Copyright (c) 2018 Gaël Écorchard * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Unified handler for FreeCAD macros that can be obtained from different sources.""" import base64 diff --git a/addonmanager_macro_parser.py b/addonmanager_macro_parser.py index c2d2177e..823f5d27 100644 --- a/addonmanager_macro_parser.py +++ b/addonmanager_macro_parser.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Contains the parser class for extracting metadata from a FreeCAD macro""" diff --git a/addonmanager_metadata.py b/addonmanager_metadata.py index b5cb0f49..3af13f29 100644 --- a/addonmanager_metadata.py +++ b/addonmanager_metadata.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Classes for working with Addon metadata, as documented at https://wiki.FreeCAD.org/Package_metadata""" diff --git a/addonmanager_package_details_controller.py b/addonmanager_package_details_controller.py index 0a9eda08..d73b0aa2 100644 --- a/addonmanager_package_details_controller.py +++ b/addonmanager_package_details_controller.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + """Provides the PackageDetails widget.""" diff --git a/addonmanager_preferences_migrations.py b/addonmanager_preferences_migrations.py index 14fe92e4..b8ebb69b 100644 --- a/addonmanager_preferences_migrations.py +++ b/addonmanager_preferences_migrations.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + from urllib.parse import urlparse diff --git a/addonmanager_python_deps.py b/addonmanager_python_deps.py index 0c0ab33f..44b720b4 100644 --- a/addonmanager_python_deps.py +++ b/addonmanager_python_deps.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Provides classes and support functions for managing the automatically installed Python library dependencies. No support is provided for uninstalling those dependencies diff --git a/addonmanager_python_deps_gui.py b/addonmanager_python_deps_gui.py index 29252be7..b71b3a34 100644 --- a/addonmanager_python_deps_gui.py +++ b/addonmanager_python_deps_gui.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """GUI for python dependency management.""" diff --git a/addonmanager_readme_controller.py b/addonmanager_readme_controller.py index ab01ce54..47a20508 100644 --- a/addonmanager_readme_controller.py +++ b/addonmanager_readme_controller.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2024 The FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """A Qt Widget for displaying Addon README information""" diff --git a/addonmanager_uninstaller.py b/addonmanager_uninstaller.py index ccfa930d..a21c7c9d 100644 --- a/addonmanager_uninstaller.py +++ b/addonmanager_uninstaller.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Contains the classes to manage Addon removal: intended as a stable API, safe for external code to call and to rely upon existing. See classes AddonUninstaller and diff --git a/addonmanager_uninstaller_gui.py b/addonmanager_uninstaller_gui.py index 816cd452..853876dc 100644 --- a/addonmanager_uninstaller_gui.py +++ b/addonmanager_uninstaller_gui.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """GUI functions for uninstalling an Addon or Macro.""" diff --git a/addonmanager_update_all_gui.py b/addonmanager_update_all_gui.py index 4e8bc974..1b715de3 100644 --- a/addonmanager_update_all_gui.py +++ b/addonmanager_update_all_gui.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2025 FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Class to manage the display of an Update All dialog.""" import threading diff --git a/addonmanager_utilities.py b/addonmanager_utilities.py index 281a3e73..d3a62403 100644 --- a/addonmanager_utilities.py +++ b/addonmanager_utilities.py @@ -1,26 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * Copyright (c) 2018 Gaël Écorchard * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Utilities to work across different platforms, providers and python versions""" diff --git a/addonmanager_workers_startup.py b/addonmanager_workers_startup.py index 9c725d99..ae8a5119 100644 --- a/addonmanager_workers_startup.py +++ b/addonmanager_workers_startup.py @@ -1,26 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * Copyright (c) 2019 Yorik van Havre * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Worker thread classes for Addon Manager startup""" import hashlib diff --git a/addonmanager_workers_utility.py b/addonmanager_workers_utility.py index 4d617a94..53a9f5c9 100644 --- a/addonmanager_workers_utility.py +++ b/addonmanager_workers_utility.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Misc. worker thread classes for the FreeCAD Addon Manager.""" diff --git a/composite_view.py b/composite_view.py index 7e7a96ae..8e1e6b42 100644 --- a/composite_view.py +++ b/composite_view.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Provides a class for showing the list view and detail view at the same time.""" diff --git a/main.py b/main.py index cc13a627..fa836336 100644 --- a/main.py +++ b/main.py @@ -1,25 +1,5 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2025 The FreeCAD project association AISBL * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** + import os import sys diff --git a/package.xml b/package.xml index a86fe272..9f80cbfa 100644 --- a/package.xml +++ b/package.xml @@ -11,6 +11,7 @@ Yorik van Havre Jonathan Wiedemann Kurt Kremitzki + Gaël Écorchard LGPL-2.1-or-later https://github.com/FreeCAD/AddonManager https://github.com/FreeCAD/AddonManager/issues diff --git a/package_list.py b/package_list.py index 231f0240..d0d6e2a6 100644 --- a/package_list.py +++ b/package_list.py @@ -1,25 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2022-2023 FreeCAD Project Association * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** """Defines the PackageList QWidget for displaying a list of Addons.""" import threading From b68be1bae3e80bac50a8c4adbce657ae0ddba4ba Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 00:31:02 -0400 Subject: [PATCH 02/12] Correct manifest license file reference --- package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.xml b/package.xml index 9f80cbfa..63a98e42 100644 --- a/package.xml +++ b/package.xml @@ -12,7 +12,7 @@ Jonathan Wiedemann Kurt Kremitzki Gaël Écorchard - LGPL-2.1-or-later + LGPL-2.1-or-later https://github.com/FreeCAD/AddonManager https://github.com/FreeCAD/AddonManager/issues https://github.com/FreeCAD/AddonManager/blob/dev/README.md From cb57a6f057bf4032ded5bec610dc557c5b79d143 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 00:32:48 -0400 Subject: [PATCH 03/12] Remove Python 2 UTF-8 declarations --- AddonManagerTest/data/DoNothing.FCMacro | 1 - AddonManagerTest/data/macro_template.FCStd | 1 - AddonManagerTest/data/missing_macro_metadata.FCStd | 1 - 3 files changed, 3 deletions(-) diff --git a/AddonManagerTest/data/DoNothing.FCMacro b/AddonManagerTest/data/DoNothing.FCMacro index b20265d3..da0abd74 100644 --- a/AddonManagerTest/data/DoNothing.FCMacro +++ b/AddonManagerTest/data/DoNothing.FCMacro @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- __Title__ = 'Do Nothing' __Author__ = 'Chris Hennes' diff --git a/AddonManagerTest/data/macro_template.FCStd b/AddonManagerTest/data/macro_template.FCStd index 66062a70..9d456907 100644 --- a/AddonManagerTest/data/macro_template.FCStd +++ b/AddonManagerTest/data/macro_template.FCStd @@ -1,5 +1,4 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# -*- coding: utf-8 -*- __Title__ = "TITLE" __Author__ = "AUTHOR" diff --git a/AddonManagerTest/data/missing_macro_metadata.FCStd b/AddonManagerTest/data/missing_macro_metadata.FCStd index 3d0843e5..8b047cc2 100644 --- a/AddonManagerTest/data/missing_macro_metadata.FCStd +++ b/AddonManagerTest/data/missing_macro_metadata.FCStd @@ -1,4 +1,3 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -# -*- coding: utf-8 -*- # This file contains no metadata From a483e5efa6ec44028e07b41bd2183af63a927e6f Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 00:43:08 -0400 Subject: [PATCH 04/12] Add uv / pyproject setup --- pyproject.toml | 11 +++++ uv.lock | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 pyproject.toml create mode 100644 uv.lock diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..c58f59cd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ + +[project] +version = '0.0.0' +name = 'AddonManager' + +requires-python = '>=3.10' + +dependencies = [ + 'freecad-stubs>=1.0.21' , + 'pyside6>=6.9.2' +] \ No newline at end of file diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..a70ed2a4 --- /dev/null +++ b/uv.lock @@ -0,0 +1,111 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" + +[[package]] +name = "addonmanager" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "freecad-stubs" }, + { name = "pyside6" }, +] + +[package.metadata] +requires-dist = [ + { name = "freecad-stubs", specifier = ">=1.0.21" }, + { name = "pyside6", specifier = ">=6.9.2" }, +] + +[[package]] +name = "freecad-stubs" +version = "1.0.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "qtpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/52/efd3cb97dad75cc5f922d5081b16f866cfcbbcbf948d404db298f9b21e0d/freecad_stubs-1.0.21.tar.gz", hash = "sha256:816b2ca663a44e75189482ab970f90278a112ff2b99f64edd216c13d553b52f5", size = 208363, upload-time = "2025-07-21T23:58:37.615Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/bc/cdfb911f753b4b4f8e400d66d805e5718e32632837507b574a573b3efa24/freecad_stubs-1.0.21-py3-none-any.whl", hash = "sha256:fa96244b1a05e5130b0f96b3eb4ef9aca0f0aa437fff8000cb0750bdbb4edccc", size = 218416, upload-time = "2025-07-21T23:58:36.052Z" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "pyside6" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyside6-addons" }, + { name = "pyside6-essentials" }, + { name = "shiboken6" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/98/84b16f78b5d92dd234fb1eb9890a350a5b0c83d985bb8c44a92f813a2d02/pyside6-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:c2cbc5dc2a164e3c7c51b3435e24203e90e5edd518c865466afccbd2e5872bb0", size = 558115, upload-time = "2025-10-08T09:47:09.246Z" }, + { url = "https://files.pythonhosted.org/packages/4e/76/0961c8c5653ecb60a6881b649dcb6b71a6be5bd1c8d441ecc48ac7f50b1a/pyside6-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ae8c3c8339cd7c3c9faa7cc5c52670dcc8662ccf4b63a6fed61c6345b90c4c01", size = 557762, upload-time = "2025-10-08T09:47:11.819Z" }, + { url = "https://files.pythonhosted.org/packages/c8/73/6187502fff8b6599443d15c46dd900b2ded24be5aacb2becce33f6faf566/pyside6-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:9f402f883e640048fab246d36e298a5e16df9b18ba2e8c519877e472d3602820", size = 558299, upload-time = "2025-10-08T09:47:14.255Z" }, + { url = "https://files.pythonhosted.org/packages/43/67/94794ebaf198bbdb35cb77f19f38370f9b323b036ab149874bc33c38faab/pyside6-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:70a8bcc73ea8d6baab70bba311eac77b9a1d31f658d0b418e15eb6ea36c97e6f", size = 564367, upload-time = "2025-10-08T09:47:16.287Z" }, + { url = "https://files.pythonhosted.org/packages/1d/cc/552331d413c1b933d54ed45e33cc7ff29d0b239677975fe2528e7ac8bfbc/pyside6-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:4b709bdeeb89d386059343a5a706fc185cee37b517bda44c7d6b64d5fdaf3339", size = 548826, upload-time = "2025-10-08T09:47:18.399Z" }, +] + +[[package]] +name = "pyside6-addons" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyside6-essentials" }, + { name = "shiboken6" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/23/9fbdec2ce16244ac3fe28e6d44c39c70465c93a03325939a792fd00fde7f/pyside6_addons-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:88e61e21ee4643cdd9efb39ec52f4dc1ac74c0b45c5b7fa453d03c094f0a8a5c", size = 322248256, upload-time = "2025-10-08T09:47:37.844Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/d129210f2c7366b4e1bf5bb6230be42052b29e8ba1b1d7db6ef333cf5a39/pyside6_addons-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:08d4ed46c4c9a353a9eb84134678f8fdd4ce17fb8cce2b3686172a7575025464", size = 170238987, upload-time = "2025-10-08T09:47:51.446Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ae/ede1edd009395092219f3437d2ee59f9ba93739c28c040542ed47c6cc831/pyside6_addons-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:15d32229d681be0bba1b936c4a300da43d01e1917ada5b57f9e03a387c245ab0", size = 165939425, upload-time = "2025-10-08T09:48:02.073Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5d/a3c32f85ac7f905c95679967c0ddda0ba043c273b75623cc90d8185064e4/pyside6_addons-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:99d93a32c17c5f6d797c3b90dd58f2a8bae13abde81e85802c34ceafaee11859", size = 164814172, upload-time = "2025-10-08T09:48:12.891Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2a/4ff71b09571202c8e1320c45276fc1d0cd81ee53107dfc17bb22d4243f88/pyside6_addons-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:92536427413f3b6557cf53f1a515cd766725ee46a170aff57ad2ff1dfce0ffb1", size = 34104251, upload-time = "2025-10-08T09:48:18.287Z" }, +] + +[[package]] +name = "pyside6-essentials" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "shiboken6" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/55/bad02ab890c8b8101abef0db4a2e5304be78a69e23a438e4d8555b664467/pyside6_essentials-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:003e871effe1f3e5b876bde715c15a780d876682005a6e989d89f48b8b93e93a", size = 105034090, upload-time = "2025-10-08T09:48:24.944Z" }, + { url = "https://files.pythonhosted.org/packages/5c/75/e17efc7eb900993e0e3925885635c6cf373c817196f09bcbcc102b00ac94/pyside6_essentials-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:1d5e013a8698e37ab8ef360e6960794eb5ef20832a8d562e649b8c5a0574b2d8", size = 76362150, upload-time = "2025-10-08T09:48:31.849Z" }, + { url = "https://files.pythonhosted.org/packages/06/62/fbd1e81caafcda97b147c03f5b06cfaadd8da5fa8298f527d2ec648fa5b7/pyside6_essentials-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:b1dd0864f0577a448fb44426b91cafff7ee7cccd1782ba66491e1c668033f998", size = 75454169, upload-time = "2025-10-08T09:48:38.21Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3a/d8211d17e6ca70f641c6ebd309f08ef18930acda60e74082c75875a274da/pyside6_essentials-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:fc167eb211dd1580e20ba90d299e74898e7a5a1306d832421e879641fc03b6fe", size = 74361794, upload-time = "2025-10-08T09:48:44.335Z" }, + { url = "https://files.pythonhosted.org/packages/61/e9/0e22e3c10325c4ff09447fadb43f7962afb82cef0b65358f5704251c6b32/pyside6_essentials-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:6dd0936394cb14da2fd8e869899f5e0925a738b1c8d74c2f22503720ea363fb1", size = 55099467, upload-time = "2025-10-08T09:48:50.902Z" }, +] + +[[package]] +name = "qtpy" +version = "2.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/01/392eba83c8e47b946b929d7c46e0f04b35e9671f8bb6fc36b6f7945b4de8/qtpy-2.4.3.tar.gz", hash = "sha256:db744f7832e6d3da90568ba6ccbca3ee2b3b4a890c3d6fbbc63142f6e4cdf5bb", size = 66982, upload-time = "2025-02-11T15:09:25.759Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl", hash = "sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1", size = 95045, upload-time = "2025-02-11T15:09:24.162Z" }, +] + +[[package]] +name = "shiboken6" +version = "6.10.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/78/3e730aea82089dd82b1e092bc265778bda329459e6ad9b7134eec5fff3f2/shiboken6-6.10.0-cp39-abi3-macosx_13_0_universal2.whl", hash = "sha256:7a5f5f400ebfb3a13616030815708289c2154e701a60b9db7833b843e0bee543", size = 476535, upload-time = "2025-10-08T09:49:08Z" }, + { url = "https://files.pythonhosted.org/packages/ea/09/4ffa3284a17b6b765d45b41c9a7f1b2cde6c617c853ac6f170fb62bbbece/shiboken6-6.10.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:e612734da515d683696980107cdc0396a3ae0f07b059f0f422ec8a2333810234", size = 271098, upload-time = "2025-10-08T09:49:09.47Z" }, + { url = "https://files.pythonhosted.org/packages/31/29/00e26f33a0fb259c2edce9c761a7a438d7531ca514bdb1a4c072673bd437/shiboken6-6.10.0-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:b01377e68d14132360efb0f4b7233006d26aa8ae9bb50edf00960c2a5f52d148", size = 267698, upload-time = "2025-10-08T09:49:10.694Z" }, + { url = "https://files.pythonhosted.org/packages/11/30/e4624a7e3f0dc9796b701079b77defcce0d32d1afc86bb1d0df04bc3d9e2/shiboken6-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:0bc5631c1bf150cbef768a17f5f289aae1cb4db6c6b0c19b2421394e27783717", size = 1234227, upload-time = "2025-10-08T09:49:12.774Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e5/0ab862005ea87dc8647ba958a3099b3b0115fd6491c65da5c5a0f6364db1/shiboken6-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:dfc4beab5fec7dbbebbb418f3bf99af865d6953aa0795435563d4cbb82093b61", size = 1794775, upload-time = "2025-10-08T09:49:14.641Z" }, +] From d3e40bbb73c43af6a2fcd7da7bcbdb6189cfa3f2 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 00:46:57 -0400 Subject: [PATCH 05/12] Use native Python flag for type imports --- PySideWrapper.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/PySideWrapper.py b/PySideWrapper.py index e3ec54de..940b1d3f 100644 --- a/PySideWrapper.py +++ b/PySideWrapper.py @@ -3,18 +3,24 @@ """Wrap PySide so the same import can use either PySide6 or PySide2. Also support using the FreeCAD wrapper, if that is available.""" -try: - from PySide import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets -except ImportError: +from typing import TYPE_CHECKING + + +if TYPE_CHECKING: + from PySide6 import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets +else: try: - from PySide6 import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets + from PySide import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets except ImportError: try: - from PySide2 import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets + from PySide6 import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets except ImportError: - raise ImportError( - "No viable version of PySide was found (tried the FreeCAD PySide wrapper, PySide6 and PySide2)" - ) + try: + from PySide2 import QtCore, QtGui, QtNetwork, QtSvg, QtWidgets + except ImportError: + raise ImportError( + "No viable version of PySide was found (tried the FreeCAD PySide wrapper, PySide6 and PySide2)" + ) # Dummy usage so the linter doesn't complain about the unused imports (since the whole point here is # that the imports aren't used in this file, they are just wrapped here) From 9d738e6da5d9344e4e730d5a36e41d0a7ffdf56e Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 01:21:21 -0400 Subject: [PATCH 06/12] Revert copyright header removal Waiting on attorneys answer. --- Addon.py | 21 +++++++++++++++++ AddonCatalog.py | 21 +++++++++++++++++ AddonCatalogCacheCreator.py | 21 +++++++++++++++++ AddonManager.py | 22 ++++++++++++++++++ AddonManagerOptions.py | 21 +++++++++++++++++ AddonManagerTest/app/mocks.py | 21 +++++++++++++++++ AddonManagerTest/app/test_addon.py | 22 +++++++++++++++++- .../app/test_addon_catalog_cache_creator.py | 21 +++++++++++++++++ .../app/test_dependency_installer.py | 21 +++++++++++++++++ .../app/test_freecad_interface.py | 21 +++++++++++++++++ AddonManagerTest/app/test_git.py | 22 ++++++++++++++++++ .../app/test_installation_manifest.py | 21 +++++++++++++++++ AddonManagerTest/app/test_installer.py | 21 +++++++++++++++++ AddonManagerTest/app/test_licenses.py | 22 +++++++++++++++++- AddonManagerTest/app/test_macro.py | 22 +++++++++++++++++- .../app/test_macro_cache_creator.py | 21 +++++++++++++++++ AddonManagerTest/app/test_macro_parser.py | 21 +++++++++++++++++ AddonManagerTest/app/test_metadata.py | 22 +++++++++++++++++- AddonManagerTest/app/test_python_deps.py | 22 +++++++++++++++++- AddonManagerTest/app/test_uninstaller.py | 21 +++++++++++++++++ AddonManagerTest/app/test_utilities.py | 21 +++++++++++++++++ AddonManagerTest/app/test_workers_startup.py | 22 +++++++++++++++++- AddonManagerTest/data/macro_template.FCStd | 22 ++++++++++++++++++ .../data/missing_macro_metadata.FCStd | 22 ++++++++++++++++++ AddonManagerTest/gui/gui_mocks.py | 21 +++++++++++++++++ AddonManagerTest/gui/test_installer_gui.py | 22 +++++++++++++++++- AddonManagerTest/gui/test_toolbar_adapter.py | 21 +++++++++++++++++ AddonManagerTest/gui/test_uninstaller_gui.py | 21 +++++++++++++++++ AddonManagerTest/gui/test_update_all_gui.py | 21 +++++++++++++++++ .../gui/test_widget_addon_buttons.py | 21 +++++++++++++++++ .../gui/test_widget_filter_selector.py | 21 +++++++++++++++++ .../gui/test_widget_global_buttons.py | 21 +++++++++++++++++ .../gui/test_widget_package_details_view.py | 21 +++++++++++++++++ .../gui/test_widget_progress_bar.py | 21 +++++++++++++++++ .../gui/test_widget_readme_browser.py | 22 ++++++++++++++++++ AddonManagerTest/gui/test_widget_search.py | 21 +++++++++++++++++ .../gui/test_widget_view_control_bar.py | 22 +++++++++++++++++- .../gui/test_widget_view_selector.py | 22 +++++++++++++++++- AddonManagerTest/gui/test_workers_utility.py | 21 +++++++++++++++++ AddonStats.py | 21 +++++++++++++++++ MacroCacheCreator.py | 21 +++++++++++++++++ NetworkManager.py | 21 +++++++++++++++++ PySideWrapper.py | 21 +++++++++++++++++ .../translations/run_translation_cycle.py | 21 +++++++++++++++++ TestAddonManagerApp.py | 21 +++++++++++++++++ TestAddonManagerGui.py | 21 +++++++++++++++++ Widgets/addonmanager_colors.py | 21 +++++++++++++++++ Widgets/addonmanager_utility_dialogs.py | 21 +++++++++++++++++ Widgets/addonmanager_widget_addon_buttons.py | 21 +++++++++++++++++ .../addonmanager_widget_filter_selector.py | 21 +++++++++++++++++ Widgets/addonmanager_widget_global_buttons.py | 21 +++++++++++++++++ ...ddonmanager_widget_package_details_view.py | 21 +++++++++++++++++ Widgets/addonmanager_widget_progress_bar.py | 21 +++++++++++++++++ Widgets/addonmanager_widget_readme_browser.py | 22 +++++++++++++++++- Widgets/addonmanager_widget_search.py | 21 +++++++++++++++++ .../addonmanager_widget_view_control_bar.py | 21 +++++++++++++++++ Widgets/addonmanager_widget_view_selector.py | 21 +++++++++++++++++ Widgets/spinner.py | 22 +++++++++++++++++- addonmanager_connection_checker.py | 21 +++++++++++++++++ addonmanager_dependency_installer.py | 21 +++++++++++++++++ addonmanager_firstrun.py | 21 +++++++++++++++++ addonmanager_freecad_interface.py | 21 +++++++++++++++++ addonmanager_git.py | 21 +++++++++++++++++ addonmanager_icon_utilities.py | 22 +++++++++++++++++- addonmanager_installation_manifest.py | 23 +++++++++++++++++-- addonmanager_installer.py | 22 +++++++++++++++++- addonmanager_installer_gui.py | 22 +++++++++++++++++- addonmanager_licenses.py | 22 +++++++++++++++++- addonmanager_macro.py | 23 ++++++++++++++++++- addonmanager_macro_parser.py | 22 +++++++++++++++++- addonmanager_metadata.py | 22 +++++++++++++++++- addonmanager_package_details_controller.py | 22 +++++++++++++++++- addonmanager_preferences_migrations.py | 22 +++++++++++++++++- addonmanager_python_deps.py | 21 +++++++++++++++++ addonmanager_python_deps_gui.py | 21 +++++++++++++++++ addonmanager_readme_controller.py | 21 +++++++++++++++++ addonmanager_uninstaller.py | 21 +++++++++++++++++ addonmanager_uninstaller_gui.py | 21 +++++++++++++++++ addonmanager_update_all_gui.py | 21 +++++++++++++++++ addonmanager_utilities.py | 22 ++++++++++++++++++ addonmanager_workers_startup.py | 22 ++++++++++++++++++ addonmanager_workers_utility.py | 21 +++++++++++++++++ composite_view.py | 21 +++++++++++++++++ main.py | 22 +++++++++++++++++- package_list.py | 21 +++++++++++++++++ 85 files changed, 1793 insertions(+), 23 deletions(-) diff --git a/Addon.py b/Addon.py index 66c45587..26de1d78 100644 --- a/Addon.py +++ b/Addon.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines the Addon class to encapsulate information about FreeCAD Addons""" diff --git a/AddonCatalog.py b/AddonCatalog.py index 965b1b84..275f416c 100644 --- a/AddonCatalog.py +++ b/AddonCatalog.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """The Addon Catalog is the main list of all Addons along with their various sources and compatible versions. Added in FreeCAD 1.1 to replace .gitmodules.""" diff --git a/AddonCatalogCacheCreator.py b/AddonCatalogCacheCreator.py index 6b387a42..05b0195a 100644 --- a/AddonCatalogCacheCreator.py +++ b/AddonCatalogCacheCreator.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Classes and utility functions to generate a remotely hosted cache of all addon catalog entries. Intended to be run by a server-side systemd timer to generate a file that is then loaded by the diff --git a/AddonManager.py b/AddonManager.py index 9c7a1642..e592ce59 100644 --- a/AddonManager.py +++ b/AddonManager.py @@ -1,4 +1,26 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * +# * Copyright (c) 2015 Yorik van Havre * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import os import functools diff --git a/AddonManagerOptions.py b/AddonManagerOptions.py index 1a141ef1..dacb1d1d 100644 --- a/AddonManagerOptions.py +++ b/AddonManagerOptions.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Contains the Addon Manager's preferences dialog management class""" diff --git a/AddonManagerTest/app/mocks.py b/AddonManagerTest/app/mocks.py index 31a97cf5..384c7c6c 100644 --- a/AddonManagerTest/app/mocks.py +++ b/AddonManagerTest/app/mocks.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Mock objects for use when testing the addon manager non-GUI code.""" diff --git a/AddonManagerTest/app/test_addon.py b/AddonManagerTest/app/test_addon.py index db9c33e5..ae330c69 100644 --- a/AddonManagerTest/app/test_addon.py +++ b/AddonManagerTest/app/test_addon.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import os import tempfile import unittest diff --git a/AddonManagerTest/app/test_addon_catalog_cache_creator.py b/AddonManagerTest/app/test_addon_catalog_cache_creator.py index cd60515c..6c019fca 100644 --- a/AddonManagerTest/app/test_addon_catalog_cache_creator.py +++ b/AddonManagerTest/app/test_addon_catalog_cache_creator.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """The AddonCatalogCacheCreator is an independent script that is run server-side to generate a cache of the addon metadata and icons. These tests verify the functionality of its methods.""" diff --git a/AddonManagerTest/app/test_dependency_installer.py b/AddonManagerTest/app/test_dependency_installer.py index 135fc226..c70e0849 100644 --- a/AddonManagerTest/app/test_dependency_installer.py +++ b/AddonManagerTest/app/test_dependency_installer.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import functools import os diff --git a/AddonManagerTest/app/test_freecad_interface.py b/AddonManagerTest/app/test_freecad_interface.py index 835ff707..82056233 100644 --- a/AddonManagerTest/app/test_freecad_interface.py +++ b/AddonManagerTest/app/test_freecad_interface.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Tests for the Addon Manager's FreeCAD interface classes.""" diff --git a/AddonManagerTest/app/test_git.py b/AddonManagerTest/app/test_git.py index dc59feda..81ffcc24 100644 --- a/AddonManagerTest/app/test_git.py +++ b/AddonManagerTest/app/test_git.py @@ -1,4 +1,26 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** + import unittest import os diff --git a/AddonManagerTest/app/test_installation_manifest.py b/AddonManagerTest/app/test_installation_manifest.py index 09269da8..9e6c5bd3 100644 --- a/AddonManagerTest/app/test_installation_manifest.py +++ b/AddonManagerTest/app/test_installation_manifest.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import datetime import json diff --git a/AddonManagerTest/app/test_installer.py b/AddonManagerTest/app/test_installer.py index c0bd2589..bd77cc12 100644 --- a/AddonManagerTest/app/test_installer.py +++ b/AddonManagerTest/app/test_installer.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Contains the unit test class for addonmanager_installer.py non-GUI functionality.""" diff --git a/AddonManagerTest/app/test_licenses.py b/AddonManagerTest/app/test_licenses.py index 968c56e7..92616ae1 100644 --- a/AddonManagerTest/app/test_licenses.py +++ b/AddonManagerTest/app/test_licenses.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest import unittest.mock as mock diff --git a/AddonManagerTest/app/test_macro.py b/AddonManagerTest/app/test_macro.py index 3c606b71..8ac290e0 100644 --- a/AddonManagerTest/app/test_macro.py +++ b/AddonManagerTest/app/test_macro.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import base64 import os import tempfile diff --git a/AddonManagerTest/app/test_macro_cache_creator.py b/AddonManagerTest/app/test_macro_cache_creator.py index b98b3499..46e4a050 100644 --- a/AddonManagerTest/app/test_macro_cache_creator.py +++ b/AddonManagerTest/app/test_macro_cache_creator.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest from unittest.mock import patch, MagicMock diff --git a/AddonManagerTest/app/test_macro_parser.py b/AddonManagerTest/app/test_macro_parser.py index 0a258971..53c7fdb8 100644 --- a/AddonManagerTest/app/test_macro_parser.py +++ b/AddonManagerTest/app/test_macro_parser.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Tests for the MacroParser class""" diff --git a/AddonManagerTest/app/test_metadata.py b/AddonManagerTest/app/test_metadata.py index 60de73b8..57081250 100644 --- a/AddonManagerTest/app/test_metadata.py +++ b/AddonManagerTest/app/test_metadata.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2023-2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import os import tempfile import unittest diff --git a/AddonManagerTest/app/test_python_deps.py b/AddonManagerTest/app/test_python_deps.py index edaaedb2..e5bed28e 100644 --- a/AddonManagerTest/app/test_python_deps.py +++ b/AddonManagerTest/app/test_python_deps.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import subprocess import unittest from unittest.mock import MagicMock, patch diff --git a/AddonManagerTest/app/test_uninstaller.py b/AddonManagerTest/app/test_uninstaller.py index f6c2e843..9ccfef5c 100644 --- a/AddonManagerTest/app/test_uninstaller.py +++ b/AddonManagerTest/app/test_uninstaller.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Contains the unit test class for addonmanager_uninstaller.py non-GUI functionality.""" diff --git a/AddonManagerTest/app/test_utilities.py b/AddonManagerTest/app/test_utilities.py index 0937fc85..59dfd93d 100644 --- a/AddonManagerTest/app/test_utilities.py +++ b/AddonManagerTest/app/test_utilities.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** from datetime import datetime import unittest diff --git a/AddonManagerTest/app/test_workers_startup.py b/AddonManagerTest/app/test_workers_startup.py index 48093942..79c29688 100644 --- a/AddonManagerTest/app/test_workers_startup.py +++ b/AddonManagerTest/app/test_workers_startup.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import json import unittest from unittest.mock import patch, MagicMock diff --git a/AddonManagerTest/data/macro_template.FCStd b/AddonManagerTest/data/macro_template.FCStd index 9d456907..d5545b6a 100644 --- a/AddonManagerTest/data/macro_template.FCStd +++ b/AddonManagerTest/data/macro_template.FCStd @@ -1,5 +1,27 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * This library is free software; you can redistribute it and/or * +# * modify it under the terms of the GNU Lesser General Public * +# * License as published by the Free Software Foundation; either * +# * version 2.1 of the License, or (at your option) any later version. * +# * * +# * This library is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with this library; if not, write to the Free Software * +# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * +# * 02110-1301 USA * +# * * +# *************************************************************************** + __Title__ = "TITLE" __Author__ = "AUTHOR" __Date__ = "DATE" diff --git a/AddonManagerTest/data/missing_macro_metadata.FCStd b/AddonManagerTest/data/missing_macro_metadata.FCStd index 8b047cc2..be9f11ef 100644 --- a/AddonManagerTest/data/missing_macro_metadata.FCStd +++ b/AddonManagerTest/data/missing_macro_metadata.FCStd @@ -1,3 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * This library is free software; you can redistribute it and/or * +# * modify it under the terms of the GNU Lesser General Public * +# * License as published by the Free Software Foundation; either * +# * version 2.1 of the License, or (at your option) any later version. * +# * * +# * This library is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with this library; if not, write to the Free Software * +# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * +# * 02110-1301 USA * +# * * +# *************************************************************************** + # This file contains no metadata diff --git a/AddonManagerTest/gui/gui_mocks.py b/AddonManagerTest/gui/gui_mocks.py index 90324835..3edd8c7e 100644 --- a/AddonManagerTest/gui/gui_mocks.py +++ b/AddonManagerTest/gui/gui_mocks.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import sys from typing import Optional diff --git a/AddonManagerTest/gui/test_installer_gui.py b/AddonManagerTest/gui/test_installer_gui.py index e08a4d35..2fd21275 100644 --- a/AddonManagerTest/gui/test_installer_gui.py +++ b/AddonManagerTest/gui/test_installer_gui.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import sys from enum import IntEnum import os diff --git a/AddonManagerTest/gui/test_toolbar_adapter.py b/AddonManagerTest/gui/test_toolbar_adapter.py index e4789677..0d89f172 100644 --- a/AddonManagerTest/gui/test_toolbar_adapter.py +++ b/AddonManagerTest/gui/test_toolbar_adapter.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest from unittest.mock import MagicMock, Mock, patch diff --git a/AddonManagerTest/gui/test_uninstaller_gui.py b/AddonManagerTest/gui/test_uninstaller_gui.py index 2561a7f0..8c1c35fa 100644 --- a/AddonManagerTest/gui/test_uninstaller_gui.py +++ b/AddonManagerTest/gui/test_uninstaller_gui.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import functools import unittest diff --git a/AddonManagerTest/gui/test_update_all_gui.py b/AddonManagerTest/gui/test_update_all_gui.py index bf9394e0..b9a4de30 100644 --- a/AddonManagerTest/gui/test_update_all_gui.py +++ b/AddonManagerTest/gui/test_update_all_gui.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** from unittest import TestCase from unittest.mock import patch diff --git a/AddonManagerTest/gui/test_widget_addon_buttons.py b/AddonManagerTest/gui/test_widget_addon_buttons.py index 964037f8..e14f60e5 100644 --- a/AddonManagerTest/gui/test_widget_addon_buttons.py +++ b/AddonManagerTest/gui/test_widget_addon_buttons.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_filter_selector.py b/AddonManagerTest/gui/test_widget_filter_selector.py index 7f8c5b1d..c2d32809 100644 --- a/AddonManagerTest/gui/test_widget_filter_selector.py +++ b/AddonManagerTest/gui/test_widget_filter_selector.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_global_buttons.py b/AddonManagerTest/gui/test_widget_global_buttons.py index 99c58a0c..969248dd 100644 --- a/AddonManagerTest/gui/test_widget_global_buttons.py +++ b/AddonManagerTest/gui/test_widget_global_buttons.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_package_details_view.py b/AddonManagerTest/gui/test_widget_package_details_view.py index 56b25fc1..de8293ec 100644 --- a/AddonManagerTest/gui/test_widget_package_details_view.py +++ b/AddonManagerTest/gui/test_widget_package_details_view.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Tests for the PackageDetailsView widget. Many tests are currently just stubs that ensure the code paths are executed so that the CI can find any errors in Python or Qt5/Qt6 compatibility. diff --git a/AddonManagerTest/gui/test_widget_progress_bar.py b/AddonManagerTest/gui/test_widget_progress_bar.py index cf099bfa..1e6dca06 100644 --- a/AddonManagerTest/gui/test_widget_progress_bar.py +++ b/AddonManagerTest/gui/test_widget_progress_bar.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import sys import unittest diff --git a/AddonManagerTest/gui/test_widget_readme_browser.py b/AddonManagerTest/gui/test_widget_readme_browser.py index 7a5ede82..fb2e3fec 100644 --- a/AddonManagerTest/gui/test_widget_readme_browser.py +++ b/AddonManagerTest/gui/test_widget_readme_browser.py @@ -1,4 +1,26 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** + import unittest diff --git a/AddonManagerTest/gui/test_widget_search.py b/AddonManagerTest/gui/test_widget_search.py index 8c3f3a61..27434c50 100644 --- a/AddonManagerTest/gui/test_widget_search.py +++ b/AddonManagerTest/gui/test_widget_search.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest diff --git a/AddonManagerTest/gui/test_widget_view_control_bar.py b/AddonManagerTest/gui/test_widget_view_control_bar.py index 6a13bf63..1d09764c 100644 --- a/AddonManagerTest/gui/test_widget_view_control_bar.py +++ b/AddonManagerTest/gui/test_widget_view_control_bar.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest from PySideWrapper import QtCore, QtWidgets diff --git a/AddonManagerTest/gui/test_widget_view_selector.py b/AddonManagerTest/gui/test_widget_view_selector.py index af72d95c..ae3664e0 100644 --- a/AddonManagerTest/gui/test_widget_view_selector.py +++ b/AddonManagerTest/gui/test_widget_view_selector.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest from PySideWrapper import QtWidgets diff --git a/AddonManagerTest/gui/test_workers_utility.py b/AddonManagerTest/gui/test_workers_utility.py index 5a32e67a..9f11a6b4 100644 --- a/AddonManagerTest/gui/test_workers_utility.py +++ b/AddonManagerTest/gui/test_workers_utility.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import unittest import os diff --git a/AddonStats.py b/AddonStats.py index 4b933a24..4cf7b319 100644 --- a/AddonStats.py +++ b/AddonStats.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Classes and structures related to Addon sidecar information""" from __future__ import annotations diff --git a/MacroCacheCreator.py b/MacroCacheCreator.py index 9067f8cd..bd728a69 100644 --- a/MacroCacheCreator.py +++ b/MacroCacheCreator.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """The MacroCacheCreator is an independent script run server-side to generate a cache of the macros and their metadata. Supports both git-based and wiki-based macros.""" diff --git a/NetworkManager.py b/NetworkManager.py index 8533645f..7f90fa6a 100644 --- a/NetworkManager.py +++ b/NetworkManager.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """ ############################################################################# diff --git a/PySideWrapper.py b/PySideWrapper.py index 940b1d3f..45525939 100644 --- a/PySideWrapper.py +++ b/PySideWrapper.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Wrap PySide so the same import can use either PySide6 or PySide2. Also support using the FreeCAD wrapper, if that is available.""" diff --git a/Resources/translations/run_translation_cycle.py b/Resources/translations/run_translation_cycle.py index 8047d610..a4a57328 100644 --- a/Resources/translations/run_translation_cycle.py +++ b/Resources/translations/run_translation_cycle.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * This is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * The software is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with the FreeCAD Addon Manager. If not, see * +# * . * +# * * +# *************************************************************************** """Run a full CrowdIn translation cycle for the Addon Manager. Requires that the CrowdIn API token is stored in ~/.crowdin-freecad-token, and that lupdate be in PATH.""" diff --git a/TestAddonManagerApp.py b/TestAddonManagerApp.py index 2ba786ff..4aba8392 100644 --- a/TestAddonManagerApp.py +++ b/TestAddonManagerApp.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import addonmanager_freecad_interface as fci diff --git a/TestAddonManagerGui.py b/TestAddonManagerGui.py index 29e50134..d55f2260 100644 --- a/TestAddonManagerGui.py +++ b/TestAddonManagerGui.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import addonmanager_freecad_interface as fci diff --git a/Widgets/addonmanager_colors.py b/Widgets/addonmanager_colors.py index 92cbb99b..f4448ac4 100644 --- a/Widgets/addonmanager_colors.py +++ b/Widgets/addonmanager_colors.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import addonmanager_freecad_interface as fci from PySideWrapper import QtGui diff --git a/Widgets/addonmanager_utility_dialogs.py b/Widgets/addonmanager_utility_dialogs.py index f4bbbcba..18027c8d 100644 --- a/Widgets/addonmanager_utility_dialogs.py +++ b/Widgets/addonmanager_utility_dialogs.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** from enum import Enum from PySideWrapper import QtWidgets diff --git a/Widgets/addonmanager_widget_addon_buttons.py b/Widgets/addonmanager_widget_addon_buttons.py index 11e26534..22784325 100644 --- a/Widgets/addonmanager_widget_addon_buttons.py +++ b/Widgets/addonmanager_widget_addon_buttons.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a QWidget-derived class for displaying the single-addon buttons.""" diff --git a/Widgets/addonmanager_widget_filter_selector.py b/Widgets/addonmanager_widget_filter_selector.py index 333c00e7..e3754d74 100644 --- a/Widgets/addonmanager_widget_filter_selector.py +++ b/Widgets/addonmanager_widget_filter_selector.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * +# * * +# * This file is part of the FreeCAD Addon Manager. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a QWidget-derived class for displaying the view selection buttons.""" diff --git a/Widgets/addonmanager_widget_global_buttons.py b/Widgets/addonmanager_widget_global_buttons.py index 2a4db47f..251f967f 100644 --- a/Widgets/addonmanager_widget_global_buttons.py +++ b/Widgets/addonmanager_widget_global_buttons.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a QWidget-derived class for displaying a set of buttons that affect the Addon Manager as a whole (rather than a specific Addon). Typically inserted at the bottom of the Addon diff --git a/Widgets/addonmanager_widget_package_details_view.py b/Widgets/addonmanager_widget_package_details_view.py index 0e5eddc1..b45eb6d7 100644 --- a/Widgets/addonmanager_widget_package_details_view.py +++ b/Widgets/addonmanager_widget_package_details_view.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** from dataclasses import dataclass from enum import Enum, auto diff --git a/Widgets/addonmanager_widget_progress_bar.py b/Widgets/addonmanager_widget_progress_bar.py index fb0dd3f0..ad40e36f 100644 --- a/Widgets/addonmanager_widget_progress_bar.py +++ b/Widgets/addonmanager_widget_progress_bar.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a QWidget-derived class for displaying the cache load status.""" diff --git a/Widgets/addonmanager_widget_readme_browser.py b/Widgets/addonmanager_widget_readme_browser.py index dd01c55d..f4a2392f 100644 --- a/Widgets/addonmanager_widget_readme_browser.py +++ b/Widgets/addonmanager_widget_readme_browser.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import re import addonmanager_freecad_interface as fci diff --git a/Widgets/addonmanager_widget_search.py b/Widgets/addonmanager_widget_search.py index 78ae8568..e50186f1 100644 --- a/Widgets/addonmanager_widget_search.py +++ b/Widgets/addonmanager_widget_search.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a QWidget-derived class for displaying the view selection buttons.""" diff --git a/Widgets/addonmanager_widget_view_control_bar.py b/Widgets/addonmanager_widget_view_control_bar.py index 87465b25..e266823d 100644 --- a/Widgets/addonmanager_widget_view_control_bar.py +++ b/Widgets/addonmanager_widget_view_control_bar.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a class derived from QWidget for displaying the bar at the top of the addons list.""" diff --git a/Widgets/addonmanager_widget_view_selector.py b/Widgets/addonmanager_widget_view_selector.py index 5996c699..5c24c845 100644 --- a/Widgets/addonmanager_widget_view_selector.py +++ b/Widgets/addonmanager_widget_view_selector.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines a QWidget-derived class for displaying the view selection buttons.""" diff --git a/Widgets/spinner.py b/Widgets/spinner.py index 4bec7742..8ab8ec81 100644 --- a/Widgets/spinner.py +++ b/Widgets/spinner.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import os from PySideWrapper import QtCore, QtGui, QtWidgets, QtSvg diff --git a/addonmanager_connection_checker.py b/addonmanager_connection_checker.py index 1c293eae..a440933a 100644 --- a/addonmanager_connection_checker.py +++ b/addonmanager_connection_checker.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """System for checking the network connection status asynchronously.""" diff --git a/addonmanager_dependency_installer.py b/addonmanager_dependency_installer.py index 7a1fd269..0f276b66 100644 --- a/addonmanager_dependency_installer.py +++ b/addonmanager_dependency_installer.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Class to manage installation of sets of Python dependencies.""" diff --git a/addonmanager_firstrun.py b/addonmanager_firstrun.py index 960e6576..bbe31e5e 100644 --- a/addonmanager_firstrun.py +++ b/addonmanager_firstrun.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Class to display a first-run dialog for the Addon Manager""" diff --git a/addonmanager_freecad_interface.py b/addonmanager_freecad_interface.py index 2f7548bd..ec10e72d 100644 --- a/addonmanager_freecad_interface.py +++ b/addonmanager_freecad_interface.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Classes to encapsulate the Addon Manager's interaction with FreeCAD, and to provide replacements when the Addon Manager is not run from within FreeCAD (e.g. during unit diff --git a/addonmanager_git.py b/addonmanager_git.py index dd9e76c7..c48b85ab 100644 --- a/addonmanager_git.py +++ b/addonmanager_git.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Wrapper around git executable to simplify calling git commands from Python.""" diff --git a/addonmanager_icon_utilities.py b/addonmanager_icon_utilities.py index f448d7a7..201cad27 100644 --- a/addonmanager_icon_utilities.py +++ b/addonmanager_icon_utilities.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import re import os diff --git a/addonmanager_installation_manifest.py b/addonmanager_installation_manifest.py index 153432b9..a347c5a7 100644 --- a/addonmanager_installation_manifest.py +++ b/addonmanager_installation_manifest.py @@ -1,6 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import json import os import threading diff --git a/addonmanager_installer.py b/addonmanager_installer.py index cd278128..5a8c4ad8 100644 --- a/addonmanager_installer.py +++ b/addonmanager_installer.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Contains the classes to manage Addon installation: intended as a stable API, safe for external code to call and to rely upon existing. See classes AddonInstaller and MacroInstaller for details. diff --git a/addonmanager_installer_gui.py b/addonmanager_installer_gui.py index 11ed8af7..b68d2dc4 100644 --- a/addonmanager_installer_gui.py +++ b/addonmanager_installer_gui.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Classes to manage the GUI presentation of installing an Addon (e.g., the sequence of dialog boxes that do dependency resolution, error handling, etc.). See AddonInstallerGUI and MacroInstallerGUI diff --git a/addonmanager_licenses.py b/addonmanager_licenses.py index 0a730980..b40b5275 100644 --- a/addonmanager_licenses.py +++ b/addonmanager_licenses.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2024 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Utilities for working with licenses. Based on SPDX info downloaded from https://github.com/spdx/license-list-data and stored as part of the FreeCAD repo, loaded into a Qt diff --git a/addonmanager_macro.py b/addonmanager_macro.py index eac68a26..90a04a41 100644 --- a/addonmanager_macro.py +++ b/addonmanager_macro.py @@ -1,5 +1,26 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * Copyright (c) 2018 Gaël Écorchard * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Unified handler for FreeCAD macros that can be obtained from different sources.""" import base64 diff --git a/addonmanager_macro_parser.py b/addonmanager_macro_parser.py index 823f5d27..c2d2177e 100644 --- a/addonmanager_macro_parser.py +++ b/addonmanager_macro_parser.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Contains the parser class for extracting metadata from a FreeCAD macro""" diff --git a/addonmanager_metadata.py b/addonmanager_metadata.py index 3af13f29..b5cb0f49 100644 --- a/addonmanager_metadata.py +++ b/addonmanager_metadata.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Classes for working with Addon metadata, as documented at https://wiki.FreeCAD.org/Package_metadata""" diff --git a/addonmanager_package_details_controller.py b/addonmanager_package_details_controller.py index d73b0aa2..0a9eda08 100644 --- a/addonmanager_package_details_controller.py +++ b/addonmanager_package_details_controller.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Provides the PackageDetails widget.""" diff --git a/addonmanager_preferences_migrations.py b/addonmanager_preferences_migrations.py index b8ebb69b..14fe92e4 100644 --- a/addonmanager_preferences_migrations.py +++ b/addonmanager_preferences_migrations.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** from urllib.parse import urlparse diff --git a/addonmanager_python_deps.py b/addonmanager_python_deps.py index 44b720b4..0c0ab33f 100644 --- a/addonmanager_python_deps.py +++ b/addonmanager_python_deps.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Provides classes and support functions for managing the automatically installed Python library dependencies. No support is provided for uninstalling those dependencies diff --git a/addonmanager_python_deps_gui.py b/addonmanager_python_deps_gui.py index b71b3a34..29252be7 100644 --- a/addonmanager_python_deps_gui.py +++ b/addonmanager_python_deps_gui.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """GUI for python dependency management.""" diff --git a/addonmanager_readme_controller.py b/addonmanager_readme_controller.py index 47a20508..ab01ce54 100644 --- a/addonmanager_readme_controller.py +++ b/addonmanager_readme_controller.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2024 The FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """A Qt Widget for displaying Addon README information""" diff --git a/addonmanager_uninstaller.py b/addonmanager_uninstaller.py index a21c7c9d..ccfa930d 100644 --- a/addonmanager_uninstaller.py +++ b/addonmanager_uninstaller.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Contains the classes to manage Addon removal: intended as a stable API, safe for external code to call and to rely upon existing. See classes AddonUninstaller and diff --git a/addonmanager_uninstaller_gui.py b/addonmanager_uninstaller_gui.py index 853876dc..816cd452 100644 --- a/addonmanager_uninstaller_gui.py +++ b/addonmanager_uninstaller_gui.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """GUI functions for uninstalling an Addon or Macro.""" diff --git a/addonmanager_update_all_gui.py b/addonmanager_update_all_gui.py index 1b715de3..4e8bc974 100644 --- a/addonmanager_update_all_gui.py +++ b/addonmanager_update_all_gui.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2025 FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Class to manage the display of an Update All dialog.""" import threading diff --git a/addonmanager_utilities.py b/addonmanager_utilities.py index d3a62403..281a3e73 100644 --- a/addonmanager_utilities.py +++ b/addonmanager_utilities.py @@ -1,4 +1,26 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * Copyright (c) 2018 Gaël Écorchard * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Utilities to work across different platforms, providers and python versions""" diff --git a/addonmanager_workers_startup.py b/addonmanager_workers_startup.py index ae8a5119..9c725d99 100644 --- a/addonmanager_workers_startup.py +++ b/addonmanager_workers_startup.py @@ -1,4 +1,26 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * Copyright (c) 2019 Yorik van Havre * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Worker thread classes for Addon Manager startup""" import hashlib diff --git a/addonmanager_workers_utility.py b/addonmanager_workers_utility.py index 53a9f5c9..4d617a94 100644 --- a/addonmanager_workers_utility.py +++ b/addonmanager_workers_utility.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Misc. worker thread classes for the FreeCAD Addon Manager.""" diff --git a/composite_view.py b/composite_view.py index 8e1e6b42..7e7a96ae 100644 --- a/composite_view.py +++ b/composite_view.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2024 The FreeCAD Project Association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Provides a class for showing the list view and detail view at the same time.""" diff --git a/main.py b/main.py index fa836336..cc13a627 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later - +# *************************************************************************** +# * * +# * Copyright (c) 2025 The FreeCAD project association AISBL * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** import os import sys diff --git a/package_list.py b/package_list.py index d0d6e2a6..231f0240 100644 --- a/package_list.py +++ b/package_list.py @@ -1,4 +1,25 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2022-2023 FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** """Defines the PackageList QWidget for displaying a list of Addons.""" import threading From 5d74e6751bec4e8862e799a4a341e8fd43295373 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 01:38:39 -0400 Subject: [PATCH 07/12] Add VSCode settings --- .vscode/settings.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..9b2f1ae0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "qtForPython.uic.liveExecution.enabled" : false , + + "files.associations" : { + "*.ts" : "xml" + }, + + "search.exclude" : { + "uv.lock" : true + } +} \ No newline at end of file From 9f4cc68201b652c975affb9d0c8633f74d1e1639 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 01:40:00 -0400 Subject: [PATCH 08/12] Add test dependencies to config --- pyproject.toml | 8 ++- uv.lock | 150 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c58f59cd..0c6e611f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,5 +7,11 @@ requires-python = '>=3.10' dependencies = [ 'freecad-stubs>=1.0.21' , + 'requests>=2.32.5' , 'pyside6>=6.9.2' -] \ No newline at end of file +] + +[tool.uv] +dev-dependencies = [ + 'pyfakefs>=5.10.1' , +] diff --git a/uv.lock b/uv.lock index a70ed2a4..1d130cba 100644 --- a/uv.lock +++ b/uv.lock @@ -9,12 +9,120 @@ source = { virtual = "." } dependencies = [ { name = "freecad-stubs" }, { name = "pyside6" }, + { name = "requests" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pyfakefs" }, ] [package.metadata] requires-dist = [ { name = "freecad-stubs", specifier = ">=1.0.21" }, { name = "pyside6", specifier = ">=6.9.2" }, + { name = "requests", specifier = ">=2.32.5" }, +] + +[package.metadata.requires-dev] +dev = [{ name = "pyfakefs", specifier = ">=5.10.1" }] + +[[package]] +name = "certifi" +version = "2025.10.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/5b/b6ce21586237c77ce67d01dc5507039d444b630dd76611bbca2d8e5dcd91/certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43", size = 164519, upload-time = "2025-10-05T04:12:15.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de", size = 163286, upload-time = "2025-10-05T04:12:14.03Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, + { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, + { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, + { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, + { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, + { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, + { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, + { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] [[package]] @@ -29,6 +137,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/bc/cdfb911f753b4b4f8e400d66d805e5718e32632837507b574a573b3efa24/freecad_stubs-1.0.21-py3-none-any.whl", hash = "sha256:fa96244b1a05e5130b0f96b3eb4ef9aca0f0aa437fff8000cb0750bdbb4edccc", size = 218416, upload-time = "2025-07-21T23:58:36.052Z" }, ] +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -38,6 +155,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] +[[package]] +name = "pyfakefs" +version = "5.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/b6/e20ce6ef48b4857d73f9332f5a18881fe938d58a0a820be09d46d4e1077c/pyfakefs-5.10.1.tar.gz", hash = "sha256:4d76c481ba47d5e09d7a32519e837bcbd36f0e2bd7bc09ea75e633167665a4e5", size = 231269, upload-time = "2025-10-27T17:39:01.952Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/9c/b3175319f71105669e01e5a63c9e5839ccf4f96080c20e4fb369fea04b3a/pyfakefs-5.10.1-py3-none-any.whl", hash = "sha256:2e752d2e05e77add0759bb17efb1418060c176e8c06399c8258ca49377ab5b20", size = 246238, upload-time = "2025-10-27T17:39:00.111Z" }, +] + [[package]] name = "pyside6" version = "6.10.0" @@ -98,6 +224,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl", hash = "sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1", size = 95045, upload-time = "2025-02-11T15:09:24.162Z" }, ] +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + [[package]] name = "shiboken6" version = "6.10.0" @@ -109,3 +250,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/11/30/e4624a7e3f0dc9796b701079b77defcce0d32d1afc86bb1d0df04bc3d9e2/shiboken6-6.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:0bc5631c1bf150cbef768a17f5f289aae1cb4db6c6b0c19b2421394e27783717", size = 1234227, upload-time = "2025-10-08T09:49:12.774Z" }, { url = "https://files.pythonhosted.org/packages/dd/e5/0ab862005ea87dc8647ba958a3099b3b0115fd6491c65da5c5a0f6364db1/shiboken6-6.10.0-cp39-abi3-win_arm64.whl", hash = "sha256:dfc4beab5fec7dbbebbb418f3bf99af865d6953aa0795435563d4cbb82093b61", size = 1794775, upload-time = "2025-10-08T09:49:14.641Z" }, ] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] From c49658807f028c0e634ad1d0bde22aa7c382e6c2 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 01:41:16 -0400 Subject: [PATCH 09/12] Isolate dependency dialog --- AddonManager.py | 4 +--- AddonManagerTest/gui/test_python_deps_gui.py | 2 +- CMakeLists.txt | 3 ++- .../Dependencies.py | 5 +++-- .../Dependencies.ui | 10 +++++----- 5 files changed, 12 insertions(+), 12 deletions(-) rename addonmanager_python_deps_gui.py => Manager/Dependencies.py (95%) rename PythonDependencyUpdateDialog.ui => Manager/Dependencies.ui (88%) diff --git a/AddonManager.py b/AddonManager.py index e592ce59..614c49e5 100644 --- a/AddonManager.py +++ b/AddonManager.py @@ -53,9 +53,7 @@ from Widgets.addonmanager_widget_progress_bar import Progress from package_list import PackageListItemModel from Addon import Addon, cycle_to_sub_addon, MissingDependencies -from addonmanager_python_deps_gui import ( - PythonPackageManagerGui, -) +from Manager.Dependencies import PythonPackageManagerGui from addonmanager_firstrun import FirstRunDialog from addonmanager_connection_checker import ConnectionCheckerGUI diff --git a/AddonManagerTest/gui/test_python_deps_gui.py b/AddonManagerTest/gui/test_python_deps_gui.py index 5b6def42..fae1dbec 100644 --- a/AddonManagerTest/gui/test_python_deps_gui.py +++ b/AddonManagerTest/gui/test_python_deps_gui.py @@ -4,7 +4,7 @@ from PySideWrapper import QtCore, QtWidgets -from addonmanager_python_deps_gui import PythonPackageManagerGui +from Manager.Dependencies import PythonPackageManagerGui class TestPythonPackageManagerGui(unittest.TestCase): diff --git a/CMakeLists.txt b/CMakeLists.txt index 926b335d..7d0f3886 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,13 +63,14 @@ SET(AddonManager_SRCS progress.ui proxy_authentication.ui PySideWrapper.py - PythonDependencyUpdateDialog.ui select_toolbar_dialog.ui TestAddonManagerApp.py TestAddonManagerGui.py toolbar_button.ui update_all_progress.ui update_all.ui + Manager/Dependencies.py + Manager/Dependencies.ui ) SOURCE_GROUP("" FILES ${AddonManager_SRCS}) diff --git a/addonmanager_python_deps_gui.py b/Manager/Dependencies.py similarity index 95% rename from addonmanager_python_deps_gui.py rename to Manager/Dependencies.py index 29252be7..b5788206 100644 --- a/addonmanager_python_deps_gui.py +++ b/Manager/Dependencies.py @@ -35,13 +35,14 @@ class PythonPackageManagerGui: + """GUI for managing Python packages""" def __init__(self, addons): self.dlg = fci.loadUi( - os.path.join(os.path.dirname(__file__), "PythonDependencyUpdateDialog.ui") + os.path.join(os.path.dirname(__file__),"Dependencies.ui") ) - self.dlg.setObjectName("AddonManager_PythonDependencyUpdateDialog") + self.dlg.setObjectName("AddonManager_Dependencies") self.model = PythonPackageListModel(addons) self.dlg.tableView.setModel(self.model) diff --git a/PythonDependencyUpdateDialog.ui b/Manager/Dependencies.ui similarity index 88% rename from PythonDependencyUpdateDialog.ui rename to Manager/Dependencies.ui index 66d4a33d..bd76d98b 100644 --- a/PythonDependencyUpdateDialog.ui +++ b/Manager/Dependencies.ui @@ -1,7 +1,7 @@ - PythonDependencyUpdateDialog - + Dependencies + 0 @@ -30,14 +30,14 @@ placeholder for path - Qt::TextInteractionFlag::TextSelectableByMouse + Qt::TextSelectableByMouse - QAbstractItemView::SelectionBehavior::SelectRows + QAbstractItemView::SelectRows false @@ -53,7 +53,7 @@ Update in progress… - Qt::TextInteractionFlag::NoTextInteraction + Qt::NoTextInteraction From 323dc137ea7505bc40c8a8f8d3d7e15a0918c123 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 02:04:59 -0400 Subject: [PATCH 10/12] Add type hints to dependencies UI --- AddonManager.py | 4 +- AddonManagerTest/gui/test_python_deps_gui.py | 4 +- Manager/Dependencies.py | 50 ++++++++++++-------- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/AddonManager.py b/AddonManager.py index 614c49e5..1dc25f5a 100644 --- a/AddonManager.py +++ b/AddonManager.py @@ -53,7 +53,7 @@ from Widgets.addonmanager_widget_progress_bar import Progress from package_list import PackageListItemModel from Addon import Addon, cycle_to_sub_addon, MissingDependencies -from Manager.Dependencies import PythonPackageManagerGui +from Manager.Dependencies import DependenciesDialog from addonmanager_firstrun import FirstRunDialog from addonmanager_connection_checker import ConnectionCheckerGUI @@ -478,7 +478,7 @@ def check_missing_dependencies(self) -> None: def show_python_updates_dialog(self) -> None: if not self.manage_python_packages_dialog: - self.manage_python_packages_dialog = PythonPackageManagerGui(self.item_model.repos) + self.manage_python_packages_dialog = DependenciesDialog(self.item_model.repos) self.manage_python_packages_dialog.show() def fetch_addon_stats(self) -> None: diff --git a/AddonManagerTest/gui/test_python_deps_gui.py b/AddonManagerTest/gui/test_python_deps_gui.py index fae1dbec..f0ae1e5b 100644 --- a/AddonManagerTest/gui/test_python_deps_gui.py +++ b/AddonManagerTest/gui/test_python_deps_gui.py @@ -4,13 +4,13 @@ from PySideWrapper import QtCore, QtWidgets -from Manager.Dependencies import PythonPackageManagerGui +from Manager.Dependencies import DependenciesDialog class TestPythonPackageManagerGui(unittest.TestCase): def setUp(self) -> None: - self.manager = PythonPackageManagerGui([]) + self.manager = DependenciesDialog([]) if __name__ == "__main__": diff --git a/Manager/Dependencies.py b/Manager/Dependencies.py index b5788206..d1622908 100644 --- a/Manager/Dependencies.py +++ b/Manager/Dependencies.py @@ -34,52 +34,62 @@ translate = fci.translate -class PythonPackageManagerGui: +class UI ( QtWidgets.QDialog ): + + updateInProgressLabel : QtWidgets.QLabel + labelInstallationPath : QtWidgets.QLabel + buttonUpdateAll : QtWidgets.QPushButton + tableView : QtWidgets.QTableView + + +class DependenciesDialog : + + ui : UI """GUI for managing Python packages""" def __init__(self, addons): - self.dlg = fci.loadUi( + self.ui = fci.loadUi( os.path.join(os.path.dirname(__file__),"Dependencies.ui") - ) - self.dlg.setObjectName("AddonManager_Dependencies") + ) # type: ignore + self.ui.setObjectName("AddonManager_Dependencies") self.model = PythonPackageListModel(addons) - self.dlg.tableView.setModel(self.model) + self.ui.tableView.setModel(self.model) - self.dlg.tableView.horizontalHeader().setStretchLastSection(True) - self.dlg.tableView.horizontalHeader().setSectionResizeMode( + self.ui.tableView.horizontalHeader().setStretchLastSection(True) + self.ui.tableView.horizontalHeader().setSectionResizeMode( 0, QtWidgets.QHeaderView.ResizeMode.ResizeToContents ) - self.dlg.tableView.horizontalHeader().setSectionResizeMode( + self.ui.tableView.horizontalHeader().setSectionResizeMode( 1, QtWidgets.QHeaderView.ResizeMode.ResizeToContents ) - self.dlg.tableView.horizontalHeader().setSectionResizeMode( + self.ui.tableView.horizontalHeader().setSectionResizeMode( 2, QtWidgets.QHeaderView.ResizeMode.ResizeToContents ) - self.dlg.tableView.horizontalHeader().setSectionResizeMode( + self.ui.tableView.horizontalHeader().setSectionResizeMode( 3, QtWidgets.QHeaderView.ResizeMode.ResizeToContents ) - self.dlg.buttonUpdateAll.clicked.connect(self._update_button_clicked) + self.ui.buttonUpdateAll.clicked.connect(self._update_button_clicked) self.model.modelReset.connect(self._model_was_reset) self.model.update_complete.connect(self._update_complete) def show(self): - self.dlg.buttonUpdateAll.setEnabled(False) - self.dlg.updateInProgressLabel.show() + self.ui.buttonUpdateAll.setEnabled(False) + self.ui.updateInProgressLabel.show() self.model.reset_package_list() - self.dlg.labelInstallationPath.setText(self.model.vendor_path) - self.dlg.exec() + self.ui.labelInstallationPath.setText(self.model.vendor_path) + self.ui.exec() def _update_button_clicked(self): - self.dlg.buttonUpdateAll.setEnabled(False) - self.dlg.updateInProgressLabel.show() + self.ui.buttonUpdateAll.setEnabled(False) + self.ui.updateInProgressLabel.show() self.model.update_all_packages() def _model_was_reset(self): - self.dlg.updateInProgressLabel.hide() - self.dlg.buttonUpdateAll.setEnabled(self.model.updates_are_available()) + self.ui.updateInProgressLabel.hide() + self.ui.buttonUpdateAll.setEnabled(self.model.updates_are_available()) def _update_complete(self): - self.dlg.updateInProgressLabel.hide() + self.ui.updateInProgressLabel.hide() self.model.reset_package_list() From c664b3cf01235777b0b624b65040238d8634ace7 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 02:32:44 -0400 Subject: [PATCH 11/12] Refactor Dependencies dialog --- Manager/Dependencies.py | 101 +++++++++++++++++++++------------------- Manager/Dependencies.ui | 8 ++-- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/Manager/Dependencies.py b/Manager/Dependencies.py index d1622908..0fcee8c5 100644 --- a/Manager/Dependencies.py +++ b/Manager/Dependencies.py @@ -21,75 +21,80 @@ # * * # *************************************************************************** -"""GUI for python dependency management.""" +''' +UI for managing Python dependencies. +''' -import os - -import addonmanager_freecad_interface as fci +from addonmanager_freecad_interface import loadUi from addonmanager_python_deps import PythonPackageListModel - from PySideWrapper import QtWidgets +from os.path import dirname , join -translate = fci.translate +ResizeToContents = QtWidgets.QHeaderView.ResizeMode.ResizeToContents class UI ( QtWidgets.QDialog ): - updateInProgressLabel : QtWidgets.QLabel - labelInstallationPath : QtWidgets.QLabel - buttonUpdateAll : QtWidgets.QPushButton + Installation_Path : QtWidgets.QLabel + Update_Progress : QtWidgets.QLabel + Update_All : QtWidgets.QPushButton tableView : QtWidgets.QTableView class DependenciesDialog : + model : PythonPackageListModel ui : UI - """GUI for managing Python packages""" + def __init__ ( self , addons : list[ object ] ): + + path = join(dirname(__file__),'Dependencies.ui') + + self.ui = loadUi(path) # type: ignore - def __init__(self, addons): - self.ui = fci.loadUi( - os.path.join(os.path.dirname(__file__),"Dependencies.ui") - ) # type: ignore - self.ui.setObjectName("AddonManager_Dependencies") self.model = PythonPackageListModel(addons) - self.ui.tableView.setModel(self.model) - - self.ui.tableView.horizontalHeader().setStretchLastSection(True) - self.ui.tableView.horizontalHeader().setSectionResizeMode( - 0, QtWidgets.QHeaderView.ResizeMode.ResizeToContents - ) - self.ui.tableView.horizontalHeader().setSectionResizeMode( - 1, QtWidgets.QHeaderView.ResizeMode.ResizeToContents - ) - self.ui.tableView.horizontalHeader().setSectionResizeMode( - 2, QtWidgets.QHeaderView.ResizeMode.ResizeToContents - ) - self.ui.tableView.horizontalHeader().setSectionResizeMode( - 3, QtWidgets.QHeaderView.ResizeMode.ResizeToContents - ) - - self.ui.buttonUpdateAll.clicked.connect(self._update_button_clicked) - self.model.modelReset.connect(self._model_was_reset) - self.model.update_complete.connect(self._update_complete) - - def show(self): - self.ui.buttonUpdateAll.setEnabled(False) - self.ui.updateInProgressLabel.show() + + table = self.ui.tableView + table.setModel(self.model) + + header = table.horizontalHeader() + header.setStretchLastSection(True) + header.setSectionResizeMode(ResizeToContents) + + self.ui.Update_All.clicked.connect(self._onUpdateAll) + + self.model.update_complete.connect(self._onUpdateComplete) + self.model.modelReset.connect(self._onModelReset) + + def show ( self ): + + self.ui.Update_Progress.show() + self.ui.Update_All.setEnabled(False) + self.model.reset_package_list() - self.ui.labelInstallationPath.setText(self.model.vendor_path) + + self.ui.Installation_Path.setText(self.model.vendor_path) + self.ui.exec() - def _update_button_clicked(self): - self.ui.buttonUpdateAll.setEnabled(False) - self.ui.updateInProgressLabel.show() + # Events + + def _onUpdateComplete ( self ): + self.ui.Update_Progress.hide() + self.model.reset_package_list() + + def _onUpdateAll ( self ): + self.ui.Update_All.setEnabled(False) + self.ui.Update_Progress.show() self.model.update_all_packages() - def _model_was_reset(self): - self.ui.updateInProgressLabel.hide() - self.ui.buttonUpdateAll.setEnabled(self.model.updates_are_available()) + def _onModelReset ( self ): + + self.ui.Update_Progress.hide() + + hasUpdates = self.model.updates_are_available() + + self.ui.Update_All.setEnabled(hasUpdates) - def _update_complete(self): - self.ui.updateInProgressLabel.hide() - self.model.reset_package_list() + \ No newline at end of file diff --git a/Manager/Dependencies.ui b/Manager/Dependencies.ui index bd76d98b..47a99210 100644 --- a/Manager/Dependencies.ui +++ b/Manager/Dependencies.ui @@ -1,7 +1,7 @@ Dependencies - + 0 @@ -25,7 +25,7 @@ - + placeholder for path @@ -48,7 +48,7 @@ - + Update in progress… @@ -70,7 +70,7 @@ - + Update All From a964ad778cbff4de7cb97ad7794c7a4a28ccd165 Mon Sep 17 00:00:00 2001 From: PhoneDroid <73050054+PhoneDroid@users.noreply.github.com> Date: Fri, 31 Oct 2025 10:23:31 -0400 Subject: [PATCH 12/12] Improve Python location field --- Manager/Dependencies.py | 32 +++++- Manager/Dependencies.ui | 220 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 234 insertions(+), 18 deletions(-) diff --git a/Manager/Dependencies.py b/Manager/Dependencies.py index 0fcee8c5..e6258718 100644 --- a/Manager/Dependencies.py +++ b/Manager/Dependencies.py @@ -27,16 +27,20 @@ from addonmanager_freecad_interface import loadUi from addonmanager_python_deps import PythonPackageListModel -from PySideWrapper import QtWidgets +from PySideWrapper import QtWidgets , QtGui from os.path import dirname , join ResizeToContents = QtWidgets.QHeaderView.ResizeMode.ResizeToContents +openUrl = QtGui.QDesktopServices.openUrl class UI ( QtWidgets.QDialog ): - Installation_Path : QtWidgets.QLabel + Location_Copy : QtWidgets.QPushButton + Location_Open : QtWidgets.QPushButton + Location_Path : QtWidgets.QLabel + Update_Progress : QtWidgets.QLabel Update_All : QtWidgets.QPushButton tableView : QtWidgets.QTableView @@ -62,6 +66,9 @@ def __init__ ( self , addons : list[ object ] ): header.setStretchLastSection(True) header.setSectionResizeMode(ResizeToContents) + self.ui.Location_Copy.clicked.connect(self._onLocationCopy) + self.ui.Location_Open.clicked.connect(self._onLocationOpen) + self.ui.Update_All.clicked.connect(self._onUpdateAll) self.model.update_complete.connect(self._onUpdateComplete) @@ -74,12 +81,31 @@ def show ( self ): self.model.reset_package_list() - self.ui.Installation_Path.setText(self.model.vendor_path) + self.ui.Location_Path.setText(self.path) self.ui.exec() + # Properties + + @property + def path ( self ): + return self.model.vendor_path + # Events + def _onLocationCopy ( self ): + + text = self.path + + clipboard = QtWidgets.QApplication.clipboard() + clipboard.setText(text,mode = clipboard.Mode.Clipboard) + + if clipboard.supportsSelection() : + clipboard.setText(text,mode = clipboard.Mode.Selection) + + def _onLocationOpen ( self ): + openUrl(self.path) + def _onUpdateComplete ( self ): self.ui.Update_Progress.hide() self.model.reset_package_list() diff --git a/Manager/Dependencies.ui b/Manager/Dependencies.ui index 47a99210..587fe57c 100644 --- a/Manager/Dependencies.ui +++ b/Manager/Dependencies.ui @@ -1,39 +1,38 @@ - Dependencies + AddonManager_Dependencies + + true + 0 0 528 - 300 + 475 + + + 0 + 0 + + - Manage Python Dependencies + Python Dependencies - The following Python packages have been installed locally by the Addon Manager to satisfy addon dependencies. Installation location + <html><head/><body><p>The following Python packages have been installed locally by the Addon Manager to satisfy addon dependencies.</p></body></html> true - - - - placeholder for path - - - Qt::TextSelectableByMouse - - - @@ -57,10 +56,201 @@ + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 10 + + + + + + + + + + Directory where Python packages are stored. + + + + + + + + + font-weight : bold ; + + + Location + + + Qt::MarkdownText + + + + + + + QLayout::SetDefaultConstraint + + + + + false + + + + 1 + 0 + + + + + 0 + 0 + + + + WaitCursor + + + Qt::NoFocus + + + false + + + Path of the directory containing Python dependencies. + + + false + + + + + + + + + /Path/To/Python/Packages + + + true + + + Qt::LogicalMoveStyle + + + false + + + false + + + -1 + + + + + + + + 0 + 1 + + + + + 1 + 1 + + + + PointingHandCursor + + + Qt::TabFocus + + + Copy the path to the directory where Python packages are stored. + + + Copy + + + false + + + + + + + + 0 + 1 + + + + + 1 + 1 + + + + PointingHandCursor + + + Qt::TabFocus + + + Open the path to the directory where Python packages are stored. + + + Open + + + false + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 10 + + + + + + + 0 + 0 + + - An asterisk (*) in the "Used by" column indicates an optional dependency. Note that 'Used by' only records direct imports in the addon. Other Python packages that those packages depend upon may have been installed as well. + <html><head/><body><p>An asterisk (*) in the &quot;Used by&quot; column indicates an optional dependency. Note that 'Used by' only records direct imports in the addon. Other Python packages that those packages depend upon may have been installed as well.</p></body></html> true