Skip to content

Commit b7df299

Browse files
committed
add classlogger mixin and clear_widgets
Signed-off-by: Zen <[email protected]>
1 parent b303608 commit b7df299

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

src/zenlib/logging/classlogger.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
__author__ = "desultory"
2+
__version__ = "1.1.0"
3+
4+
from .colorlognameformatter import ColorLognameFormatter
5+
6+
from logging import Logger, getLogger, StreamHandler
7+
from sys import modules
8+
9+
10+
def _has_handler(logger):
11+
while logger:
12+
if logger.handlers:
13+
return True
14+
logger = logger.parent
15+
return False
16+
17+
18+
class ClassLogger:
19+
def __init__(self, logger=None, _log_bump=0, *args, **kwargs):
20+
# Get the parent logger from the root if one was not passed
21+
parent_logger = logger if isinstance(logger, Logger) else getLogger()
22+
# Get a child logger from the parent logger, set self.logger
23+
self.logger = parent_logger.getChild(self.__class__.__name__)
24+
# Bump the log level if _log_bump is passed
25+
self.logger.setLevel(self.logger.parent.level + _log_bump)
26+
27+
# Add a colored stream handler if one does not exist
28+
if not _has_handler(self.logger):
29+
color_stream_handler = StreamHandler()
30+
color_stream_handler.setFormatter(ColorLognameFormatter(fmt='%(levelname)s | %(name)-42s | %(message)s'))
31+
self.logger.addHandler(color_stream_handler)
32+
self.logger.info("Adding default handler: %s" % self.logger)
33+
34+
# Log class init if _log_init is passed
35+
if kwargs.pop('_log_init', True) is True:
36+
self.logger.info("Intializing class: %s" % self.__class__.__name__)
37+
self.logger.debug("Log level: %s" % self.logger.level)
38+
39+
if args:
40+
self.logger.debug("Args: %s" % repr(args))
41+
if kwargs:
42+
self.logger.debug("Kwargs: %s" % repr(kwargs))
43+
if module_version := getattr(modules[self.__module__], '__version__', None):
44+
self.logger.info("Module version: %s" % module_version)
45+
if class_version := getattr(self, '__version__', None):
46+
self.logger.info("Class version: %s" % class_version)
47+
else:
48+
self.logger.log(5, "Init debug logging disabled for: %s" % self.__name__)
49+
50+
def __setattr__(self, name, value):
51+
""" Add logging to setattr. """
52+
super().__setattr__(name, value)
53+
54+
# Check if the logger is defined
55+
if not hasattr(self, 'logger') or not isinstance(self.logger, Logger):
56+
return
57+
58+
if isinstance(value, list) or isinstance(value, dict) or isinstance(value, str) and "\n" in value:
59+
self.logger.log(5, "Setattr '%s' to:\n%s" % (name, getattr(self, name)))
60+
else:
61+
self.logger.log(5, "Setattr '%s' to: %s" % (name, getattr(self, name)))
62+
63+
def __setitem__(self, name, value):
64+
""" Add logging to dict setitem. """
65+
if hasattr(super(), '__setitem__'):
66+
super().__setitem__(name, value)
67+
self.logger.log(5, "Setitem '%s' to: %s" % (name, value))

src/zenlib/util/clear_widgets.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from PyQt6.QtWidgets import QWidgetItem
2+
3+
4+
# This function is used to clear the widgets from the layout
5+
def clear_widgets(qt_object):
6+
for i in range(qt_object.count()):
7+
item = qt_object.itemAt(i)
8+
if isinstance(item, QWidgetItem) and item.widget():
9+
item.widget().deleteLater()

0 commit comments

Comments
 (0)