#!/usr/bin/env python3
-# © Copyright 2021-2022, Scott Gasch
+# © Copyright 2021-2023, Scott Gasch
"""
If you decorate your main method (i.e. program entry point) like this::
import sys
import uuid
from inspect import stack
+from typing import NoReturn
from pyutils import config, logging_utils
from pyutils.argparse_utils import ActionNoYes
msg = f"Unhandled top level exception {exc_type}"
logger.exception(msg)
print(msg, file=sys.stderr)
+ logging_utils.unhandled_top_level_exception(exc_type, exc_value, exc_tb)
if issubclass(exc_type, KeyboardInterrupt):
sys.__excepthook__(exc_type, exc_value, exc_tb)
return
def should_ignore_filename(filename: str) -> bool:
return "importlib" in filename or "six.py" in filename
- def find_module(self, fullname, path):
+ def find_module(self, fullname, path) -> NoReturn:
raise Exception(
"This method has been deprecated since Python 3.4, please upgrade."
)
entry_descr = None
try:
entry_filename = entry_point.__code__.co_filename
- entry_descr = entry_point.__code__.__repr__()
+ entry_descr = repr(entry_point.__code__)
except Exception:
if (
"__globals__" in entry_point.__dict__
):
entry_filename = entry_point.__globals__["__file__"]
entry_descr = entry_filename
+ if not entry_filename:
+ entry_filename = 'UNKNOWN'
config.parse(entry_filename)
if config.config["trace_memory"]:
sys.maxsize,
sys.byteorder,
)
+ logger.debug("Python interpreter path: %s", sys.executable)
logger.debug("Python interpreter version: %s", sys.version)
logger.debug("Python implementation: %s", sys.implementation)
logger.debug("Python C API version: %s", sys.api_version)
logger.debug("Python interpreter running in __debug__ mode.")
else:
logger.debug("Python interpreter running in optimized mode.")
- logger.debug("Python path: %s", sys.path)
+ logger.debug("PYTHONPATH: %s", sys.path)
# Dump some info about the physical machine we're running on
# if we're ing debug mode.
)
# If it doesn't return cleanly, call attention to the return value.
+ base_filename = os.path.basename(entry_filename)
if ret is not None and ret != 0:
- logger.error("Exit %s", ret)
+ if not logging_utils.non_zero_return_value(ret):
+ logger.error("%s: Exit %s", base_filename, ret)
else:
- logger.debug("Exit %s", ret)
+ logger.debug("%s: Exit %s", base_filename, ret)
sys.exit(ret)
return initialize_wrapper