12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import collections
- import os
- _Instance = collections.namedtuple("_Instance", ("import_tracer", "converter", "filepath"))
- INSTANCE = None
- def _get_converter_instance():
- import library.python.import_tracing.lib.converters.raw as text_converter
- import library.python.import_tracing.lib.converters.chrometrace as chrome_converter
- converter_mapping = {"text": text_converter.RawTextTraceConverter, "evlog": chrome_converter.ChromiumTraceConverter}
- env_val = os.getenv("Y_PYTHON_TRACE_FORMAT")
- converter = converter_mapping.get(env_val, text_converter.RawTextTraceConverter)
- return converter()
- def _resolve_filepath(filemask):
- import socket
- import sys
- pid = os.getpid()
- hostname = socket.gethostname()
- executable_filename = os.path.basename(sys.executable)
- return filemask.replace("%p", str(pid)).replace("%h", hostname).replace("%e", executable_filename)
- def enable(filemask):
- import library.python.import_tracing.lib.import_tracer as import_tracer
- import __res
- global INSTANCE
- if INSTANCE is not None:
- return INSTANCE
- converter = _get_converter_instance()
- import_tracer = import_tracer.ImportTracer()
- def before_import_callback(modname, filename):
- import_tracer.start_event(modname, filename)
- def after_import_callback(modname, filename):
- import_tracer.finish_event(modname, filename)
- __res.importer.set_callbacks(before_import_callback, after_import_callback)
- filepath = _resolve_filepath(filemask)
- new_instance = _Instance(import_tracer, converter, filepath)
- INSTANCE = new_instance
- return new_instance
- def disable(close_not_finished=False):
- global INSTANCE
- if INSTANCE is None:
- return
- import_tracer = INSTANCE.import_tracer
- converter = INSTANCE.converter
- filepath = INSTANCE.filepath
- converter.dump(import_tracer.get_events(close_not_finished), filepath)
- INSTANCE = None
|