43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""
|
|
This file contains functions for debugging and logging.
|
|
|
|
Author(s): David Marchant
|
|
"""
|
|
|
|
from typing import Any, Tuple
|
|
|
|
from meow_base.functionality.validation import check_type
|
|
from meow_base.core.vars import DEBUG_INFO, DEBUG_WARNING
|
|
|
|
|
|
def setup_debugging(print:Any=None, logging:int=0)->Tuple[Any,int]:
|
|
"""Create a place for debug messages to be sent. Always returns a place,
|
|
along with a logging level."""
|
|
check_type(logging, int)
|
|
if print is None:
|
|
return None, 0
|
|
else:
|
|
if not isinstance(print, object):
|
|
raise TypeError(f"Invalid print location provided")
|
|
writeable = getattr(print, "write", None)
|
|
if not writeable or not callable(writeable):
|
|
raise TypeError(f"Print object does not implement required "
|
|
"'write' function")
|
|
|
|
return print, logging
|
|
|
|
|
|
def print_debug(print_target, debug_level, msg, level)->None:
|
|
"""Function to print a message to the debug target, if its level exceeds
|
|
the given one."""
|
|
if print_target is None:
|
|
return
|
|
else:
|
|
if level <= debug_level:
|
|
status = "ERROR"
|
|
if level == DEBUG_INFO:
|
|
status = "INFO"
|
|
elif level == DEBUG_WARNING:
|
|
status = "WARNING"
|
|
print(f"{status}: {msg}", file=print_target)
|