# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file """ The hints module should contain functions to call in your code. In reality, right now it does only contain an import tracing mechanism that helps us with debugging. """ from __future__ import print_function import os import sys import traceback try: import __builtin__ as builtins except ImportError: import builtins original_import = __import__ _indentation = 0 def _normalizePath(path): path = os.path.abspath(path) best = None paths = list(sys.path) # Nuitka standalone mode. try: paths.append(__nuitka_binary_dir) paths.append(os.getcwd()) except NameError: pass for path_entry in paths: path_entry = os.path.normcase(path_entry) if os.path.normcase(path).startswith(path_entry): if best is None or len(path_entry) > len(best): best = path_entry if best is not None: path = "$PYTHONPATH" + path[len(best) :] return path def _moduleRepr(module): try: module_filename = module.__file__ module_filename = module_filename.replace(".pyc", ".py") if module_filename.endswith(".so"): module_filename = os.path.join( os.path.dirname(module_filename), os.path.basename(module_filename).split(".")[0] + ".so", ) file_desc = "file " + _normalizePath(module_filename).replace(".pyc", ".py") except AttributeError: file_desc = "built-in" return "" % (module.__name__, file_desc) do_normalize_paths = None do_show_source = None def _ourimport( name, globals=None, # pylint: disable=redefined-builtin locals=None, # pylint: disable=redefined-builtin fromlist=None, level=-1 if sys.version_info[0] < 3 else 0, ): builtins.__import__ = original_import # Singleton, pylint: disable=global-statement global _indentation try: _indentation += 1 print( _indentation * " " + "called with: name=%r level=%d fromlist=%s" % (name, level, fromlist) ) for entry in traceback.extract_stack()[:-1]: if entry[2] == "_ourimport": print(_indentation * " " + "by __import__") else: entry = list(entry) if not do_show_source: del entry[-1] del entry[-1] if do_normalize_paths: entry[0] = _normalizePath(entry[0]) if entry[0].startswith("