src.bluetooth_sig.gatt.special_values_resolver

Resolver for merged special-value rules with runtime overrides.

This module provides SpecialValueResolver that centralises special-value lookups with a priority: user overrides > class rules > spec rules.

It reuses the data types defined in bluetooth_sig.types.special_values.

Classes

Name

Description

SpecialValueResolver

Resolve raw integers to SpecialValueResult and provide reverse lookups.

Module Contents

class src.bluetooth_sig.gatt.special_values_resolver.SpecialValueResolver(spec_rules: dict[int, bluetooth_sig.types.special_values.SpecialValueRule] | None = None, class_rules: dict[int, bluetooth_sig.types.special_values.SpecialValueRule] | None = None)

Resolve raw integers to SpecialValueResult and provide reverse lookups.

Behavior: - The resolver stores three sources:

  • spec_rules (lowest priority)

  • class_rules

  • user_overrides (highest priority)

  • Users may add rules at runtime or disable a raw value (by setting a sentinel None in user_overrides).

add_special_value(rule: bluetooth_sig.types.special_values.SpecialValueRule) None

Convenience to add a user-defined special rule.

clear_user_override(raw_value: int) None

Clear any user override (fall back to class/spec).

disable_special_value(raw_value: int) None

Disable special-value handling for a raw value (treat as normal data).

get_raw_for_meaning(meaning: str) int | None

Return first raw value where meaning contains the given string (ci, partial).

get_raw_for_type(value_type: src.bluetooth_sig.types.units.SpecialValueType) int | None

Return the first raw value matching the given SpecialValueType.

Search priority: user > class > spec.

is_special(raw_value: int) bool

Quick boolean check whether raw_value resolves to a special rule.

list_all_rules() dict[int, tuple[bluetooth_sig.types.special_values.SpecialValueRule, str]]

Return merged rules with source tag (‘user’,’class’,’spec’).

User overrides (including disables) take precedence and may remove a rule by setting it to None.

resolve(raw_value: int) bluetooth_sig.types.special_values.SpecialValueResult | None

Return SpecialValueResult if raw_value is special, otherwise None.

set_user_override(raw_value: int, rule: bluetooth_sig.types.special_values.SpecialValueRule) None

Set or replace a user override for a raw value.