Source code for objwatch.config
# MIT License
# Copyright (c) 2025 aeeeeeep
import logging
from types import ModuleType
from dataclasses import dataclass
from typing import Optional, Union, List
from .wrappers import ABCWrapper
[docs]
@dataclass(frozen=True)
class ObjWatchConfig:
"""
Configuration parameters for ObjWatch.
Args:
targets (List[Union[str, ModuleType]]): Files or modules to monitor.
exclude_targets (Optional[List[Union[str, ModuleType]]]): Files or modules to exclude from monitoring.
framework (Optional[str]): The multi-process framework module to use.
indexes (Optional[List[int]]): The indexes to track in a multi-process environment.
output (Optional[str]): Path to a file for writing logs.
output_xml (Optional[str]): Path to the XML file for writing structured logs.
level (int): Logging level (e.g., logging.DEBUG, logging.INFO).
simple (bool): Enable simple logging mode with the format "DEBUG: {msg}".
wrapper (Optional[ABCWrapper]): Custom wrapper to extend tracing and logging functionality.
with_locals (bool): Enable tracing and logging of local variables within functions.
with_globals (bool): Enable tracing and logging of global variables across function calls.
"""
targets: List[Union[str, ModuleType]]
exclude_targets: Optional[List[Union[str, ModuleType]]] = None
framework: Optional[str] = None
indexes: Optional[List[int]] = None
output: Optional[str] = None
output_xml: Optional[str] = None
level: int = logging.DEBUG
simple: bool = False
wrapper: Optional[ABCWrapper] = None
with_locals: bool = False
with_globals: bool = False
[docs]
def __post_init__(self) -> None:
"""
Post-initialization configuration validation
"""
if not self.targets:
raise ValueError("At least one monitoring target must be specified")
if self.level == "force" and self.output is not None:
raise ValueError("output cannot be specified when level is 'force'")