From 728246a72f9bd697576d25aa21179dc5d1e53646 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Fri, 13 Feb 2026 09:54:08 -0500 Subject: [PATCH] Add preferences to enable logging in release build --- quickbake/__init__.py | 10 ++++++---- quickbake/op.py | 8 ++++++++ quickbake/preferences.py | 30 ++++++++++++++++++++++++++++++ quickbake/util.py | 13 +++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 quickbake/preferences.py diff --git a/quickbake/__init__.py b/quickbake/__init__.py index 9773628..76b8900 100644 --- a/quickbake/__init__.py +++ b/quickbake/__init__.py @@ -5,14 +5,14 @@ from .op import RENDER_OT_bake from .panel import RENDER_PT_main from .properties import QuickBakeToolPropertyGroup -from .util import is_development +from .util import is_development, enable_logging +from .preferences import QuickBakeAddonPreferences -_log = logging.getLogger(__name__) +_log = logging.getLogger(__package__) if is_development(): - _log.setLevel(logging.DEBUG) - _log.addHandler(logging.StreamHandler()) + enable_logging() def register(): @@ -20,6 +20,7 @@ def register(): bpy.utils.register_class(RENDER_OT_bake) bpy.utils.register_class(RENDER_PT_main) bpy.utils.register_class(QuickBakeToolPropertyGroup) + bpy.utils.register_class(QuickBakeAddonPreferences) bpy.types.Scene.QuickBakeToolPropertyGroup = bpy.props.PointerProperty( # type: ignore type=QuickBakeToolPropertyGroup ) @@ -30,6 +31,7 @@ def unregister(): bpy.utils.unregister_class(RENDER_OT_bake) bpy.utils.unregister_class(RENDER_PT_main) bpy.utils.unregister_class(QuickBakeToolPropertyGroup) + bpy.utils.unregister_class(QuickBakeAddonPreferences) del bpy.types.Scene.QuickBakeToolPropertyGroup # type: ignore diff --git a/quickbake/op.py b/quickbake/op.py index 8fb7a05..ab223fe 100644 --- a/quickbake/op.py +++ b/quickbake/op.py @@ -3,7 +3,9 @@ import bpy from bpy_extras.node_shader_utils import PrincipledBSDFWrapper +from .preferences import get_preferences from .properties import MaterialMode, QuickBakeToolPropertyGroup +from .util import enable_logging, disable_logging, is_development _log = logging.getLogger(__name__) @@ -52,6 +54,12 @@ def poll(cls, context): return obj is not None and obj.type == "MESH" def execute(self, context: bpy.types.Context): + prefs = get_preferences(context) + if prefs.enable_logging or is_development(): + enable_logging() + else: + disable_logging() + _log.info("Begin execution") # Keeping type hints happy, should not be possible diff --git a/quickbake/preferences.py b/quickbake/preferences.py new file mode 100644 index 0000000..8e20527 --- /dev/null +++ b/quickbake/preferences.py @@ -0,0 +1,30 @@ +# pyright: reportInvalidTypeForm=false +import bpy +from bpy.props import BoolProperty + + +class QuickBakeAddonPreferences(bpy.types.AddonPreferences): + # This must match the add-on name, use `__package__` + # when defining this for add-on extensions or a sub-module of a Python package. + assert __package__ is not None, "Need __package__" + bl_idname = __package__ + + enable_logging: BoolProperty( + name="Enable debug logging", + default=False, + ) + + def draw(self, context): + layout = self.layout + layout.prop(self, "enable_logging") + + +def get_preferences(context: bpy.types.Context) -> QuickBakeAddonPreferences: + preferences = context.preferences + assert preferences is not None + assert __package__ is not None + addon = preferences.addons[__package__] + assert addon is not None + addon_prefs: QuickBakeAddonPreferences = addon.preferences # type: ignore + assert addon_prefs is not None + return addon_prefs diff --git a/quickbake/util.py b/quickbake/util.py index dad8ac0..ef92a35 100644 --- a/quickbake/util.py +++ b/quickbake/util.py @@ -1,4 +1,5 @@ import os +import logging import tomllib @@ -12,3 +13,15 @@ def _get_version(): def is_development(): return _get_version() == "0.0.0" + + +def enable_logging(): + log = logging.getLogger(__package__) + if not log.handlers: + log.setLevel(logging.DEBUG) + log.addHandler(logging.StreamHandler()) + + +def disable_logging(): + log = logging.getLogger(__package__) + log.handlers.clear()