TasmotaManager/is_hostname_unknown_implementation_summary.md
Mike Geppert 126cd39555 Major code improvements and bug fixes:
1. Restructured configuration: Moved config_other and console to top level
2. Added common _match_pattern function for regex pattern matching
3. Implemented Unifi Hostname bug fix in is_hostname_unknown
4. Created common get_device_hostname function to eliminate code duplication
5. Added comprehensive test scripts for all new functionality
6. Added detailed documentation for all changes
2025-08-08 19:04:33 -05:00

4.6 KiB

is_hostname_unknown Function Implementation Summary

Overview

A new utility function is_hostname_unknown has been added to the TasmotaManager.py script to provide a centralized way to check if a hostname matches any pattern in the unknown_device_patterns list. This function standardizes the pattern matching logic that was previously duplicated in multiple places throughout the codebase.

Implementation Details

The function has been implemented as a method of the TasmotaDiscovery class:

def is_hostname_unknown(self, hostname: str, patterns: list = None) -> bool:
    """Check if a hostname matches any pattern in unknown_device_patterns.
    
    This function provides a centralized way to check if a hostname matches any of the
    unknown_device_patterns defined in the configuration. It uses case-insensitive
    matching and supports glob patterns (with *) in the patterns list.
    
    Args:
        hostname: The hostname to check against unknown_device_patterns
        patterns: Optional list of patterns to check against. If not provided,
                  patterns will be loaded from the configuration.
                  
    Returns:
        bool: True if the hostname matches any pattern, False otherwise
        
    Examples:
        # Check if a hostname matches any unknown_device_patterns in the config
        if manager.is_hostname_unknown("tasmota_device123"):
            print("This is an unknown device")
            
        # Check against a specific list of patterns
        custom_patterns = ["esp-*", "tasmota_*"]
        if manager.is_hostname_unknown("esp-abcd", custom_patterns):
            print("This matches a custom pattern")
    """
    # If no patterns provided, get them from the configuration
    if patterns is None:
        patterns = []
        network_filters = self.config['unifi'].get('network_filter', {})
        for network in network_filters.values():
            patterns.extend(network.get('unknown_device_patterns', []))
    
    # Convert hostname to lowercase for case-insensitive matching
    hostname_lower = hostname.lower()
    
    # Check if hostname matches any pattern
    for pattern in patterns:
        pattern_lower = pattern.lower()
        # Convert glob pattern to regex pattern
        pattern_regex = pattern_lower.replace('.', r'\.').replace('*', '.*')
        if re.match(f"^{pattern_regex}", hostname_lower):
            self.logger.debug(f"Hostname '{hostname}' matches unknown device pattern: {pattern}")
            return True
    
    return False

Features

The function includes the following features:

  1. Centralized Logic: Provides a single place for hostname pattern matching logic
  2. Case Insensitivity: Performs case-insensitive matching
  3. Glob Pattern Support: Supports glob patterns (with *) in the patterns list
  4. Flexible Pattern Source: Can use patterns from the configuration or a custom list
  5. Detailed Logging: Logs when a hostname matches a pattern
  6. Comprehensive Documentation: Includes detailed docstring with examples

Testing

A comprehensive test script (test_is_hostname_unknown.py) has been created to verify the function's behavior. The tests include:

  1. Testing with patterns from the configuration
  2. Testing with custom patterns
  3. Testing case insensitivity

All tests have passed, confirming that the function works correctly in all scenarios.

Usage Examples

Basic Usage

# Check if a hostname matches any unknown_device_patterns in the config
if manager.is_hostname_unknown("tasmota_device123"):
    print("This is an unknown device")

With Custom Patterns

# Check against a specific list of patterns
custom_patterns = ["esp-*", "tasmota_*"]
if manager.is_hostname_unknown("esp-abcd", custom_patterns):
    print("This matches a custom pattern")

Potential Refactoring Opportunities

The following places in the code could potentially be refactored to use the new function:

  1. In get_tasmota_devices (lines 235-244)
  2. In get_unknown_devices (lines 500-506)
  3. In process_single_device (lines 1526-1533)
  4. In process_devices (lines 1760-1766)

Refactoring these sections would improve code maintainability and ensure consistent behavior across all parts of the application.

Conclusion

The is_hostname_unknown function provides a centralized, well-documented, and thoroughly tested way to check if a hostname matches any pattern in the unknown_device_patterns list. This implementation satisfies the requirements specified in the issue description and improves the overall code quality of the TasmotaManager.py script.