40from typing
import IO, Optional, Dict, Any, Final, TYPE_CHECKING
84 """Enumeration of the standard stream identifiers.
86 Used throughout the package to distinguish which standard stream a
87 TeeStream instance is wrapping, and to look up the correct folder
88 name and log prefix for that stream.
93 STDUNKNOWN = STDUNKNOWN
96LOG_FOLDER_BASE_NAME: str =
"logs"
98FOLDER_STDOUT: str =
"stdout"
99FOLDER_STDERR: str =
"stderr"
100FOLDER_STDIN: str =
"stdin"
101FOLDER_STDUNKNOWN: str =
"std_unknown"
103CORRECT_FOLDER: Dict[StdMode, str] = {
104 StdMode.STDIN: FOLDER_STDIN,
105 StdMode.STDOUT: FOLDER_STDOUT,
106 StdMode.STDERR: FOLDER_STDERR,
107 StdMode.STDUNKNOWN: FOLDER_STDUNKNOWN,
110BUFFER_FLUSH_SIZE: int = 8 * KB1
112DEFAULT_ENCODING: str =
"utf-8"
113DEFAULT_LOG_MAX_FILE_SIZE: int = 2 * GB1
114DEFAULT_LOG_BUFFER_FLUSH_SIZE: int = BUFFER_FLUSH_SIZE
115DEFAULT_LOG_FOLDER: Path = Path(__file__).parent / LOG_FOLDER_BASE_NAME
118ERROR_MODE_WARN: str =
"Warn"
119ERROR_MODE_WARN_NO_PIPE: str =
"Warn No pipe"
120ERROR_MODE_EXIT: str =
"Exit"
121ERROR_MODE_EXIT_NO_PIPE: str =
"Exit No pipe"
156 """Flags describing which streams should be prefixed when mirrored.
158 Each flag is a boolean indicating whether the corresponding
159 standard stream (stdin/stdout/stderr) should receive a textual
160 prefix when written to disk.
163 std_out: bool =
False
164 std_err: bool =
False
167BROKEN_PIPE_ERROR: str = f
"{MODULE_NAME} Broken pipe on stdout"
169PREFIX_STDOUT: str =
"[STDOUT]"
170PREFIX_STDERR: str =
"[STDERR]"
171PREFIX_STDIN: str =
"[STDIN]"
172PREFIX_STDUNKNOWN: str =
"[STDUNKNOWN]"
173CORRECT_PREFIX: Dict[StdMode, str] = {
174 StdMode.STDIN: PREFIX_STDIN,
175 StdMode.STDOUT: PREFIX_STDOUT,
176 StdMode.STDERR: PREFIX_STDERR,
177 StdMode.STDUNKNOWN: PREFIX_STDUNKNOWN
180PREFIX_FUNCTION_CALL_EMPTY: str =
""
181PREFIX_FUNCTION_CALL_WRITE: str =
"[WRITE]"
182PREFIX_FUNCTION_CALL_WRITELINES: str =
"[WRITELINES]"
183PREFIX_FUNCTION_CALL_FLUSH: str =
"[FLUSH]"
184PREFIX_FUNCTION_CALL_READ: str =
"[READ]"
185PREFIX_FUNCTION_CALL_READLINE: str =
"[READLINE]"
186PREFIX_FUNCTION_CALL_READLINES: str =
"[READLINES]"
190 """Optional per-call prefix appended to log entries for precise tracing.
192 When enabled, each log entry is tagged with the name of the stream
193 method that produced it (e.g. [WRITE], [READLINE]), making it easy
194 to distinguish writes from reads in a shared log file.
196 EMPTY = PREFIX_FUNCTION_CALL_EMPTY
197 WRITE = PREFIX_FUNCTION_CALL_WRITE
198 WRITELINES = PREFIX_FUNCTION_CALL_WRITELINES
199 FLUSH = PREFIX_FUNCTION_CALL_FLUSH
200 READ = PREFIX_FUNCTION_CALL_READ
201 READLINE = PREFIX_FUNCTION_CALL_READLINE
202 READLINES = PREFIX_FUNCTION_CALL_READLINES
205LOG_TO_FILE_ENV: bool = os.environ.get(
208).lower()
in (
"1",
"true",
"yes")
210RAW_LOG_FOLDER_ENV: str = os.environ.get(
212 str(DEFAULT_LOG_FOLDER)