Source code for test_a_ble

"""
BLE IoT Device Testing Framework.

A modular, extensible framework for testing Bluetooth Low Energy IoT devices.
"""

import logging
import sys
from typing import Optional

__version__ = "0.1.0"


[docs] def setup_logging(verbose: bool = False, log_file: Optional[str] = None): """ Configure logging for the BLE test framework. Args: verbose: If True, set log level to DEBUG, otherwise WARNING to hide INFO logs during test log_file: Optional path to a log file to write logs to """ # Set up logger with the desired log level root_logger = logging.getLogger() # Always maintain DEBUG level on the root logger to allow file logging root_logger.setLevel(logging.DEBUG) # Configure console handler with a format console_handler = logging.StreamHandler(sys.stdout) # Only show INFO+ logs during tests if verbose is enabled, otherwise # WARNING+ console_handler.setLevel(logging.DEBUG if verbose else logging.WARNING) # Create a formatter that includes the timestamp, level, and message # Using a more concise format for better readability during tests formatter = logging.Formatter( ("%(levelname)-8s %(message)s" if not verbose else "%(asctime)s %(levelname)-8s %(message)s"), datefmt="%H:%M:%S", ) console_handler.setFormatter(formatter) # Remove any existing handlers to avoid duplicate logs for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) # Add the console handler to the root logger root_logger.addHandler(console_handler) # Add file handler if log_file is specified if log_file: file_handler = logging.FileHandler(log_file) file_handler.setLevel(logging.DEBUG) # Always log DEBUG to file file_handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)-8s %(message)s", datefmt="%H:%M:%S")) root_logger.addHandler(file_handler) # Configure specific package loggers if not verbose: # Set higher log levels for noisy libraries and framework components # to reduce output logging.getLogger("bleak").setLevel(logging.WARNING) logging.getLogger("asyncio").setLevel(logging.WARNING) logging.getLogger("test_a_ble.ble_manager").setLevel(logging.WARNING) # Log the configuration logging.debug(f"Logging configured (verbose: {verbose}, log_file: {log_file})")