platypush/platypush/plugins/bluetooth/_types.py

44 lines
1.3 KiB
Python

from dataclasses import dataclass, field
from typing import Collection, Union
from uuid import UUID
RawServiceClass = Union[UUID, int]
"""
Raw type for service classes received by pybluez.
Can be either a 16-bit integer or a UUID.
"""
@dataclass
class DevicesBlacklist:
"""
A data class representing the rules for blacklisting devices.
"""
addresses: Collection[str] = field(default_factory=set[str])
""" MAC addresses to ignore. """
names: Collection[str] = field(default_factory=set[str])
""" Device names to ignore. """
manufacturers: Collection[str] = field(default_factory=set[str])
""" Manufacturers strings to ignore. """
def __post_init__(self):
"""
Normalize the blacklist rules.
"""
# Normalize case-sensitivity for addresses
self.addresses = set(map(str.lower, self.addresses))
# Make sure that all the collections are sets
self.names = set(self.names)
self.manufacturers = set(self.manufacturers)
def matches(self, device) -> bool:
"""
:type device: :class:`platypush.entities.bluetooth.BluetoothDevice`.
"""
return (
device.address.lower() in self.addresses
or device.name in self.names
or device.manufacturer in self.manufacturers
)