| 29 | |
| 30 | |
| 31 | class Handler: |
| 32 | def __init__( |
| 33 | self, |
| 34 | *, |
| 35 | sink, |
| 36 | name, |
| 37 | levelno, |
| 38 | formatter, |
| 39 | is_formatter_dynamic, |
| 40 | filter_, |
| 41 | colorize, |
| 42 | serialize, |
| 43 | enqueue, |
| 44 | multiprocessing_context, |
| 45 | error_interceptor, |
| 46 | exception_formatter, |
| 47 | id_, |
| 48 | levels_ansi_codes |
| 49 | ): |
| 50 | self._name = name |
| 51 | self._sink = sink |
| 52 | self._levelno = levelno |
| 53 | self._formatter = formatter |
| 54 | self._is_formatter_dynamic = is_formatter_dynamic |
| 55 | self._filter = filter_ |
| 56 | self._colorize = colorize |
| 57 | self._serialize = serialize |
| 58 | self._enqueue = enqueue |
| 59 | self._multiprocessing_context = multiprocessing_context |
| 60 | self._error_interceptor = error_interceptor |
| 61 | self._exception_formatter = exception_formatter |
| 62 | self._id = id_ |
| 63 | self._levels_ansi_codes = levels_ansi_codes # Warning, reference shared among handlers |
| 64 | |
| 65 | self._decolorized_format = None |
| 66 | self._precolorized_formats = {} |
| 67 | self._memoize_dynamic_format = None |
| 68 | |
| 69 | self._stopped = False |
| 70 | self._lock = create_handler_lock() |
| 71 | self._lock_acquired = threading.local() |
| 72 | self._queue = None |
| 73 | self._queue_lock = None |
| 74 | self._confirmation_event = None |
| 75 | self._confirmation_lock = None |
| 76 | self._owner_process_pid = None |
| 77 | self._thread = None |
| 78 | |
| 79 | if self._is_formatter_dynamic: |
| 80 | if self._colorize: |
| 81 | self._memoize_dynamic_format = memoize(prepare_colored_format) |
| 82 | else: |
| 83 | self._memoize_dynamic_format = memoize(prepare_stripped_format) |
| 84 | else: |
| 85 | if self._colorize: |
| 86 | for level_name in self._levels_ansi_codes: |
| 87 | self.update_format(level_name) |
| 88 | else: |
no outgoing calls
no test coverage detected
searching dependent graphs…