Source code for libdebug.utils.signal_utils
#
# This file is part of libdebug Python library (https://github.com/libdebug/libdebug).
# Copyright (c) 2024 Gabriele Digregorio. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for details.
#
import functools
import signal
[docs]
@functools.cache
def create_signal_mappings() -> tuple[dict, dict]:
    """Create mappings between signal names and numbers."""
    signal_to_number = {}
    number_to_signal = {}
    for name in dir(signal):
        if name.startswith("SIG") and not name.startswith("SIG_"):
            number = getattr(signal, name)
            signal_to_number[name] = number
            number_to_signal[number] = name
    return signal_to_number, number_to_signal 
[docs]
@functools.cache
def resolve_signal_number(name: str) -> int:
    """Resolve a signal name to its number.
    Args:
        name (str): the signal name.
    Returns:
        int: the signal number.
    """
    signal_to_number, _ = create_signal_mappings()
    try:
        return signal_to_number[name]
    except KeyError as e:
        raise ValueError(f"Signal {name} not found.") from e 
[docs]
@functools.cache
def resolve_signal_name(number: int) -> str:
    """Resolve a signal number to its name.
    Args:
        number (int): the signal number.
    Returns:
        str: the signal name.
    """
    _, number_to_signal = create_signal_mappings()
    try:
        return number_to_signal[number]
    except KeyError as e:
        raise ValueError(f"Signal {number} not found.") from e 
[docs]
@functools.cache
def get_all_signal_numbers() -> list:
    """Get all the signal numbers.
    Returns:
        list: the list of signal numbers.
    """
    _, number_to_signal = create_signal_mappings()
    return list(number_to_signal.keys())