diff --git a/apps/auracast.py b/apps/auracast.py index 5dbcbb7..19bff3d 100644 --- a/apps/auracast.py +++ b/apps/auracast.py @@ -24,12 +24,7 @@ import dataclasses import functools import logging import struct -from typing import ( - Any, - AsyncGenerator, - Coroutine, - Optional, -) +from typing import Any, AsyncGenerator, Coroutine, Optional import click @@ -40,21 +35,14 @@ except ImportError as e: "Try `python -m pip install \"git+https://github.com/google/liblc3.git\"`." ) from e -from bumble.audio import io as audio_io -from bumble.colors import color -from bumble import company_ids -from bumble import core -from bumble import gatt -from bumble import hci -from bumble.profiles import bap -from bumble.profiles import le_audio -from bumble.profiles import pbp -from bumble.profiles import bass import bumble.device +import bumble.logging import bumble.transport import bumble.utils -import bumble.logging - +from bumble import company_ids, core, gatt, hci +from bumble.audio import io as audio_io +from bumble.colors import color +from bumble.profiles import bap, bass, le_audio, pbp # ----------------------------------------------------------------------------- # Logging diff --git a/apps/bench.py b/apps/bench.py index d7e9fcd..52f81c0 100644 --- a/apps/bench.py +++ b/apps/bench.py @@ -26,16 +26,19 @@ from typing import Optional import click +import bumble.core +import bumble.logging +import bumble.rfcomm from bumble import l2cap +from bumble.colors import color from bumble.core import ( - PhysicalTransport, BT_L2CAP_PROTOCOL_ID, BT_RFCOMM_PROTOCOL_ID, UUID, CommandTimeoutError, + ConnectionPHY, + PhysicalTransport, ) -from bumble.colors import color -from bumble.core import ConnectionPHY from bumble.device import ( CigParameters, CisLink, @@ -49,12 +52,13 @@ from bumble.hci import ( HCI_LE_1M_PHY, HCI_LE_2M_PHY, HCI_LE_CODED_PHY, - Role, HCI_Constant, HCI_Error, - HCI_StatusError, HCI_IsoDataPacket, + HCI_StatusError, + Role, ) +from bumble.pairing import PairingConfig from bumble.sdp import ( SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, @@ -65,12 +69,7 @@ from bumble.sdp import ( ServiceAttribute, ) from bumble.transport import open_transport -import bumble.rfcomm -import bumble.core from bumble.utils import AsyncRunner -from bumble.pairing import PairingConfig -import bumble.logging - # ----------------------------------------------------------------------------- # Logging diff --git a/apps/ble_rpa_tool.py b/apps/ble_rpa_tool.py index 07d89a3..c8d70d0 100644 --- a/apps/ble_rpa_tool.py +++ b/apps/ble_rpa_tool.py @@ -13,6 +13,7 @@ # limitations under the License. import click + from bumble.colors import color from bumble.hci import Address from bumble.helpers import generate_irk, verify_rpa_with_irk diff --git a/apps/console.py b/apps/console.py index 29e0522..e57bc54 100644 --- a/apps/console.py +++ b/apps/console.py @@ -23,58 +23,55 @@ import asyncio import logging import os import re -import humanize -from typing import Optional, Union from collections import OrderedDict +from typing import Optional, Union import click +import humanize from prettytable import PrettyTable - from prompt_toolkit import Application -from prompt_toolkit.history import FileHistory from prompt_toolkit.completion import Completer, Completion, NestedCompleter -from prompt_toolkit.key_binding import KeyBindings -from prompt_toolkit.formatted_text import ANSI -from prompt_toolkit.styles import Style -from prompt_toolkit.filters import Condition -from prompt_toolkit.widgets import TextArea, Frame -from prompt_toolkit.widgets.toolbars import FormattedTextToolbar from prompt_toolkit.data_structures import Point +from prompt_toolkit.filters import Condition +from prompt_toolkit.formatted_text import ANSI +from prompt_toolkit.history import FileHistory +from prompt_toolkit.key_binding import KeyBindings from prompt_toolkit.layout import ( - Layout, - HSplit, - Window, CompletionsMenu, - Float, - FormattedTextControl, - FloatContainer, ConditionalContainer, Dimension, + Float, + FloatContainer, + FormattedTextControl, + HSplit, + Layout, + Window, ) +from prompt_toolkit.styles import Style +from prompt_toolkit.widgets import Frame, TextArea +from prompt_toolkit.widgets.toolbars import FormattedTextToolbar -from bumble import __version__ import bumble.core -from bumble import colors +from bumble import __version__, colors from bumble.core import UUID, AdvertisingData from bumble.device import ( + Connection, ConnectionParametersPreferences, ConnectionPHY, Device, - Connection, Peer, ) -from bumble.utils import AsyncRunner -from bumble.transport import open_transport -from bumble.gatt import Characteristic, Service, CharacteristicDeclaration, Descriptor +from bumble.gatt import Characteristic, CharacteristicDeclaration, Descriptor, Service from bumble.gatt_client import CharacteristicProxy from bumble.hci import ( - Address, - HCI_Constant, HCI_LE_1M_PHY, HCI_LE_2M_PHY, HCI_LE_CODED_PHY, + Address, + HCI_Constant, ) - +from bumble.transport import open_transport +from bumble.utils import AsyncRunner # ----------------------------------------------------------------------------- # Constants diff --git a/apps/controller_info.py b/apps/controller_info.py index f71b178..bbb2db5 100644 --- a/apps/controller_info.py +++ b/apps/controller_info.py @@ -20,44 +20,44 @@ import time import click -from bumble.company_ids import COMPANY_IDENTIFIERS +import bumble.logging from bumble.colors import color +from bumble.company_ids import COMPANY_IDENTIFIERS from bumble.core import name_or_number from bumble.hci import ( - map_null_terminated_utf8_string, - CodecID, - LeFeature, + HCI_LE_READ_BUFFER_SIZE_COMMAND, + HCI_LE_READ_BUFFER_SIZE_V2_COMMAND, + HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH_COMMAND, + HCI_LE_READ_MAXIMUM_DATA_LENGTH_COMMAND, + HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS_COMMAND, + HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND, + HCI_READ_BD_ADDR_COMMAND, + HCI_READ_BUFFER_SIZE_COMMAND, + HCI_READ_LOCAL_NAME_COMMAND, HCI_SUCCESS, HCI_VERSION_NAMES, LMP_VERSION_NAMES, + CodecID, HCI_Command, HCI_Command_Complete_Event, HCI_Command_Status_Event, - HCI_READ_BUFFER_SIZE_COMMAND, - HCI_Read_Buffer_Size_Command, - HCI_LE_READ_BUFFER_SIZE_V2_COMMAND, - HCI_LE_Read_Buffer_Size_V2_Command, - HCI_READ_BD_ADDR_COMMAND, - HCI_Read_BD_ADDR_Command, - HCI_READ_LOCAL_NAME_COMMAND, - HCI_Read_Local_Name_Command, - HCI_LE_READ_BUFFER_SIZE_COMMAND, HCI_LE_Read_Buffer_Size_Command, - HCI_LE_READ_MAXIMUM_DATA_LENGTH_COMMAND, - HCI_LE_Read_Maximum_Data_Length_Command, - HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS_COMMAND, - HCI_LE_Read_Number_Of_Supported_Advertising_Sets_Command, - HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH_COMMAND, + HCI_LE_Read_Buffer_Size_V2_Command, HCI_LE_Read_Maximum_Advertising_Data_Length_Command, - HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND, + HCI_LE_Read_Maximum_Data_Length_Command, + HCI_LE_Read_Number_Of_Supported_Advertising_Sets_Command, HCI_LE_Read_Suggested_Default_Data_Length_Command, + HCI_Read_BD_ADDR_Command, + HCI_Read_Buffer_Size_Command, + HCI_Read_Local_Name_Command, HCI_Read_Local_Supported_Codecs_Command, HCI_Read_Local_Supported_Codecs_V2_Command, HCI_Read_Local_Version_Information_Command, + LeFeature, + map_null_terminated_utf8_string, ) from bumble.host import Host from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/apps/controller_loopback.py b/apps/controller_loopback.py index 22a7502..87c9456 100644 --- a/apps/controller_loopback.py +++ b/apps/controller_loopback.py @@ -21,17 +21,17 @@ from typing import Optional import click +import bumble.logging from bumble.colors import color from bumble.hci import ( HCI_READ_LOOPBACK_MODE_COMMAND, - HCI_Read_Loopback_Mode_Command, HCI_WRITE_LOOPBACK_MODE_COMMAND, + HCI_Read_Loopback_Mode_Command, HCI_Write_Loopback_Mode_Command, LoopbackMode, ) from bumble.host import Host from bumble.transport import open_transport -import bumble.logging class Loopback: diff --git a/apps/controllers.py b/apps/controllers.py index 4584aab..f9a803b 100644 --- a/apps/controllers.py +++ b/apps/controllers.py @@ -18,10 +18,10 @@ import asyncio import sys +import bumble.logging from bumble.controller import Controller from bumble.link import LocalLink from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/apps/device_info.py b/apps/device_info.py index fb860ec..c7f33a5 100644 --- a/apps/device_info.py +++ b/apps/device_info.py @@ -20,18 +20,18 @@ from typing import Callable, Iterable, Optional import click -from bumble.core import ProtocolError +import bumble.logging from bumble.colors import color +from bumble.core import ProtocolError from bumble.device import Device, Peer from bumble.gatt import Service -from bumble.profiles.device_information_service import DeviceInformationServiceProxy from bumble.profiles.battery_service import BatteryServiceProxy +from bumble.profiles.device_information_service import DeviceInformationServiceProxy from bumble.profiles.gap import GenericAccessServiceProxy from bumble.profiles.pacs import PublishedAudioCapabilitiesServiceProxy from bumble.profiles.tmap import TelephonyAndMediaAudioServiceProxy from bumble.profiles.vcs import VolumeControlServiceProxy from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/apps/gatt_dump.py b/apps/gatt_dump.py index 5633edf..b93b441 100644 --- a/apps/gatt_dump.py +++ b/apps/gatt_dump.py @@ -20,11 +20,11 @@ import asyncio import click import bumble.core +import bumble.logging from bumble.colors import color from bumble.device import Device, Peer from bumble.gatt import show_services from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/apps/gg_bridge.py b/apps/gg_bridge.py index f8526b2..5e5574b 100644 --- a/apps/gg_bridge.py +++ b/apps/gg_bridge.py @@ -20,16 +20,15 @@ import struct import click +import bumble.logging from bumble import l2cap from bumble.colors import color -from bumble.device import Device, Peer from bumble.core import AdvertisingData -from bumble.gatt import Service, Characteristic, CharacteristicValue -from bumble.utils import AsyncRunner -from bumble.transport import open_transport +from bumble.device import Device, Peer +from bumble.gatt import Characteristic, CharacteristicValue, Service from bumble.hci import HCI_Constant -import bumble.logging - +from bumble.transport import open_transport +from bumble.utils import AsyncRunner # ----------------------------------------------------------------------------- # Constants diff --git a/apps/hci_bridge.py b/apps/hci_bridge.py index 18f069e..e50d405 100644 --- a/apps/hci_bridge.py +++ b/apps/hci_bridge.py @@ -12,17 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import logging -import asyncio import sys +import bumble.logging from bumble import hci, transport from bumble.bridge import HCI_Bridge -import bumble.logging - # ----------------------------------------------------------------------------- # Logging diff --git a/apps/l2cap_bridge.py b/apps/l2cap_bridge.py index 7ca3146..aaccc12 100644 --- a/apps/l2cap_bridge.py +++ b/apps/l2cap_bridge.py @@ -19,13 +19,13 @@ import asyncio import click +import bumble.logging from bumble import l2cap from bumble.colors import color -from bumble.transport import open_transport from bumble.device import Device -from bumble.utils import FlowControlAsyncPipe from bumble.hci import HCI_Constant -import bumble.logging +from bumble.transport import open_transport +from bumble.utils import FlowControlAsyncPipe # ----------------------------------------------------------------------------- diff --git a/apps/lea_unicast/app.py b/apps/lea_unicast/app.py index 0ffb9da..e63e76d 100644 --- a/apps/lea_unicast/app.py +++ b/apps/lea_unicast/app.py @@ -20,31 +20,30 @@ from __future__ import annotations import asyncio import datetime import functools -from importlib import resources import json import logging import pathlib -import weakref import wave +import weakref +from importlib import resources try: import lc3 # type: ignore # pylint: disable=E0401 except ImportError as e: raise ImportError("Try `python -m pip install \".[lc3]\"`.") from e -import click import aiohttp.web +import click import bumble -from bumble import utils -from bumble.core import AdvertisingData -from bumble.colors import color -from bumble.device import Device, DeviceConfiguration, AdvertisingParameters, CisLink -from bumble.transport import open_transport -from bumble.profiles import ascs, bap, pacs -from bumble.hci import Address, CodecID, CodingFormat, HCI_IsoDataPacket import bumble.logging - +from bumble import utils +from bumble.colors import color +from bumble.core import AdvertisingData +from bumble.device import AdvertisingParameters, CisLink, Device, DeviceConfiguration +from bumble.hci import Address, CodecID, CodingFormat, HCI_IsoDataPacket +from bumble.profiles import ascs, bap, pacs +from bumble.transport import open_transport # ----------------------------------------------------------------------------- # Logging diff --git a/apps/pair.py b/apps/pair.py index 94e65aa..587a024 100644 --- a/apps/pair.py +++ b/apps/pair.py @@ -16,42 +16,42 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import os import logging +import os import struct import click from prompt_toolkit.shortcuts import PromptSession from bumble.a2dp import make_audio_sink_service_sdp_records +from bumble.att import ( + ATT_INSUFFICIENT_AUTHENTICATION_ERROR, + ATT_INSUFFICIENT_ENCRYPTION_ERROR, + ATT_Error, +) from bumble.colors import color -from bumble.device import Device, Peer -from bumble.transport import open_transport -from bumble.pairing import OobData, PairingDelegate, PairingConfig -from bumble.smp import OobContext, OobLegacyContext -from bumble.smp import error_name as smp_error_name -from bumble.keys import JsonKeyStore from bumble.core import ( + UUID, AdvertisingData, Appearance, - ProtocolError, PhysicalTransport, - UUID, + ProtocolError, ) +from bumble.device import Device, Peer from bumble.gatt import ( GATT_DEVICE_NAME_CHARACTERISTIC, GATT_GENERIC_ACCESS_SERVICE, - GATT_HEART_RATE_SERVICE, GATT_HEART_RATE_MEASUREMENT_CHARACTERISTIC, - Service, + GATT_HEART_RATE_SERVICE, Characteristic, + Service, ) from bumble.hci import OwnAddressType -from bumble.att import ( - ATT_Error, - ATT_INSUFFICIENT_AUTHENTICATION_ERROR, - ATT_INSUFFICIENT_ENCRYPTION_ERROR, -) +from bumble.keys import JsonKeyStore +from bumble.pairing import OobData, PairingConfig, PairingDelegate +from bumble.smp import OobContext, OobLegacyContext +from bumble.smp import error_name as smp_error_name +from bumble.transport import open_transport from bumble.utils import AsyncRunner # ----------------------------------------------------------------------------- diff --git a/apps/pandora_server.py b/apps/pandora_server.py index a06a000..d62d3a8 100644 --- a/apps/pandora_server.py +++ b/apps/pandora_server.py @@ -1,11 +1,12 @@ import asyncio -import click -import logging import json - -from bumble.pandora import PandoraDevice, Config, serve +import logging from typing import Any +import click + +from bumble.pandora import Config, PandoraDevice, serve + BUMBLE_SERVER_GRPC_PORT = 7999 ROOTCANAL_PORT_CUTTLEFISH = 7300 diff --git a/apps/player/player.py b/apps/player/player.py index f1454c1..19e4b56 100644 --- a/apps/player/player.py +++ b/apps/player/player.py @@ -16,53 +16,50 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import logging from typing import Optional, Union import click +import bumble.logging from bumble.a2dp import ( - make_audio_source_service_sdp_records, - A2DP_SBC_CODEC_TYPE, A2DP_MPEG_2_4_AAC_CODEC_TYPE, A2DP_NON_A2DP_CODEC_TYPE, + A2DP_SBC_CODEC_TYPE, AacFrame, - AacParser, - AacPacketSource, AacMediaCodecInformation, - SbcFrame, - SbcParser, - SbcPacketSource, - SbcMediaCodecInformation, - OpusPacket, - OpusParser, - OpusPacketSource, + AacPacketSource, + AacParser, OpusMediaCodecInformation, + OpusPacket, + OpusPacketSource, + OpusParser, + SbcFrame, + SbcMediaCodecInformation, + SbcPacketSource, + SbcParser, + make_audio_source_service_sdp_records, ) -from bumble.avrcp import Protocol as AvrcpProtocol from bumble.avdtp import ( - find_avdtp_service_with_connection, AVDTP_AUDIO_MEDIA_TYPE, AVDTP_DELAY_REPORTING_SERVICE_CATEGORY, MediaCodecCapabilities, MediaPacketPump, - Protocol as AvdtpProtocol, ) +from bumble.avdtp import Protocol as AvdtpProtocol +from bumble.avdtp import find_avdtp_service_with_connection +from bumble.avrcp import Protocol as AvrcpProtocol from bumble.colors import color -from bumble.core import ( - AdvertisingData, - ConnectionError as BumbleConnectionError, - DeviceClass, - PhysicalTransport, -) +from bumble.core import AdvertisingData +from bumble.core import ConnectionError as BumbleConnectionError +from bumble.core import DeviceClass, PhysicalTransport from bumble.device import Connection, Device, DeviceConfiguration -from bumble.hci import Address, HCI_CONNECTION_ALREADY_EXISTS_ERROR, HCI_Constant +from bumble.hci import HCI_CONNECTION_ALREADY_EXISTS_ERROR, Address, HCI_Constant from bumble.pairing import PairingConfig from bumble.transport import open_transport from bumble.utils import AsyncRunner -import bumble.logging - # ----------------------------------------------------------------------------- # Logging diff --git a/apps/rfcomm_bridge.py b/apps/rfcomm_bridge.py index 90a0824..1c5aa18 100644 --- a/apps/rfcomm_bridge.py +++ b/apps/rfcomm_bridge.py @@ -21,15 +21,10 @@ from typing import Optional import click -from bumble.colors import color -from bumble.device import Device, DeviceConfiguration, Connection -from bumble import core -from bumble import hci -from bumble import rfcomm -from bumble import transport -from bumble import utils import bumble.logging - +from bumble import core, hci, rfcomm, transport, utils +from bumble.colors import color +from bumble.device import Connection, Device, DeviceConfiguration # ----------------------------------------------------------------------------- # Constants diff --git a/apps/scan.py b/apps/scan.py index 7d1fc9b..9ceb7a1 100644 --- a/apps/scan.py +++ b/apps/scan.py @@ -16,16 +16,16 @@ # Imports # ----------------------------------------------------------------------------- import asyncio + import click +import bumble.logging from bumble.colors import color -from bumble.device import Device -from bumble.transport import open_transport +from bumble.device import Advertisement, Device +from bumble.hci import HCI_LE_1M_PHY, HCI_LE_CODED_PHY, Address, HCI_Constant from bumble.keys import JsonKeyStore from bumble.smp import AddressResolver -from bumble.device import Advertisement -from bumble.hci import Address, HCI_Constant, HCI_LE_1M_PHY, HCI_LE_CODED_PHY -import bumble.logging +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/apps/show.py b/apps/show.py index 1a443dc..ddd9652 100644 --- a/apps/show.py +++ b/apps/show.py @@ -22,12 +22,11 @@ import struct import click -from bumble.colors import color -from bumble import hci -from bumble.transport.common import PacketReader -from bumble.helpers import PacketTracer import bumble.logging - +from bumble import hci +from bumble.colors import color +from bumble.helpers import PacketTracer +from bumble.transport.common import PacketReader # ----------------------------------------------------------------------------- # Logging diff --git a/apps/speaker/speaker.py b/apps/speaker/speaker.py index b4f206b..92f8ce0 100644 --- a/apps/speaker/speaker.py +++ b/apps/speaker/speaker.py @@ -16,49 +16,49 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import asyncio.subprocess -from importlib import resources import enum import json import logging import pathlib import subprocess -from typing import Optional import weakref +from importlib import resources +from typing import Optional -import click import aiohttp +import click from aiohttp import web import bumble -from bumble.colors import color -from bumble.core import PhysicalTransport, CommandTimeoutError -from bumble.device import Connection, Device, DeviceConfiguration -from bumble.hci import HCI_StatusError -from bumble.pairing import PairingConfig -from bumble.sdp import ServiceAttribute -from bumble.transport import open_transport +import bumble.logging +from bumble.a2dp import ( + A2DP_MPEG_2_4_AAC_CODEC_TYPE, + A2DP_NON_A2DP_CODEC_TYPE, + A2DP_SBC_CODEC_TYPE, + AacMediaCodecInformation, + OpusMediaCodecInformation, + SbcMediaCodecInformation, + make_audio_sink_service_sdp_records, +) from bumble.avdtp import ( AVDTP_AUDIO_MEDIA_TYPE, Listener, MediaCodecCapabilities, Protocol, ) -from bumble.a2dp import ( - make_audio_sink_service_sdp_records, - A2DP_SBC_CODEC_TYPE, - A2DP_MPEG_2_4_AAC_CODEC_TYPE, - A2DP_NON_A2DP_CODEC_TYPE, - SbcMediaCodecInformation, - AacMediaCodecInformation, - OpusMediaCodecInformation, -) -from bumble.utils import AsyncRunner from bumble.codecs import AacAudioRtpPacket +from bumble.colors import color +from bumble.core import CommandTimeoutError, PhysicalTransport +from bumble.device import Connection, Device, DeviceConfiguration +from bumble.hci import HCI_StatusError +from bumble.pairing import PairingConfig from bumble.rtp import MediaPacket -import bumble.logging - +from bumble.sdp import ServiceAttribute +from bumble.transport import open_transport +from bumble.utils import AsyncRunner # ----------------------------------------------------------------------------- # Logging diff --git a/apps/unbond.py b/apps/unbond.py index acef475..176e0f8 100644 --- a/apps/unbond.py +++ b/apps/unbond.py @@ -16,12 +16,13 @@ # Imports # ----------------------------------------------------------------------------- import asyncio + import click +import bumble.logging from bumble.device import Device from bumble.keys import JsonKeyStore from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/apps/usb_probe.py b/apps/usb_probe.py index acf41fb..404efba 100644 --- a/apps/usb_probe.py +++ b/apps/usb_probe.py @@ -29,10 +29,9 @@ import click import usb1 +import bumble.logging from bumble.colors import color from bumble.transport.usb import load_libusb -import bumble.logging - # ----------------------------------------------------------------------------- # Constants diff --git a/bumble/a2dp.py b/bumble/a2dp.py index ffcee46..4af6d33 100644 --- a/bumble/a2dp.py +++ b/bumble/a2dp.py @@ -17,37 +17,36 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -from collections.abc import AsyncGenerator import dataclasses import enum import logging import struct +from collections.abc import AsyncGenerator from typing import Awaitable, Callable -from typing_extensions import ClassVar, Self +from typing_extensions import ClassVar, Self from bumble.codecs import AacAudioRtpPacket from bumble.company_ids import COMPANY_IDENTIFIERS -from bumble.sdp import ( - DataElement, - ServiceAttribute, - SDP_PUBLIC_BROWSE_ROOT, - SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, - SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, - SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, - SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, -) from bumble.core import ( - BT_L2CAP_PROTOCOL_ID, - BT_AUDIO_SOURCE_SERVICE, - BT_AUDIO_SINK_SERVICE, - BT_AVDTP_PROTOCOL_ID, BT_ADVANCED_AUDIO_DISTRIBUTION_SERVICE, + BT_AUDIO_SINK_SERVICE, + BT_AUDIO_SOURCE_SERVICE, + BT_AVDTP_PROTOCOL_ID, + BT_L2CAP_PROTOCOL_ID, name_or_number, ) from bumble.rtp import MediaPacket - +from bumble.sdp import ( + SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, + SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_PUBLIC_BROWSE_ROOT, + SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, + SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, + DataElement, + ServiceAttribute, +) # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/att.py b/bumble/att.py index d62a645..522986a 100644 --- a/bumble/att.py +++ b/bumble/att.py @@ -30,22 +30,20 @@ import functools import inspect import struct from typing import ( + TYPE_CHECKING, Awaitable, Callable, + ClassVar, Generic, + Optional, TypeVar, Union, - ClassVar, - Optional, - TYPE_CHECKING, ) - -from bumble import hci -from bumble import utils +from bumble import hci, utils +from bumble.colors import color from bumble.core import UUID, InvalidOperationError, ProtocolError from bumble.hci import HCI_Object -from bumble.colors import color # ----------------------------------------------------------------------------- # Typing diff --git a/bumble/audio/io.py b/bumble/audio/io.py index 5ceb831..3718930 100644 --- a/bumble/audio/io.py +++ b/bumble/audio/io.py @@ -17,20 +17,16 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -import asyncio import abc -from concurrent.futures import ThreadPoolExecutor +import asyncio import dataclasses import enum import logging import pathlib -from typing import ( - AsyncGenerator, - BinaryIO, - TYPE_CHECKING, -) import sys import wave +from concurrent.futures import ThreadPoolExecutor +from typing import TYPE_CHECKING, AsyncGenerator, BinaryIO from bumble.colors import color diff --git a/bumble/avc.py b/bumble/avc.py index 747919b..2424d3b 100644 --- a/bumble/avc.py +++ b/bumble/avc.py @@ -16,12 +16,12 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import enum import struct from typing import Union -from bumble import core -from bumble import utils +from bumble import core, utils # ----------------------------------------------------------------------------- diff --git a/bumble/avctp.py b/bumble/avctp.py index 6a74977..7046785 100644 --- a/bumble/avctp.py +++ b/bumble/avctp.py @@ -16,15 +16,14 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations -from enum import IntEnum + import logging import struct -from typing import Callable, cast, Optional +from enum import IntEnum +from typing import Callable, Optional, cast +from bumble import avc, core, l2cap from bumble.colors import color -from bumble import avc -from bumble import core -from bumble import l2cap # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/avdtp.py b/bumble/avdtp.py index b7f789c..d2fc7b7 100644 --- a/bumble/avdtp.py +++ b/bumble/avdtp.py @@ -16,31 +16,25 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio -import time -import logging import enum +import logging +import time import warnings from typing import ( Any, - Awaitable, - Optional, - Callable, AsyncGenerator, + Awaitable, + Callable, Iterable, - Union, + Optional, SupportsBytes, + Union, cast, ) - -from bumble.core import ( - BT_ADVANCED_AUDIO_DISTRIBUTION_SERVICE, - InvalidStateError, - ProtocolError, - InvalidArgumentError, - name_or_number, -) +from bumble import device, l2cap, sdp, utils from bumble.a2dp import ( A2DP_CODEC_TYPE_NAMES, A2DP_MPEG_2_4_AAC_CODEC_TYPE, @@ -51,10 +45,15 @@ from bumble.a2dp import ( SbcMediaCodecInformation, VendorSpecificMediaCodecInformation, ) -from bumble.rtp import MediaPacket -from bumble import sdp, device, l2cap, utils from bumble.colors import color - +from bumble.core import ( + BT_ADVANCED_AUDIO_DISTRIBUTION_SERVICE, + InvalidArgumentError, + InvalidStateError, + ProtocolError, + name_or_number, +) +from bumble.rtp import MediaPacket # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/avrcp.py b/bumble/avrcp.py index 3f6104d..5fe52d2 100644 --- a/bumble/avrcp.py +++ b/bumble/avrcp.py @@ -16,16 +16,16 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio -from dataclasses import dataclass import enum import logging import struct +from dataclasses import dataclass from typing import ( AsyncIterator, Awaitable, Callable, - cast, Iterable, List, Optional, @@ -33,28 +33,23 @@ from typing import ( SupportsBytes, TypeVar, Union, + cast, ) - +from bumble import avc, avctp, core, l2cap, utils from bumble.colors import color -from bumble.device import Device, Connection +from bumble.device import Connection, Device from bumble.sdp import ( - SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, - SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, - SDP_PUBLIC_BROWSE_ROOT, - SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, + SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_PUBLIC_BROWSE_ROOT, + SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, + SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, SDP_SUPPORTED_FEATURES_ATTRIBUTE_ID, DataElement, ServiceAttribute, ) -from bumble import utils -from bumble import core -from bumble import l2cap -from bumble import avc -from bumble import avctp - # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/codecs.py b/bumble/codecs.py index 4d4c48c..d5a2aed 100644 --- a/bumble/codecs.py +++ b/bumble/codecs.py @@ -16,7 +16,9 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + from dataclasses import dataclass + from typing_extensions import Self from bumble import core diff --git a/bumble/controller.py b/bumble/controller.py index 3348b30..d148495 100644 --- a/bumble/controller.py +++ b/bumble/controller.py @@ -17,17 +17,17 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -import logging import asyncio import dataclasses import itertools +import logging import random import struct -from bumble.colors import color -from bumble.core import ( - PhysicalTransport, -) +from typing import TYPE_CHECKING, Any, Optional, Union + from bumble import hci +from bumble.colors import color +from bumble.core import PhysicalTransport from bumble.hci import ( HCI_ACL_DATA_PACKET, HCI_COMMAND_DISALLOWED_ERROR, @@ -38,13 +38,12 @@ from bumble.hci import ( HCI_EVENT_PACKET, HCI_INVALID_HCI_COMMAND_PARAMETERS_ERROR, HCI_LE_1M_PHY, - HCI_SUCCESS, - HCI_UNKNOWN_HCI_COMMAND_ERROR, - HCI_UNKNOWN_CONNECTION_IDENTIFIER_ERROR, HCI_REMOTE_USER_TERMINATED_CONNECTION_ERROR, + HCI_SUCCESS, + HCI_UNKNOWN_CONNECTION_IDENTIFIER_ERROR, + HCI_UNKNOWN_HCI_COMMAND_ERROR, HCI_VERSION_BLUETOOTH_CORE_5_0, Address, - Role, HCI_AclDataPacket, HCI_AclDataPacketAssembler, HCI_Command_Complete_Event, @@ -53,7 +52,6 @@ from bumble.hci import ( HCI_Connection_Request_Event, HCI_Disconnection_Complete_Event, HCI_Encryption_Change_Event, - HCI_Synchronous_Connection_Complete_Event, HCI_LE_Advertising_Report_Event, HCI_LE_CIS_Established_Event, HCI_LE_CIS_Request_Event, @@ -62,8 +60,9 @@ from bumble.hci import ( HCI_Number_Of_Completed_Packets_Event, HCI_Packet, HCI_Role_Change_Event, + HCI_Synchronous_Connection_Complete_Event, + Role, ) -from typing import Optional, Union, Any, TYPE_CHECKING if TYPE_CHECKING: from bumble.link import LocalLink diff --git a/bumble/core.py b/bumble/core.py index b5822a4..d7c6cc9 100644 --- a/bumble/core.py +++ b/bumble/core.py @@ -19,12 +19,12 @@ from __future__ import annotations import enum import struct -from typing import cast, overload, Literal, Union, Optional +from typing import Literal, Optional, Union, cast, overload + from typing_extensions import Self -from bumble.company_ids import COMPANY_IDENTIFIERS from bumble import utils - +from bumble.company_ids import COMPANY_IDENTIFIERS # ----------------------------------------------------------------------------- # Constants diff --git a/bumble/crypto/__init__.py b/bumble/crypto/__init__.py index bcefdd9..5d8aa4a 100644 --- a/bumble/crypto/__init__.py +++ b/bumble/crypto/__init__.py @@ -22,12 +22,12 @@ import operator import secrets try: - from bumble.crypto.cryptography import EccKey, e, aes_cmac + from bumble.crypto.cryptography import EccKey, aes_cmac, e except ImportError: logging.getLogger(__name__).debug( "Unable to import cryptography, use built-in primitives." ) - from bumble.crypto.builtin import EccKey, e, aes_cmac # type: ignore[assignment] + from bumble.crypto.builtin import EccKey, aes_cmac, e # type: ignore[assignment] # ----------------------------------------------------------------------------- diff --git a/bumble/crypto/builtin.py b/bumble/crypto/builtin.py index adf8dd6..91b6c9c 100644 --- a/bumble/crypto/builtin.py +++ b/bumble/crypto/builtin.py @@ -24,9 +24,9 @@ # ----------------------------------------------------------------------------- from __future__ import annotations +import copy import dataclasses import functools -import copy import secrets import struct from typing import Optional diff --git a/bumble/crypto/cryptography.py b/bumble/crypto/cryptography.py index d78c804..2f9fb24 100644 --- a/bumble/crypto/cryptography.py +++ b/bumble/crypto/cryptography.py @@ -16,11 +16,9 @@ from __future__ import annotations import functools -from cryptography.hazmat.primitives import ciphers -from cryptography.hazmat.primitives.ciphers import algorithms -from cryptography.hazmat.primitives.ciphers import modes +from cryptography.hazmat.primitives import ciphers, cmac from cryptography.hazmat.primitives.asymmetric import ec -from cryptography.hazmat.primitives import cmac +from cryptography.hazmat.primitives.ciphers import algorithms, modes def e(key: bytes, data: bytes) -> bytes: diff --git a/bumble/device.py b/bumble/device.py index 8ac4daf..ad33144 100644 --- a/bumble/device.py +++ b/bumble/device.py @@ -16,24 +16,22 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import collections -from collections.abc import Iterable, Sequence -from contextlib import ( - asynccontextmanager, - AsyncExitStack, - closing, -) import copy -from dataclasses import dataclass, field -from enum import Enum, IntEnum import functools import itertools import json import logging import secrets import sys +from collections.abc import Iterable, Sequence +from contextlib import AsyncExitStack, asynccontextmanager, closing +from dataclasses import dataclass, field +from enum import Enum, IntEnum from typing import ( + TYPE_CHECKING, Any, Awaitable, Callable, @@ -43,47 +41,35 @@ from typing import ( Union, cast, overload, - TYPE_CHECKING, ) + from typing_extensions import Self - -from bumble.colors import color +from bumble import core, gatt_client, gatt_server, hci, l2cap, pairing, sdp, smp, utils from bumble.att import ATT_CID, ATT_DEFAULT_MTU, ATT_PDU -from bumble.gatt import Attribute, Characteristic, Descriptor, Service -from bumble.host import DataPacketQueue, Host -from bumble.profiles.gap import GenericAccessService +from bumble.colors import color from bumble.core import ( - PhysicalTransport, AdvertisingData, BaseBumbleError, - ConnectionParameterUpdateError, CommandTimeoutError, + ConnectionParameterUpdateError, ConnectionPHY, InvalidArgumentError, InvalidOperationError, InvalidStateError, NotSupportedError, OutOfResourcesError, + PhysicalTransport, UnreachableError, ) -from bumble import utils -from bumble.keys import ( - KeyStore, - PairingKeys, -) -from bumble import hci -from bumble import pairing -from bumble import gatt_client -from bumble import gatt_server -from bumble import smp -from bumble import sdp -from bumble import l2cap -from bumble import core +from bumble.gatt import Attribute, Characteristic, Descriptor, Service +from bumble.host import DataPacketQueue, Host +from bumble.keys import KeyStore, PairingKeys from bumble.profiles import gatt_service +from bumble.profiles.gap import GenericAccessService if TYPE_CHECKING: - from bumble.transport.common import TransportSource, TransportSink + from bumble.transport.common import TransportSink, TransportSource _T = TypeVar('_T') diff --git a/bumble/drivers/__init__.py b/bumble/drivers/__init__.py index 9782e34..2553a25 100644 --- a/bumble/drivers/__init__.py +++ b/bumble/drivers/__init__.py @@ -20,12 +20,13 @@ like loading firmware after a cold start. # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import logging import pathlib import platform -from typing import Iterable, Optional, TYPE_CHECKING +from typing import TYPE_CHECKING, Iterable, Optional -from bumble.drivers import rtk, intel +from bumble.drivers import intel, rtk from bumble.drivers.common import Driver if TYPE_CHECKING: diff --git a/bumble/drivers/intel.py b/bumble/drivers/intel.py index 73fb698..a7c3b8e 100644 --- a/bumble/drivers/intel.py +++ b/bumble/drivers/intel.py @@ -20,6 +20,7 @@ Loosely based on the Fuchsia OS implementation. # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import collections import dataclasses @@ -28,12 +29,10 @@ import os import pathlib import platform import struct -from typing import Any, Optional, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Optional -from bumble import core +from bumble import core, hci, utils from bumble.drivers import common -from bumble import hci -from bumble import utils if TYPE_CHECKING: from bumble.host import Host diff --git a/bumble/drivers/rtk.py b/bumble/drivers/rtk.py index 5b15896..496ec91 100644 --- a/bumble/drivers/rtk.py +++ b/bumble/drivers/rtk.py @@ -17,10 +17,6 @@ Based on various online bits of information, including the Linux kernel. (see `drivers/bluetooth/btrtl.c`) """ -# ----------------------------------------------------------------------------- -# Imports -# ----------------------------------------------------------------------------- -from dataclasses import dataclass, field import asyncio import enum import logging @@ -31,9 +27,12 @@ import platform import struct import weakref +# ----------------------------------------------------------------------------- +# Imports +# ----------------------------------------------------------------------------- +from dataclasses import dataclass, field -from bumble import core -from bumble import hci +from bumble import core, hci from bumble.drivers import common # ----------------------------------------------------------------------------- diff --git a/bumble/gap.py b/bumble/gap.py index e2dddb9..26a353c 100644 --- a/bumble/gap.py +++ b/bumble/gap.py @@ -19,11 +19,11 @@ import logging import struct from bumble.gatt import ( - Service, - Characteristic, - GATT_GENERIC_ACCESS_SERVICE, - GATT_DEVICE_NAME_CHARACTERISTIC, GATT_APPEARANCE_CHARACTERISTIC, + GATT_DEVICE_NAME_CHARACTERISTIC, + GATT_GENERIC_ACCESS_SERVICE, + Characteristic, + Service, ) # ----------------------------------------------------------------------------- diff --git a/bumble/gatt.py b/bumble/gatt.py index 96e836c..795241a 100644 --- a/bumble/gatt.py +++ b/bumble/gatt.py @@ -23,15 +23,16 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import enum import functools import logging import struct from typing import Iterable, Optional, Sequence, TypeVar, Union -from bumble.colors import color -from bumble.core import BaseBumbleError, UUID from bumble.att import Attribute, AttributeValue +from bumble.colors import color +from bumble.core import UUID, BaseBumbleError # ----------------------------------------------------------------------------- # Typing diff --git a/bumble/gatt_adapters.py b/bumble/gatt_adapters.py index 99b99af..ba3e38b 100644 --- a/bumble/gatt_adapters.py +++ b/bumble/gatt_adapters.py @@ -20,22 +20,14 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations -import struct -from typing import ( - Any, - Callable, - Generic, - Iterable, - Literal, - Optional, - TypeVar, -) +import struct +from typing import Any, Callable, Generic, Iterable, Literal, Optional, TypeVar + +from bumble import utils from bumble.core import InvalidOperationError from bumble.gatt import Characteristic from bumble.gatt_client import CharacteristicProxy -from bumble import utils - # ----------------------------------------------------------------------------- # Typing diff --git a/bumble/gatt_client.py b/bumble/gatt_client.py index 65e106f..2be2528 100644 --- a/bumble/gatt_client.py +++ b/bumble/gatt_client.py @@ -24,40 +24,38 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import logging import struct from datetime import datetime from typing import ( + TYPE_CHECKING, Any, Callable, Generic, Iterable, Optional, - Union, TypeVar, - TYPE_CHECKING, + Union, ) - +from bumble import att, core, utils from bumble.colors import color -from bumble.hci import HCI_Constant -from bumble import att -from bumble import utils -from bumble import core from bumble.core import UUID, InvalidStateError from bumble.gatt import ( GATT_CHARACTERISTIC_ATTRIBUTE_TYPE, GATT_CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR, + GATT_INCLUDE_ATTRIBUTE_TYPE, GATT_PRIMARY_SERVICE_ATTRIBUTE_TYPE, GATT_REQUEST_TIMEOUT, GATT_SECONDARY_SERVICE_ATTRIBUTE_TYPE, - GATT_INCLUDE_ATTRIBUTE_TYPE, Characteristic, ClientCharacteristicConfigurationBits, InvalidServiceError, TemplateService, ) +from bumble.hci import HCI_Constant # ----------------------------------------------------------------------------- # Typing diff --git a/bumble/gatt_server.py b/bumble/gatt_server.py index fa7e911..71e2a6e 100644 --- a/bumble/gatt_server.py +++ b/bumble/gatt_server.py @@ -24,18 +24,14 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import logging -from collections import defaultdict import struct -from typing import ( - Iterable, - Optional, - TypeVar, - TYPE_CHECKING, -) +from collections import defaultdict +from typing import TYPE_CHECKING, Iterable, Optional, TypeVar -from bumble import att +from bumble import att, utils from bumble.colors import color from bumble.core import UUID from bumble.gatt import ( @@ -48,14 +44,13 @@ from bumble.gatt import ( Characteristic, CharacteristicDeclaration, CharacteristicValue, - IncludedServiceDeclaration, Descriptor, + IncludedServiceDeclaration, Service, ) -from bumble import utils if TYPE_CHECKING: - from bumble.device import Device, Connection + from bumble.device import Connection, Device # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/hci.py b/bumble/hci.py index 59ef271..06d6cd3 100644 --- a/bumble/hci.py +++ b/bumble/hci.py @@ -16,19 +16,21 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import collections import dataclasses -from dataclasses import field import enum import functools import logging import secrets import struct from collections.abc import Sequence -from typing import Any, Callable, Iterable, Optional, Union, TypeVar, ClassVar, cast +from dataclasses import field +from typing import Any, Callable, ClassVar, Iterable, Optional, TypeVar, Union, cast + from typing_extensions import Self -from bumble import crypto +from bumble import crypto, utils from bumble.colors import color from bumble.core import ( DeviceClass, @@ -40,8 +42,6 @@ from bumble.core import ( name_or_number, padded_bytes, ) -from bumble import utils - # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/helpers.py b/bumble/helpers.py index 0a304d2..e67fb57 100644 --- a/bumble/helpers.py +++ b/bumble/helpers.py @@ -17,43 +17,36 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -from collections.abc import Callable, MutableMapping import datetime -from typing import cast, Any, Optional import logging +from collections.abc import Callable, MutableMapping +from typing import Any, Optional, cast -from bumble import avc -from bumble import avctp -from bumble import avdtp -from bumble import avrcp -from bumble import crypto -from bumble import rfcomm -from bumble import sdp -from bumble.colors import color +from bumble import avc, avctp, avdtp, avrcp, crypto, rfcomm, sdp from bumble.att import ATT_CID, ATT_PDU -from bumble.smp import SMP_CID, SMP_Command +from bumble.colors import color from bumble.core import name_or_number -from bumble.l2cap import ( - CommandCode, - L2CAP_PDU, - L2CAP_SIGNALING_CID, - L2CAP_LE_SIGNALING_CID, - L2CAP_Control_Frame, - L2CAP_Connection_Request, - L2CAP_Connection_Response, -) from bumble.hci import ( - Address, - HCI_EVENT_PACKET, HCI_ACL_DATA_PACKET, HCI_DISCONNECTION_COMPLETE_EVENT, - HCI_AclDataPacketAssembler, - HCI_Packet, - HCI_Event, + HCI_EVENT_PACKET, + Address, HCI_AclDataPacket, + HCI_AclDataPacketAssembler, HCI_Disconnection_Complete_Event, + HCI_Event, + HCI_Packet, ) - +from bumble.l2cap import ( + L2CAP_LE_SIGNALING_CID, + L2CAP_PDU, + L2CAP_SIGNALING_CID, + CommandCode, + L2CAP_Connection_Request, + L2CAP_Connection_Response, + L2CAP_Control_Frame, +) +from bumble.smp import SMP_CID, SMP_Command # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/hfp.py b/bumble/hfp.py index 36bc258..dadbe6b 100644 --- a/bumble/hfp.py +++ b/bumble/hfp.py @@ -17,45 +17,34 @@ # ----------------------------------------------------------------------------- from __future__ import annotations +import asyncio import collections import collections.abc -import logging -import asyncio import dataclasses import enum -import traceback +import logging import re -from typing import ( - Union, - Any, - Optional, - ClassVar, - Iterable, - TYPE_CHECKING, -) +import traceback +from typing import TYPE_CHECKING, Any, ClassVar, Iterable, Optional, Union + from typing_extensions import Self -from bumble import at -from bumble import device -from bumble import rfcomm -from bumble import sdp -from bumble import utils +from bumble import at, device, rfcomm, sdp, utils from bumble.colors import color from bumble.core import ( - ProtocolError, BT_GENERIC_AUDIO_SERVICE, - BT_HANDSFREE_SERVICE, BT_HANDSFREE_AUDIO_GATEWAY_SERVICE, + BT_HANDSFREE_SERVICE, BT_L2CAP_PROTOCOL_ID, BT_RFCOMM_PROTOCOL_ID, + ProtocolError, ) from bumble.hci import ( - HCI_Enhanced_Setup_Synchronous_Connection_Command, - CodingFormat, CodecID, + CodingFormat, + HCI_Enhanced_Setup_Synchronous_Connection_Command, ) - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/hid.py b/bumble/hid.py index edcfc98..4a96e86 100644 --- a/bumble/hid.py +++ b/bumble/hid.py @@ -16,22 +16,20 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations -from dataclasses import dataclass -import logging -import enum -import struct +import enum +import logging +import struct from abc import ABC, abstractmethod -from typing import Optional, Callable +from dataclasses import dataclass +from typing import Callable, Optional + from typing_extensions import override -from bumble import l2cap -from bumble import device -from bumble import utils +from bumble import device, l2cap, utils from bumble.core import InvalidStateError, ProtocolError from bumble.hci import Address - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/host.py b/bumble/host.py index 3d62951..8e3020e 100644 --- a/bumble/host.py +++ b/bumble/host.py @@ -16,33 +16,19 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import collections import dataclasses import logging import struct +from typing import TYPE_CHECKING, Any, Awaitable, Callable, Optional, cast -from typing import ( - Any, - Awaitable, - Callable, - Optional, - cast, - TYPE_CHECKING, -) - - +from bumble import drivers, hci, utils from bumble.colors import color +from bumble.core import ConnectionParameters, ConnectionPHY, PhysicalTransport from bumble.l2cap import L2CAP_PDU from bumble.snoop import Snooper -from bumble import drivers -from bumble import hci -from bumble.core import ( - PhysicalTransport, - ConnectionPHY, - ConnectionParameters, -) -from bumble import utils from bumble.transport.common import TransportLostError if TYPE_CHECKING: diff --git a/bumble/keys.py b/bumble/keys.py index 3e4eb02..55c2147 100644 --- a/bumble/keys.py +++ b/bumble/keys.py @@ -21,16 +21,18 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import dataclasses +import json import logging import os -import json -from typing import TYPE_CHECKING, Optional, Any +from typing import TYPE_CHECKING, Any, Optional + from typing_extensions import Self -from bumble.colors import color from bumble import hci +from bumble.colors import color if TYPE_CHECKING: from bumble.device import Device diff --git a/bumble/l2cap.py b/bumble/l2cap.py index e1cd6e5..dfe0fe3 100644 --- a/bumble/l2cap.py +++ b/bumble/l2cap.py @@ -16,33 +16,32 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import dataclasses import enum import logging import struct - from collections import deque from collections.abc import Sequence from typing import ( - Optional, - Callable, + TYPE_CHECKING, Any, - Union, + Callable, + ClassVar, Iterable, + Optional, SupportsBytes, TypeVar, - ClassVar, - TYPE_CHECKING, + Union, ) -from bumble import utils -from bumble import hci +from bumble import hci, utils from bumble.colors import color from bumble.core import ( - InvalidStateError, InvalidArgumentError, InvalidPacketError, + InvalidStateError, OutOfResourcesError, ProtocolError, ) diff --git a/bumble/link.py b/bumble/link.py index 606df2c..a823aad 100644 --- a/bumble/link.py +++ b/bumble/link.py @@ -12,26 +12,25 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import logging -import asyncio - -from bumble import core -from bumble.hci import ( - Address, - Role, - HCI_SUCCESS, - HCI_CONNECTION_ACCEPT_TIMEOUT_ERROR, - HCI_UNKNOWN_CONNECTION_IDENTIFIER_ERROR, - HCI_PAGE_TIMEOUT_ERROR, - HCI_Connection_Complete_Event, -) -from bumble import controller - from typing import Optional +from bumble import controller, core +from bumble.hci import ( + HCI_CONNECTION_ACCEPT_TIMEOUT_ERROR, + HCI_PAGE_TIMEOUT_ERROR, + HCI_SUCCESS, + HCI_UNKNOWN_CONNECTION_IDENTIFIER_ERROR, + Address, + HCI_Connection_Complete_Event, + Role, +) + # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/pairing.py b/bumble/pairing.py index 9e6ec09..26542bf 100644 --- a/bumble/pairing.py +++ b/bumble/pairing.py @@ -16,27 +16,28 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import enum -from dataclasses import dataclass import secrets +from dataclasses import dataclass from typing import Optional from bumble import hci +from bumble.core import AdvertisingData, LeRole from bumble.smp import ( - SMP_NO_INPUT_NO_OUTPUT_IO_CAPABILITY, - SMP_KEYBOARD_ONLY_IO_CAPABILITY, SMP_DISPLAY_ONLY_IO_CAPABILITY, SMP_DISPLAY_YES_NO_IO_CAPABILITY, - SMP_KEYBOARD_DISPLAY_IO_CAPABILITY, SMP_ENC_KEY_DISTRIBUTION_FLAG, SMP_ID_KEY_DISTRIBUTION_FLAG, - SMP_SIGN_KEY_DISTRIBUTION_FLAG, + SMP_KEYBOARD_DISPLAY_IO_CAPABILITY, + SMP_KEYBOARD_ONLY_IO_CAPABILITY, SMP_LINK_KEY_DISTRIBUTION_FLAG, + SMP_NO_INPUT_NO_OUTPUT_IO_CAPABILITY, + SMP_SIGN_KEY_DISTRIBUTION_FLAG, OobContext, OobLegacyContext, OobSharedData, ) -from bumble.core import AdvertisingData, LeRole # ----------------------------------------------------------------------------- diff --git a/bumble/pandora/__init__.py b/bumble/pandora/__init__.py index 5279f47..eae328f 100644 --- a/bumble/pandora/__init__.py +++ b/bumble/pandora/__init__.py @@ -19,21 +19,22 @@ This module implement the Pandora Bluetooth test APIs for the Bumble stack. __version__ = "0.0.1" +from typing import Callable, List, Optional + import grpc import grpc.aio - -from bumble.pandora.config import Config -from bumble.pandora.device import PandoraDevice -from bumble.pandora.host import HostService -from bumble.pandora.l2cap import L2CAPService -from bumble.pandora.security import SecurityService, SecurityStorageService from pandora.host_grpc_aio import add_HostServicer_to_server from pandora.l2cap_grpc_aio import add_L2CAPServicer_to_server from pandora.security_grpc_aio import ( add_SecurityServicer_to_server, add_SecurityStorageServicer_to_server, ) -from typing import Callable, List, Optional + +from bumble.pandora.config import Config +from bumble.pandora.device import PandoraDevice +from bumble.pandora.host import HostService +from bumble.pandora.l2cap import L2CAPService +from bumble.pandora.security import SecurityService, SecurityStorageService # public symbols __all__ = [ diff --git a/bumble/pandora/config.py b/bumble/pandora/config.py index 954ab35..74a9fb4 100644 --- a/bumble/pandora/config.py +++ b/bumble/pandora/config.py @@ -13,10 +13,12 @@ # limitations under the License. from __future__ import annotations -from bumble.pairing import PairingConfig, PairingDelegate + from dataclasses import dataclass from typing import Any +from bumble.pairing import PairingConfig, PairingDelegate + @dataclass class Config: diff --git a/bumble/pandora/device.py b/bumble/pandora/device.py index 98210df..95b784b 100644 --- a/bumble/pandora/device.py +++ b/bumble/pandora/device.py @@ -15,6 +15,9 @@ """Generic & dependency free Bumble (reference) device.""" from __future__ import annotations + +from typing import Any, Optional + from bumble import transport from bumble.core import ( BT_GENERIC_AUDIO_SERVICE, @@ -32,8 +35,6 @@ from bumble.sdp import ( DataElement, ServiceAttribute, ) -from typing import Any, Optional - # Default rootcanal HCI TCP address ROOTCANAL_HCI_ADDRESS = "localhost:6402" diff --git a/bumble/pandora/host.py b/bumble/pandora/host.py index 6dbe36d..b8ac7c3 100644 --- a/bumble/pandora/host.py +++ b/bumble/pandora/host.py @@ -13,51 +13,23 @@ # limitations under the License. from __future__ import annotations + import asyncio -import bumble.device -import grpc -import grpc.aio import logging import struct +from typing import AsyncGenerator, Optional, cast -import bumble.utils -from bumble.pandora import utils -from bumble.pandora.config import Config -from bumble.core import ( - PhysicalTransport, - UUID, - AdvertisingData, - Appearance, - ConnectionError, -) -from bumble.device import ( - DEVICE_DEFAULT_SCAN_INTERVAL, - DEVICE_DEFAULT_SCAN_WINDOW, - Advertisement, - AdvertisingParameters, - AdvertisingEventProperties, - AdvertisingType, - Device, -) -from bumble.gatt import Service -from bumble.hci import ( - HCI_CONNECTION_ALREADY_EXISTS_ERROR, - HCI_PAGE_TIMEOUT_ERROR, - HCI_REMOTE_USER_TERMINATED_CONNECTION_ERROR, - Address, - Phy, - Role, - OwnAddressType, -) +import grpc +import grpc.aio from google.protobuf import any_pb2 # pytype: disable=pyi-error from google.protobuf import empty_pb2 # pytype: disable=pyi-error -from pandora.host_grpc_aio import HostServicer from pandora import host_pb2 +from pandora.host_grpc_aio import HostServicer from pandora.host_pb2 import ( + DISCOVERABLE_GENERAL, + DISCOVERABLE_LIMITED, NOT_CONNECTABLE, NOT_DISCOVERABLE, - DISCOVERABLE_LIMITED, - DISCOVERABLE_GENERAL, PRIMARY_1M, PRIMARY_CODED, SECONDARY_1M, @@ -85,7 +57,37 @@ from pandora.host_pb2 import ( WaitConnectionResponse, WaitDisconnectionRequest, ) -from typing import AsyncGenerator, Optional, cast + +import bumble.device +import bumble.utils +from bumble.core import ( + UUID, + AdvertisingData, + Appearance, + ConnectionError, + PhysicalTransport, +) +from bumble.device import ( + DEVICE_DEFAULT_SCAN_INTERVAL, + DEVICE_DEFAULT_SCAN_WINDOW, + Advertisement, + AdvertisingEventProperties, + AdvertisingParameters, + AdvertisingType, + Device, +) +from bumble.gatt import Service +from bumble.hci import ( + HCI_CONNECTION_ALREADY_EXISTS_ERROR, + HCI_PAGE_TIMEOUT_ERROR, + HCI_REMOTE_USER_TERMINATED_CONNECTION_ERROR, + Address, + OwnAddressType, + Phy, + Role, +) +from bumble.pandora import utils +from bumble.pandora.config import Config PRIMARY_PHY_MAP: dict[int, PrimaryPhy] = { # Default value reported by Bumble for legacy Advertising reports. diff --git a/bumble/pandora/l2cap.py b/bumble/pandora/l2cap.py index 6aa6896..969728e 100644 --- a/bumble/pandora/l2cap.py +++ b/bumble/pandora/l2cap.py @@ -12,31 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. from __future__ import annotations + import asyncio -import grpc import json import logging +from asyncio import Future +from asyncio import Queue as AsyncQueue +from dataclasses import dataclass +from typing import AsyncGenerator, Optional, Union -from asyncio import Queue as AsyncQueue, Future - -from bumble.pandora import utils -from bumble.pandora.config import Config -from bumble.core import OutOfResourcesError, InvalidArgumentError -from bumble.device import Device -from bumble.l2cap import ( - ClassicChannel, - ClassicChannelServer, - ClassicChannelSpec, - LeCreditBasedChannel, - LeCreditBasedChannelServer, - LeCreditBasedChannelSpec, -) +import grpc from google.protobuf import any_pb2, empty_pb2 # pytype: disable=pyi-error from pandora.l2cap_grpc_aio import L2CAPServicer # pytype: disable=pyi-error -from pandora.l2cap_pb2 import ( # pytype: disable=pyi-error - COMMAND_NOT_UNDERSTOOD, - INVALID_CID_IN_REQUEST, - Channel as PandoraChannel, +from pandora.l2cap_pb2 import COMMAND_NOT_UNDERSTOOD, INVALID_CID_IN_REQUEST +from pandora.l2cap_pb2 import Channel as PandoraChannel # pytype: disable=pyi-error +from pandora.l2cap_pb2 import ( ConnectRequest, ConnectResponse, CreditBasedChannelRequest, @@ -51,8 +41,19 @@ from pandora.l2cap_pb2 import ( # pytype: disable=pyi-error WaitDisconnectionRequest, WaitDisconnectionResponse, ) -from typing import AsyncGenerator, Optional, Union -from dataclasses import dataclass + +from bumble.core import InvalidArgumentError, OutOfResourcesError +from bumble.device import Device +from bumble.l2cap import ( + ClassicChannel, + ClassicChannelServer, + ClassicChannelSpec, + LeCreditBasedChannel, + LeCreditBasedChannelServer, + LeCreditBasedChannelSpec, +) +from bumble.pandora import utils +from bumble.pandora.config import Config L2capChannel = Union[ClassicChannel, LeCreditBasedChannel] diff --git a/bumble/pandora/security.py b/bumble/pandora/security.py index e1ae610..1ec25a7 100644 --- a/bumble/pandora/security.py +++ b/bumble/pandora/security.py @@ -13,24 +13,14 @@ # limitations under the License. from __future__ import annotations + import asyncio import contextlib -from collections.abc import Awaitable -import grpc import logging +from collections.abc import Awaitable +from typing import Any, AsyncGenerator, AsyncIterator, Callable, Optional, Union -from bumble.pandora import utils -from bumble.pandora.config import Config -from bumble import hci -from bumble.core import ( - PhysicalTransport, - ProtocolError, - InvalidArgumentError, -) -import bumble.utils -from bumble.device import Connection as BumbleConnection, Device -from bumble.hci import HCI_Error, Role -from bumble.pairing import PairingConfig, PairingDelegate as BasePairingDelegate +import grpc from google.protobuf import any_pb2 # pytype: disable=pyi-error from google.protobuf import empty_pb2 # pytype: disable=pyi-error from google.protobuf import wrappers_pb2 # pytype: disable=pyi-error @@ -57,7 +47,17 @@ from pandora.security_pb2 import ( WaitSecurityRequest, WaitSecurityResponse, ) -from typing import Any, AsyncGenerator, AsyncIterator, Callable, Optional, Union + +import bumble.utils +from bumble import hci +from bumble.core import InvalidArgumentError, PhysicalTransport, ProtocolError +from bumble.device import Connection as BumbleConnection +from bumble.device import Device +from bumble.hci import HCI_Error, Role +from bumble.pairing import PairingConfig +from bumble.pairing import PairingDelegate as BasePairingDelegate +from bumble.pandora import utils +from bumble.pandora.config import Config class PairingDelegate(BasePairingDelegate): diff --git a/bumble/pandora/utils.py b/bumble/pandora/utils.py index dcbfc5a..047a06a 100644 --- a/bumble/pandora/utils.py +++ b/bumble/pandora/utils.py @@ -13,16 +13,18 @@ # limitations under the License. from __future__ import annotations + import contextlib import functools -import grpc import inspect import logging +from typing import Any, Generator, MutableMapping, Optional + +import grpc +from google.protobuf.message import Message # pytype: disable=pyi-error from bumble.device import Device from bumble.hci import Address, AddressType -from google.protobuf.message import Message # pytype: disable=pyi-error -from typing import Any, Generator, MutableMapping, Optional ADDRESS_TYPES: dict[str, AddressType] = { "public": Address.PUBLIC_DEVICE_ADDRESS, diff --git a/bumble/profiles/aics.py b/bumble/profiles/aics.py index f242435..36c8534 100644 --- a/bumble/profiles/aics.py +++ b/bumble/profiles/aics.py @@ -18,26 +18,27 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import logging import struct - from dataclasses import dataclass from typing import Optional -from bumble.device import Connection +from bumble import utils from bumble.att import ATT_Error +from bumble.device import Connection from bumble.gatt import ( + GATT_AUDIO_INPUT_CONTROL_POINT_CHARACTERISTIC, + GATT_AUDIO_INPUT_CONTROL_SERVICE, + GATT_AUDIO_INPUT_DESCRIPTION_CHARACTERISTIC, + GATT_AUDIO_INPUT_STATE_CHARACTERISTIC, + GATT_AUDIO_INPUT_STATUS_CHARACTERISTIC, + GATT_AUDIO_INPUT_TYPE_CHARACTERISTIC, + GATT_GAIN_SETTINGS_ATTRIBUTE_CHARACTERISTIC, Attribute, Characteristic, - TemplateService, CharacteristicValue, - GATT_AUDIO_INPUT_CONTROL_SERVICE, - GATT_AUDIO_INPUT_STATE_CHARACTERISTIC, - GATT_GAIN_SETTINGS_ATTRIBUTE_CHARACTERISTIC, - GATT_AUDIO_INPUT_TYPE_CHARACTERISTIC, - GATT_AUDIO_INPUT_STATUS_CHARACTERISTIC, - GATT_AUDIO_INPUT_CONTROL_POINT_CHARACTERISTIC, - GATT_AUDIO_INPUT_DESCRIPTION_CHARACTERISTIC, + TemplateService, ) from bumble.gatt_adapters import ( CharacteristicProxy, @@ -48,7 +49,6 @@ from bumble.gatt_adapters import ( UTF8CharacteristicProxyAdapter, ) from bumble.gatt_client import ProfileServiceProxy, ServiceProxy -from bumble import utils # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/profiles/ams.py b/bumble/profiles/ams.py index 6693bdd..2af9084 100644 --- a/bumble/profiles/ams.py +++ b/bumble/profiles/ams.py @@ -20,25 +20,24 @@ Apple Media Service (AMS). # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import dataclasses import enum import logging -from typing import Optional, Iterable, Union - +from typing import Iterable, Optional, Union +from bumble import utils from bumble.device import Peer from bumble.gatt import ( - Characteristic, - GATT_AMS_SERVICE, - GATT_AMS_REMOTE_COMMAND_CHARACTERISTIC, - GATT_AMS_ENTITY_UPDATE_CHARACTERISTIC, GATT_AMS_ENTITY_ATTRIBUTE_CHARACTERISTIC, + GATT_AMS_ENTITY_UPDATE_CHARACTERISTIC, + GATT_AMS_REMOTE_COMMAND_CHARACTERISTIC, + GATT_AMS_SERVICE, + Characteristic, TemplateService, ) from bumble.gatt_client import CharacteristicProxy, ProfileServiceProxy, ServiceProxy -from bumble import utils - # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/profiles/ancs.py b/bumble/profiles/ancs.py index 6bf93f1..8a165fb 100644 --- a/bumble/profiles/ancs.py +++ b/bumble/profiles/ancs.py @@ -20,6 +20,7 @@ Apple Notification Center Service (ANCS). # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import dataclasses import datetime @@ -28,21 +29,19 @@ import logging import struct from typing import Optional, Sequence, Union - +from bumble import utils from bumble.att import ATT_Error from bumble.device import Peer from bumble.gatt import ( - Characteristic, - GATT_ANCS_SERVICE, - GATT_ANCS_NOTIFICATION_SOURCE_CHARACTERISTIC, GATT_ANCS_CONTROL_POINT_CHARACTERISTIC, GATT_ANCS_DATA_SOURCE_CHARACTERISTIC, + GATT_ANCS_NOTIFICATION_SOURCE_CHARACTERISTIC, + GATT_ANCS_SERVICE, + Characteristic, TemplateService, ) -from bumble.gatt_client import CharacteristicProxy, ProfileServiceProxy, ServiceProxy from bumble.gatt_adapters import SerializableCharacteristicProxyAdapter -from bumble import utils - +from bumble.gatt_client import CharacteristicProxy, ProfileServiceProxy, ServiceProxy # ----------------------------------------------------------------------------- # Constants diff --git a/bumble/profiles/ascs.py b/bumble/profiles/ascs.py index 216874d..51cc0e0 100644 --- a/bumble/profiles/ascs.py +++ b/bumble/profiles/ascs.py @@ -18,22 +18,17 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -from dataclasses import dataclass, field import enum import functools import logging import struct -from typing import Any, Optional, Union, TypeVar from collections.abc import Sequence +from dataclasses import dataclass, field +from typing import Any, Optional, TypeVar, Union -from bumble import utils -from bumble import colors -from bumble.profiles.bap import CodecSpecificConfiguration +from bumble import colors, device, gatt, gatt_client, hci, utils from bumble.profiles import le_audio -from bumble import device -from bumble import gatt -from bumble import gatt_client -from bumble import hci +from bumble.profiles.bap import CodecSpecificConfiguration # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/profiles/asha.py b/bumble/profiles/asha.py index e720e3e..7ed2624 100644 --- a/bumble/profiles/asha.py +++ b/bumble/profiles/asha.py @@ -17,16 +17,13 @@ # Imports # ----------------------------------------------------------------------------- import enum -import struct import logging -from typing import Optional, Callable, Union, Any +import struct +from typing import Any, Callable, Optional, Union -from bumble import l2cap -from bumble import utils -from bumble import gatt -from bumble import gatt_client +from bumble import gatt, gatt_client, l2cap, utils from bumble.core import AdvertisingData -from bumble.device import Device, Connection +from bumble.device import Connection, Device # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/profiles/bap.py b/bumble/profiles/bap.py index 5b94ac7..99bbc5e 100644 --- a/bumble/profiles/bap.py +++ b/bumble/profiles/bap.py @@ -18,21 +18,18 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -from collections.abc import Sequence import dataclasses import enum -import struct import functools import logging +import struct +from collections.abc import Sequence + from typing_extensions import Self -from bumble import core -from bumble import hci -from bumble import gatt -from bumble import utils +from bumble import core, gatt, hci, utils from bumble.profiles import le_audio - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/profiles/bass.py b/bumble/profiles/bass.py index 67599a0..64f85c6 100644 --- a/bumble/profiles/bass.py +++ b/bumble/profiles/bass.py @@ -17,18 +17,13 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import dataclasses import logging import struct from typing import ClassVar, Optional, Sequence -from bumble import core -from bumble import device -from bumble import gatt -from bumble import gatt_adapters -from bumble import gatt_client -from bumble import hci -from bumble import utils +from bumble import core, device, gatt, gatt_adapters, gatt_client, hci, utils # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/profiles/battery_service.py b/bumble/profiles/battery_service.py index 464bbb5..0fdee94 100644 --- a/bumble/profiles/battery_service.py +++ b/bumble/profiles/battery_service.py @@ -18,19 +18,18 @@ # ----------------------------------------------------------------------------- from typing import Optional -from bumble.gatt_client import ProfileServiceProxy from bumble.gatt import ( - GATT_BATTERY_SERVICE, GATT_BATTERY_LEVEL_CHARACTERISTIC, - TemplateService, + GATT_BATTERY_SERVICE, Characteristic, CharacteristicValue, + TemplateService, ) -from bumble.gatt_client import CharacteristicProxy from bumble.gatt_adapters import ( PackedCharacteristicAdapter, PackedCharacteristicProxyAdapter, ) +from bumble.gatt_client import CharacteristicProxy, ProfileServiceProxy # ----------------------------------------------------------------------------- diff --git a/bumble/profiles/cap.py b/bumble/profiles/cap.py index 476f908..171010b 100644 --- a/bumble/profiles/cap.py +++ b/bumble/profiles/cap.py @@ -18,8 +18,7 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -from bumble import gatt -from bumble import gatt_client +from bumble import gatt, gatt_client from bumble.profiles import csip diff --git a/bumble/profiles/csip.py b/bumble/profiles/csip.py index 7a508be..025bc7d 100644 --- a/bumble/profiles/csip.py +++ b/bumble/profiles/csip.py @@ -17,16 +17,12 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import enum import struct from typing import Optional -from bumble import core -from bumble import crypto -from bumble import device -from bumble import gatt -from bumble import gatt_client - +from bumble import core, crypto, device, gatt, gatt_client # ----------------------------------------------------------------------------- # Constants diff --git a/bumble/profiles/device_information_service.py b/bumble/profiles/device_information_service.py index 586b713..f08d3fa 100644 --- a/bumble/profiles/device_information_service.py +++ b/bumble/profiles/device_information_service.py @@ -25,12 +25,12 @@ from bumble.gatt import ( GATT_HARDWARE_REVISION_STRING_CHARACTERISTIC, GATT_MANUFACTURER_NAME_STRING_CHARACTERISTIC, GATT_MODEL_NUMBER_STRING_CHARACTERISTIC, + GATT_REGULATORY_CERTIFICATION_DATA_LIST_CHARACTERISTIC, GATT_SERIAL_NUMBER_STRING_CHARACTERISTIC, GATT_SOFTWARE_REVISION_STRING_CHARACTERISTIC, GATT_SYSTEM_ID_CHARACTERISTIC, - GATT_REGULATORY_CERTIFICATION_DATA_LIST_CHARACTERISTIC, - TemplateService, Characteristic, + TemplateService, ) from bumble.gatt_adapters import ( DelegatedCharacteristicProxyAdapter, diff --git a/bumble/profiles/gap.py b/bumble/profiles/gap.py index 60ac6be..198b419 100644 --- a/bumble/profiles/gap.py +++ b/bumble/profiles/gap.py @@ -23,11 +23,11 @@ from typing import Optional, Union from bumble.core import Appearance from bumble.gatt import ( - TemplateService, - Characteristic, - GATT_GENERIC_ACCESS_SERVICE, - GATT_DEVICE_NAME_CHARACTERISTIC, GATT_APPEARANCE_CHARACTERISTIC, + GATT_DEVICE_NAME_CHARACTERISTIC, + GATT_GENERIC_ACCESS_SERVICE, + Characteristic, + TemplateService, ) from bumble.gatt_adapters import ( DelegatedCharacteristicProxyAdapter, diff --git a/bumble/profiles/gatt_service.py b/bumble/profiles/gatt_service.py index e2d7a19..fa1e374 100644 --- a/bumble/profiles/gatt_service.py +++ b/bumble/profiles/gatt_service.py @@ -17,10 +17,7 @@ from __future__ import annotations import struct from typing import TYPE_CHECKING -from bumble import att -from bumble import gatt -from bumble import gatt_client -from bumble import crypto +from bumble import att, crypto, gatt, gatt_client if TYPE_CHECKING: from bumble import device diff --git a/bumble/profiles/gmap.py b/bumble/profiles/gmap.py index d646f89..9784d5d 100644 --- a/bumble/profiles/gmap.py +++ b/bumble/profiles/gmap.py @@ -18,21 +18,21 @@ # Imports # ----------------------------------------------------------------------------- import struct +from enum import IntFlag from typing import Optional from bumble.gatt import ( - TemplateService, - Characteristic, + GATT_BGR_FEATURES_CHARACTERISTIC, + GATT_BGS_FEATURES_CHARACTERISTIC, GATT_GAMING_AUDIO_SERVICE, GATT_GMAP_ROLE_CHARACTERISTIC, GATT_UGG_FEATURES_CHARACTERISTIC, GATT_UGT_FEATURES_CHARACTERISTIC, - GATT_BGS_FEATURES_CHARACTERISTIC, - GATT_BGR_FEATURES_CHARACTERISTIC, + Characteristic, + TemplateService, ) from bumble.gatt_adapters import DelegatedCharacteristicProxyAdapter from bumble.gatt_client import CharacteristicProxy, ProfileServiceProxy, ServiceProxy -from enum import IntFlag # ----------------------------------------------------------------------------- diff --git a/bumble/profiles/hap.py b/bumble/profiles/hap.py index cd5047f..0b245cb 100644 --- a/bumble/profiles/hap.py +++ b/bumble/profiles/hap.py @@ -16,16 +16,16 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import functools -from dataclasses import dataclass, field import logging +from dataclasses import dataclass, field from typing import Any, Optional, Union -from bumble import att, gatt, gatt_adapters, gatt_client +from bumble import att, gatt, gatt_adapters, gatt_client, utils from bumble.core import InvalidArgumentError, InvalidStateError -from bumble.device import Device, Connection -from bumble import utils +from bumble.device import Connection, Device from bumble.hci import Address diff --git a/bumble/profiles/heart_rate_service.py b/bumble/profiles/heart_rate_service.py index 090951b..5797979 100644 --- a/bumble/profiles/heart_rate_service.py +++ b/bumble/profiles/heart_rate_service.py @@ -17,20 +17,21 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations -from enum import IntEnum + import struct +from enum import IntEnum from typing import Optional from bumble import core from bumble.att import ATT_Error from bumble.gatt import ( - GATT_HEART_RATE_SERVICE, - GATT_HEART_RATE_MEASUREMENT_CHARACTERISTIC, GATT_BODY_SENSOR_LOCATION_CHARACTERISTIC, GATT_HEART_RATE_CONTROL_POINT_CHARACTERISTIC, - TemplateService, + GATT_HEART_RATE_MEASUREMENT_CHARACTERISTIC, + GATT_HEART_RATE_SERVICE, Characteristic, CharacteristicValue, + TemplateService, ) from bumble.gatt_adapters import ( DelegatedCharacteristicAdapter, diff --git a/bumble/profiles/le_audio.py b/bumble/profiles/le_audio.py index c83da80..e51bfff 100644 --- a/bumble/profiles/le_audio.py +++ b/bumble/profiles/le_audio.py @@ -16,14 +16,16 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import dataclasses import enum import struct from typing import Any + from typing_extensions import Self -from bumble.profiles import bap from bumble import utils +from bumble.profiles import bap # ----------------------------------------------------------------------------- diff --git a/bumble/profiles/mcp.py b/bumble/profiles/mcp.py index 4d34e8d..ea34174 100644 --- a/bumble/profiles/mcp.py +++ b/bumble/profiles/mcp.py @@ -22,16 +22,12 @@ import asyncio import dataclasses import enum import struct +from typing import TYPE_CHECKING, ClassVar, Optional -from bumble import core -from bumble import device -from bumble import gatt -from bumble import gatt_client -from bumble import utils - -from typing import Optional, ClassVar, TYPE_CHECKING from typing_extensions import Self +from bumble import core, device, gatt, gatt_client, utils + # ----------------------------------------------------------------------------- # Constants # ----------------------------------------------------------------------------- diff --git a/bumble/profiles/pacs.py b/bumble/profiles/pacs.py index 585afcb..1c9a090 100644 --- a/bumble/profiles/pacs.py +++ b/bumble/profiles/pacs.py @@ -17,18 +17,15 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import dataclasses import logging import struct from typing import Optional, Sequence, Union -from bumble.profiles.bap import AudioLocation, CodecSpecificCapabilities, ContextType +from bumble import gatt, gatt_adapters, gatt_client, hci from bumble.profiles import le_audio -from bumble import gatt -from bumble import gatt_adapters -from bumble import gatt_client -from bumble import hci - +from bumble.profiles.bap import AudioLocation, CodecSpecificCapabilities, ContextType # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/profiles/pbp.py b/bumble/profiles/pbp.py index d905dd9..f1c1828 100644 --- a/bumble/profiles/pbp.py +++ b/bumble/profiles/pbp.py @@ -16,8 +16,10 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import dataclasses import enum + from typing_extensions import Self from bumble.profiles import le_audio diff --git a/bumble/profiles/tmap.py b/bumble/profiles/tmap.py index 20f899c..f0e8f9f 100644 --- a/bumble/profiles/tmap.py +++ b/bumble/profiles/tmap.py @@ -22,15 +22,14 @@ import logging import struct from bumble.gatt import ( - TemplateService, - Characteristic, GATT_TELEPHONY_AND_MEDIA_AUDIO_SERVICE, GATT_TMAP_ROLE_CHARACTERISTIC, + Characteristic, + TemplateService, ) from bumble.gatt_adapters import DelegatedCharacteristicProxyAdapter from bumble.gatt_client import CharacteristicProxy, ProfileServiceProxy, ServiceProxy - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/profiles/vcs.py b/bumble/profiles/vcs.py index 73acdb1..bf1298a 100644 --- a/bumble/profiles/vcs.py +++ b/bumble/profiles/vcs.py @@ -17,18 +17,12 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import dataclasses import enum - from typing import Sequence -from bumble import att -from bumble import utils -from bumble import device -from bumble import gatt -from bumble import gatt_adapters -from bumble import gatt_client - +from bumble import att, device, gatt, gatt_adapters, gatt_client, utils # ----------------------------------------------------------------------------- # Constants diff --git a/bumble/profiles/vocs.py b/bumble/profiles/vocs.py index 7ce5ddd..611103a 100644 --- a/bumble/profiles/vocs.py +++ b/bumble/profiles/vocs.py @@ -20,17 +20,18 @@ import struct from dataclasses import dataclass from typing import Optional -from bumble.device import Connection +from bumble import utils from bumble.att import ATT_Error +from bumble.device import Connection from bumble.gatt import ( - Characteristic, - TemplateService, - CharacteristicValue, + GATT_AUDIO_LOCATION_CHARACTERISTIC, + GATT_AUDIO_OUTPUT_DESCRIPTION_CHARACTERISTIC, + GATT_VOLUME_OFFSET_CONTROL_POINT_CHARACTERISTIC, GATT_VOLUME_OFFSET_CONTROL_SERVICE, GATT_VOLUME_OFFSET_STATE_CHARACTERISTIC, - GATT_AUDIO_LOCATION_CHARACTERISTIC, - GATT_VOLUME_OFFSET_CONTROL_POINT_CHARACTERISTIC, - GATT_AUDIO_OUTPUT_DESCRIPTION_CHARACTERISTIC, + Characteristic, + CharacteristicValue, + TemplateService, ) from bumble.gatt_adapters import ( DelegatedCharacteristicProxyAdapter, @@ -38,7 +39,6 @@ from bumble.gatt_adapters import ( UTF8CharacteristicProxyAdapter, ) from bumble.gatt_client import ProfileServiceProxy, ServiceProxy -from bumble import utils from bumble.profiles.bap import AudioLocation # ----------------------------------------------------------------------------- diff --git a/bumble/rfcomm.py b/bumble/rfcomm.py index f3de163..0983c77 100644 --- a/bumble/rfcomm.py +++ b/bumble/rfcomm.py @@ -17,33 +17,30 @@ # ----------------------------------------------------------------------------- from __future__ import annotations -import logging import asyncio import collections import dataclasses import enum -from typing import Callable, Optional, Union, TYPE_CHECKING +import logging +from typing import TYPE_CHECKING, Callable, Optional, Union + from typing_extensions import Self - -from bumble import core -from bumble import l2cap -from bumble import sdp -from bumble import utils +from bumble import core, l2cap, sdp, utils from bumble.colors import color from bumble.core import ( - UUID, - BT_RFCOMM_PROTOCOL_ID, - PhysicalTransport, BT_L2CAP_PROTOCOL_ID, + BT_RFCOMM_PROTOCOL_ID, + UUID, InvalidArgumentError, - InvalidStateError, InvalidPacketError, + InvalidStateError, + PhysicalTransport, ProtocolError, ) if TYPE_CHECKING: - from bumble.device import Device, Connection + from bumble.device import Connection, Device # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/rtp.py b/bumble/rtp.py index cba6731..d07e1c9 100644 --- a/bumble/rtp.py +++ b/bumble/rtp.py @@ -16,6 +16,7 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import struct diff --git a/bumble/sdp.py b/bumble/sdp.py index 8135692..185e902 100644 --- a/bumble/sdp.py +++ b/bumble/sdp.py @@ -16,24 +16,26 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import logging import struct -from typing import Iterable, NewType, Optional, Union, Sequence, TYPE_CHECKING +from typing import TYPE_CHECKING, Iterable, NewType, Optional, Sequence, Union + from typing_extensions import Self from bumble import core, l2cap from bumble.colors import color from bumble.core import ( - InvalidStateError, InvalidArgumentError, InvalidPacketError, + InvalidStateError, ProtocolError, ) -from bumble.hci import HCI_Object, name_or_number, key_with_value +from bumble.hci import HCI_Object, key_with_value, name_or_number if TYPE_CHECKING: - from bumble.device import Device, Connection + from bumble.device import Connection, Device # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/smp.py b/bumble/smp.py index 50c4efb..ab56ce7 100644 --- a/bumble/smp.py +++ b/bumble/smp.py @@ -23,42 +23,41 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations -import logging + import asyncio import enum +import logging from dataclasses import dataclass, field from typing import ( TYPE_CHECKING, Any, Awaitable, Callable, + ClassVar, Optional, TypeVar, - ClassVar, cast, ) - +from bumble import crypto, utils from bumble.colors import color -from bumble.hci import ( - Address, - Role, - HCI_LE_Enable_Encryption_Command, - HCI_Object, - Fields, - key_with_value, - metadata, -) from bumble.core import ( - PhysicalTransport, AdvertisingData, InvalidArgumentError, + PhysicalTransport, ProtocolError, name_or_number, ) +from bumble.hci import ( + Address, + Fields, + HCI_LE_Enable_Encryption_Command, + HCI_Object, + Role, + key_with_value, + metadata, +) from bumble.keys import PairingKeys -from bumble import crypto -from bumble import utils if TYPE_CHECKING: from bumble.device import Connection, Device diff --git a/bumble/snoop.py b/bumble/snoop.py index 326603f..5a8262c 100644 --- a/bumble/snoop.py +++ b/bumble/snoop.py @@ -12,21 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. +import datetime +import logging +import os +import struct + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- from contextlib import contextmanager from enum import IntEnum -import logging -import struct -import datetime from typing import BinaryIO, Generator -import os from bumble import core from bumble.hci import HCI_COMMAND_PACKET, HCI_EVENT_PACKET - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/transport/__init__.py b/bumble/transport/__init__.py index 829af31..0dbfef9 100644 --- a/bumble/transport/__init__.py +++ b/bumble/transport/__init__.py @@ -12,21 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging +import os + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- from contextlib import asynccontextmanager -import logging -import os from typing import Optional from bumble import utils -from bumble.transport.common import ( - Transport, - SnoopingTransport, - TransportSpecError, -) from bumble.snoop import create_snooper +from bumble.transport.common import SnoopingTransport, Transport, TransportSpecError # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/android_emulator.py b/bumble/transport/android_emulator.py index 2f0652d..1207840 100644 --- a/bumble/transport/android_emulator.py +++ b/bumble/transport/android_emulator.py @@ -16,28 +16,27 @@ # Imports # ----------------------------------------------------------------------------- import logging -import grpc.aio - from typing import Optional, Union +import grpc.aio + from bumble.transport.common import ( - PumpedTransport, - PumpedPacketSource, PumpedPacketSink, + PumpedPacketSource, + PumpedTransport, Transport, TransportSpecError, ) # pylint: disable=no-name-in-module +from bumble.transport.grpc_protobuf.emulated_bluetooth_packets_pb2 import HCIPacket from bumble.transport.grpc_protobuf.emulated_bluetooth_pb2_grpc import ( EmulatedBluetoothServiceStub, ) -from bumble.transport.grpc_protobuf.emulated_bluetooth_packets_pb2 import HCIPacket from bumble.transport.grpc_protobuf.emulated_bluetooth_vhci_pb2_grpc import ( VhciForwardingServiceStub, ) - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/transport/android_netsim.py b/bumble/transport/android_netsim.py index d54b88d..2575814 100644 --- a/bumble/transport/android_netsim.py +++ b/bumble/transport/android_netsim.py @@ -29,28 +29,27 @@ import grpc.aio import bumble from bumble.transport.common import ( ParserSource, - PumpedTransport, - PumpedPacketSource, PumpedPacketSink, + PumpedPacketSource, + PumpedTransport, Transport, - TransportSpecError, TransportInitError, + TransportSpecError, ) # pylint: disable=no-name-in-module -from bumble.transport.grpc_protobuf.netsim.packet_streamer_pb2_grpc import ( - PacketStreamerStub, - PacketStreamerServicer, - add_PacketStreamerServicer_to_server, -) +from bumble.transport.grpc_protobuf.netsim.common_pb2 import ChipKind +from bumble.transport.grpc_protobuf.netsim.hci_packet_pb2 import HCIPacket from bumble.transport.grpc_protobuf.netsim.packet_streamer_pb2 import ( PacketRequest, PacketResponse, ) -from bumble.transport.grpc_protobuf.netsim.hci_packet_pb2 import HCIPacket +from bumble.transport.grpc_protobuf.netsim.packet_streamer_pb2_grpc import ( + PacketStreamerServicer, + PacketStreamerStub, + add_PacketStreamerServicer_to_server, +) from bumble.transport.grpc_protobuf.netsim.startup_pb2 import Chip, ChipInfo, DeviceInfo -from bumble.transport.grpc_protobuf.netsim.common_pb2 import ChipKind - # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/common.py b/bumble/transport/common.py index 7efda02..b0f3c8a 100644 --- a/bumble/transport/common.py +++ b/bumble/transport/common.py @@ -16,19 +16,18 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations -import contextlib -import struct + import asyncio -import logging +import contextlib import io +import logging +import struct from typing import Any, ContextManager, Optional, Protocol -from bumble import core -from bumble import hci +from bumble import core, hci from bumble.colors import color from bumble.snoop import Snooper - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/bumble/transport/file.py b/bumble/transport/file.py index 3fe9ee5..90e1be5 100644 --- a/bumble/transport/file.py +++ b/bumble/transport/file.py @@ -19,7 +19,7 @@ import asyncio import io import logging -from bumble.transport.common import Transport, StreamPacketSource, StreamPacketSink +from bumble.transport.common import StreamPacketSink, StreamPacketSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/hci_socket.py b/bumble/transport/hci_socket.py index 6ea6793..cc73523 100644 --- a/bumble/transport/hci_socket.py +++ b/bumble/transport/hci_socket.py @@ -16,17 +16,15 @@ # Imports # ----------------------------------------------------------------------------- import asyncio +import collections +import ctypes import logging -import struct import os import socket -import ctypes -import collections - +import struct from typing import Optional -from bumble.transport.common import Transport, ParserSource - +from bumble.transport.common import ParserSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/pty.py b/bumble/transport/pty.py index 75f30a2..21611d8 100644 --- a/bumble/transport/pty.py +++ b/bumble/transport/pty.py @@ -16,16 +16,15 @@ # Imports # ----------------------------------------------------------------------------- import asyncio +import atexit +import io +import logging +import os import pty import tty -import io -import atexit -import os -import logging - from typing import Optional -from bumble.transport.common import Transport, StreamPacketSource, StreamPacketSink +from bumble.transport.common import StreamPacketSink, StreamPacketSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/pyusb.py b/bumble/transport/pyusb.py index 685fdfd..2c333ec 100644 --- a/bumble/transport/pyusb.py +++ b/bumble/transport/pyusb.py @@ -19,20 +19,18 @@ import asyncio import logging import threading import time +from typing import Optional import usb.core import usb.util - -from typing import Optional from usb.core import Device as UsbDevice from usb.core import USBError -from usb.util import CTRL_TYPE_CLASS, CTRL_RECIPIENT_OTHER -from usb.legacy import REQ_SET_FEATURE, REQ_CLEAR_FEATURE, CLASS_HUB +from usb.legacy import CLASS_HUB, REQ_CLEAR_FEATURE, REQ_SET_FEATURE +from usb.util import CTRL_RECIPIENT_OTHER, CTRL_TYPE_CLASS -from bumble.transport.common import Transport, ParserSource, TransportInitError from bumble import hci from bumble.colors import color - +from bumble.transport.common import ParserSource, Transport, TransportInitError # ----------------------------------------------------------------------------- # Constant diff --git a/bumble/transport/serial.py b/bumble/transport/serial.py index 9c5a299..7c8c14c 100644 --- a/bumble/transport/serial.py +++ b/bumble/transport/serial.py @@ -17,9 +17,10 @@ # ----------------------------------------------------------------------------- import asyncio import logging + import serial_asyncio -from bumble.transport.common import Transport, StreamPacketSource, StreamPacketSink +from bumble.transport.common import StreamPacketSink, StreamPacketSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/tcp_client.py b/bumble/transport/tcp_client.py index 623b2d9..e300fc7 100644 --- a/bumble/transport/tcp_client.py +++ b/bumble/transport/tcp_client.py @@ -18,7 +18,7 @@ import asyncio import logging -from bumble.transport.common import Transport, StreamPacketSource, StreamPacketSink +from bumble.transport.common import StreamPacketSink, StreamPacketSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/tcp_server.py b/bumble/transport/tcp_server.py index f6ff69f..5f79f65 100644 --- a/bumble/transport/tcp_server.py +++ b/bumble/transport/tcp_server.py @@ -16,11 +16,12 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import logging import socket -from bumble.transport.common import Transport, StreamPacketSource +from bumble.transport.common import StreamPacketSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/udp.py b/bumble/transport/udp.py index 51b10a4..70175e2 100644 --- a/bumble/transport/udp.py +++ b/bumble/transport/udp.py @@ -18,7 +18,7 @@ import asyncio import logging -from bumble.transport.common import Transport, ParserSource +from bumble.transport.common import ParserSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/unix.py b/bumble/transport/unix.py index 57b60a0..ee56b4b 100644 --- a/bumble/transport/unix.py +++ b/bumble/transport/unix.py @@ -18,7 +18,7 @@ import asyncio import logging -from bumble.transport.common import Transport, StreamPacketSource, StreamPacketSink +from bumble.transport.common import StreamPacketSink, StreamPacketSource, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/usb.py b/bumble/transport/usb.py index 435f534..80fdcd3 100644 --- a/bumble/transport/usb.py +++ b/bumble/transport/usb.py @@ -16,18 +16,18 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio -import logging -import threading import ctypes +import logging import platform +import threading import usb1 -from bumble.transport.common import Transport, BaseSource, TransportInitError from bumble import hci from bumble.colors import color - +from bumble.transport.common import BaseSource, Transport, TransportInitError # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/transport/vhci.py b/bumble/transport/vhci.py index dc60202..8ae0d89 100644 --- a/bumble/transport/vhci.py +++ b/bumble/transport/vhci.py @@ -16,7 +16,6 @@ # Imports # ----------------------------------------------------------------------------- import logging - from typing import Optional from bumble.transport.common import Transport diff --git a/bumble/transport/ws_client.py b/bumble/transport/ws_client.py index 86b7e9c..555b013 100644 --- a/bumble/transport/ws_client.py +++ b/bumble/transport/ws_client.py @@ -16,11 +16,12 @@ # Imports # ----------------------------------------------------------------------------- import logging + import websockets.client from bumble.transport.common import ( - PumpedPacketSource, PumpedPacketSink, + PumpedPacketSource, PumpedTransport, Transport, ) diff --git a/bumble/transport/ws_server.py b/bumble/transport/ws_server.py index 0a35dda..519d0ab 100644 --- a/bumble/transport/ws_server.py +++ b/bumble/transport/ws_server.py @@ -16,9 +16,10 @@ # Imports # ----------------------------------------------------------------------------- import logging + import websockets -from bumble.transport.common import Transport, ParserSource, PumpedPacketSink +from bumble.transport.common import ParserSource, PumpedPacketSink, Transport # ----------------------------------------------------------------------------- # Logging diff --git a/bumble/utils.py b/bumble/utils.py index b7d3092..358c9a9 100644 --- a/bumble/utils.py +++ b/bumble/utils.py @@ -16,6 +16,7 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import collections import enum @@ -33,10 +34,10 @@ from typing import ( Union, overload, ) -from typing_extensions import Self import pyee import pyee.asyncio +from typing_extensions import Self from bumble.colors import color diff --git a/bumble/vendor/android/hci.py b/bumble/vendor/android/hci.py index e3482bf..a023980 100644 --- a/bumble/vendor/android/hci.py +++ b/bumble/vendor/android/hci.py @@ -16,13 +16,12 @@ # Imports # ----------------------------------------------------------------------------- import dataclasses -from dataclasses import field import struct +from dataclasses import field from typing import Optional from bumble import hci - # ----------------------------------------------------------------------------- # Constants # ----------------------------------------------------------------------------- diff --git a/bumble/vendor/zephyr/hci.py b/bumble/vendor/zephyr/hci.py index fc6f87e..8aff44f 100644 --- a/bumble/vendor/zephyr/hci.py +++ b/bumble/vendor/zephyr/hci.py @@ -19,7 +19,6 @@ import dataclasses from bumble import hci - # ----------------------------------------------------------------------------- # Constants # ----------------------------------------------------------------------------- diff --git a/examples/async_runner.py b/examples/async_runner.py index 92475f9..b35763b 100644 --- a/examples/async_runner.py +++ b/examples/async_runner.py @@ -17,8 +17,8 @@ # ----------------------------------------------------------------------------- import asyncio -from bumble.utils import AsyncRunner import bumble.logging +from bumble.utils import AsyncRunner # ----------------------------------------------------------------------------- my_work_queue1 = AsyncRunner.WorkQueue() diff --git a/examples/battery_client.py b/examples/battery_client.py index 0633e0f..72af1d7 100644 --- a/examples/battery_client.py +++ b/examples/battery_client.py @@ -17,12 +17,13 @@ # ----------------------------------------------------------------------------- import asyncio import sys + +import bumble.logging from bumble.colors import color from bumble.device import Device from bumble.hci import Address -from bumble.transport import open_transport from bumble.profiles.battery_service import BatteryServiceProxy -import bumble.logging +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/battery_server.py b/examples/battery_server.py index ea53b01..92cd87f 100644 --- a/examples/battery_server.py +++ b/examples/battery_server.py @@ -16,15 +16,15 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import random import struct +import sys +import bumble.logging from bumble.core import AdvertisingData from bumble.device import Device -from bumble.transport import open_transport from bumble.profiles.battery_service import BatteryService -import bumble.logging +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/device_information_client.py b/examples/device_information_client.py index 8ab3101..0d28ff2 100644 --- a/examples/device_information_client.py +++ b/examples/device_information_client.py @@ -18,12 +18,12 @@ import asyncio import sys +import bumble.logging from bumble.colors import color from bumble.device import Device, Peer from bumble.hci import Address from bumble.profiles.device_information_service import DeviceInformationServiceProxy from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/device_information_server.py b/examples/device_information_server.py index c7480b3..0fd1b24 100644 --- a/examples/device_information_server.py +++ b/examples/device_information_server.py @@ -16,14 +16,14 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import struct +import sys +import bumble.logging from bumble.core import AdvertisingData from bumble.device import Device -from bumble.transport import open_transport from bumble.profiles.device_information_service import DeviceInformationService -import bumble.logging +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/heart_rate_client.py b/examples/heart_rate_client.py index b70d3dc..05dfb35 100644 --- a/examples/heart_rate_client.py +++ b/examples/heart_rate_client.py @@ -18,12 +18,12 @@ import asyncio import sys +import bumble.logging from bumble.colors import color from bumble.device import Device from bumble.hci import Address -from bumble.transport import open_transport from bumble.profiles.heart_rate_service import HeartRateServiceProxy -import bumble.logging +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/heart_rate_server.py b/examples/heart_rate_server.py index 25e0c5b..8f7195b 100644 --- a/examples/heart_rate_server.py +++ b/examples/heart_rate_server.py @@ -12,23 +12,24 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio +import math +import random +import struct + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import sys import time -import math -import random -import struct -import asyncio +import bumble.logging from bumble.core import AdvertisingData from bumble.device import Device -from bumble.transport import open_transport from bumble.profiles.device_information_service import DeviceInformationService from bumble.profiles.heart_rate_service import HeartRateService +from bumble.transport import open_transport from bumble.utils import AsyncRunner -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/hid_report_parser.py b/examples/hid_report_parser.py index 61561b3..6af331f 100644 --- a/examples/hid_report_parser.py +++ b/examples/hid_report_parser.py @@ -1,6 +1,7 @@ -from bumble.colors import color from hid_key_map import base_keys, mod_keys, shift_map +from bumble.colors import color + # ------------------------------------------------------------------------------ def get_key(modifier: str, key: str) -> str: diff --git a/examples/keyboard.py b/examples/keyboard.py index c63f0bd..d2372f1 100644 --- a/examples/keyboard.py +++ b/examples/keyboard.py @@ -16,36 +16,35 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys -import struct import json +import struct +import sys import websockets +import bumble.logging from bumble.colors import color from bumble.core import AdvertisingData -from bumble.device import Device, Connection, Peer -from bumble.utils import AsyncRunner -from bumble.transport import open_transport +from bumble.device import Connection, Device, Peer from bumble.gatt import ( - Descriptor, - Service, - Characteristic, - CharacteristicValue, - GATT_DEVICE_INFORMATION_SERVICE, - GATT_HUMAN_INTERFACE_DEVICE_SERVICE, - GATT_BATTERY_SERVICE, GATT_BATTERY_LEVEL_CHARACTERISTIC, + GATT_BATTERY_SERVICE, + GATT_DEVICE_INFORMATION_SERVICE, + GATT_HID_CONTROL_POINT_CHARACTERISTIC, + GATT_HID_INFORMATION_CHARACTERISTIC, + GATT_HUMAN_INTERFACE_DEVICE_SERVICE, GATT_MANUFACTURER_NAME_STRING_CHARACTERISTIC, + GATT_PROTOCOL_MODE_CHARACTERISTIC, GATT_REPORT_CHARACTERISTIC, GATT_REPORT_MAP_CHARACTERISTIC, - GATT_PROTOCOL_MODE_CHARACTERISTIC, - GATT_HID_INFORMATION_CHARACTERISTIC, - GATT_HID_CONTROL_POINT_CHARACTERISTIC, GATT_REPORT_REFERENCE_DESCRIPTOR, + Characteristic, + CharacteristicValue, + Descriptor, + Service, ) -import bumble.logging - +from bumble.transport import open_transport +from bumble.utils import AsyncRunner # ----------------------------------------------------------------------------- diff --git a/examples/mobly/bench/one_device_bench_test.py b/examples/mobly/bench/one_device_bench_test.py index c715885..82a818d 100644 --- a/examples/mobly/bench/one_device_bench_test.py +++ b/examples/mobly/bench/one_device_bench_test.py @@ -1,5 +1,4 @@ -from mobly import base_test -from mobly import test_runner +from mobly import base_test, test_runner from mobly.controllers import android_device diff --git a/examples/mobly/bench/two_devices_bench_test.py b/examples/mobly/bench/two_devices_bench_test.py index 4a47263..aefc77c 100644 --- a/examples/mobly/bench/two_devices_bench_test.py +++ b/examples/mobly/bench/two_devices_bench_test.py @@ -1,7 +1,6 @@ import time -from mobly import base_test -from mobly import test_runner +from mobly import base_test, test_runner from mobly.controllers import android_device diff --git a/examples/run_a2dp_info.py b/examples/run_a2dp_info.py index fcede37..eda6ff1 100644 --- a/examples/run_a2dp_info.py +++ b/examples/run_a2dp_info.py @@ -18,26 +18,25 @@ import asyncio import sys -from bumble.colors import color -from bumble.device import Device -from bumble.transport import open_transport -from bumble.core import ( - PhysicalTransport, - BT_AVDTP_PROTOCOL_ID, - BT_AUDIO_SINK_SERVICE, - BT_L2CAP_PROTOCOL_ID, -) -from bumble.avdtp import Protocol as AVDTP_Protocol +import bumble.logging from bumble.a2dp import make_audio_source_service_sdp_records +from bumble.avdtp import Protocol as AVDTP_Protocol +from bumble.colors import color +from bumble.core import ( + BT_AUDIO_SINK_SERVICE, + BT_AVDTP_PROTOCOL_ID, + BT_L2CAP_PROTOCOL_ID, + PhysicalTransport, +) +from bumble.device import Device from bumble.sdp import ( - Client as SDP_Client, - ServiceAttribute, - DataElement, - SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, ) -import bumble.logging +from bumble.sdp import Client as SDP_Client +from bumble.sdp import DataElement, ServiceAttribute +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_a2dp_sink.py b/examples/run_a2dp_sink.py index 73c2bbb..1d4f2a2 100644 --- a/examples/run_a2dp_sink.py +++ b/examples/run_a2dp_sink.py @@ -19,22 +19,21 @@ import asyncio import sys from typing import Any -from bumble.device import Device -from bumble.transport import open_transport -from bumble.core import PhysicalTransport -from bumble.avdtp import ( - AVDTP_AUDIO_MEDIA_TYPE, - Protocol, - Listener, - MediaCodecCapabilities, -) +import bumble.logging from bumble.a2dp import ( - make_audio_sink_service_sdp_records, A2DP_SBC_CODEC_TYPE, SbcMediaCodecInformation, + make_audio_sink_service_sdp_records, ) -import bumble.logging - +from bumble.avdtp import ( + AVDTP_AUDIO_MEDIA_TYPE, + Listener, + MediaCodecCapabilities, + Protocol, +) +from bumble.core import PhysicalTransport +from bumble.device import Device +from bumble.transport import open_transport Context: dict[Any, Any] = {'output': None} diff --git a/examples/run_a2dp_source.py b/examples/run_a2dp_source.py index 19c545b..4766cdf 100644 --- a/examples/run_a2dp_source.py +++ b/examples/run_a2dp_source.py @@ -18,25 +18,25 @@ import asyncio import sys -from bumble.colors import color -from bumble.device import Device -from bumble.transport import open_transport -from bumble.core import PhysicalTransport -from bumble.avdtp import ( - find_avdtp_service_with_connection, - AVDTP_AUDIO_MEDIA_TYPE, - MediaCodecCapabilities, - MediaPacketPump, - Protocol, - Listener, -) +import bumble.logging from bumble.a2dp import ( - make_audio_source_service_sdp_records, A2DP_SBC_CODEC_TYPE, SbcMediaCodecInformation, SbcPacketSource, + make_audio_source_service_sdp_records, ) -import bumble.logging +from bumble.avdtp import ( + AVDTP_AUDIO_MEDIA_TYPE, + Listener, + MediaCodecCapabilities, + MediaPacketPump, + Protocol, + find_avdtp_service_with_connection, +) +from bumble.colors import color +from bumble.core import PhysicalTransport +from bumble.device import Device +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_advertiser.py b/examples/run_advertiser.py index 69e23d0..fc44e07 100644 --- a/examples/run_advertiser.py +++ b/examples/run_advertiser.py @@ -16,14 +16,14 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import struct +import sys +import bumble.logging from bumble.core import AdvertisingData from bumble.device import AdvertisingType, Device from bumble.hci import Address from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_ams_client.py b/examples/run_ams_client.py index 098567e..b58cb76 100644 --- a/examples/run_ams_client.py +++ b/examples/run_ams_client.py @@ -16,21 +16,21 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys -import os import logging -from bumble.colors import color +import os +import sys +from bumble.colors import color from bumble.device import Device, Peer -from bumble.transport import open_transport from bumble.profiles.ams import ( AmsClient, EntityId, PlayerAttributeId, QueueAttributeId, - TrackAttributeId, RemoteCommandId, + TrackAttributeId, ) +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_ancs_client.py b/examples/run_ancs_client.py index 1b2a895..467c0a3 100644 --- a/examples/run_ancs_client.py +++ b/examples/run_ancs_client.py @@ -18,9 +18,9 @@ import asyncio import sys +import bumble.logging from bumble.colors import color from bumble.device import Device, Peer -from bumble.transport import open_transport from bumble.profiles.ancs import ( AncsClient, AppAttributeId, @@ -29,8 +29,7 @@ from bumble.profiles.ancs import ( Notification, NotificationAttributeId, ) -import bumble.logging - +from bumble.transport import open_transport # ----------------------------------------------------------------------------- _cached_app_names: dict[str, str] = {} diff --git a/examples/run_asha_sink.py b/examples/run_asha_sink.py index b35f63d..03a07e7 100644 --- a/examples/run_asha_sink.py +++ b/examples/run_asha_sink.py @@ -16,20 +16,18 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import logging +import sys from typing import Optional import websockets -from bumble import decoder -from bumble import gatt -from bumble.core import AdvertisingData -from bumble.device import Device, AdvertisingParameters -from bumble.transport import open_transport -from bumble.profiles import asha import bumble.logging - +from bumble import decoder, gatt +from bumble.core import AdvertisingData +from bumble.device import AdvertisingParameters, Device +from bumble.profiles import asha +from bumble.transport import open_transport ws_connection: Optional[websockets.WebSocketServerProtocol] = None g722_decoder = decoder.G722Decoder() diff --git a/examples/run_avrcp.py b/examples/run_avrcp.py index e555189..592e21a 100644 --- a/examples/run_avrcp.py +++ b/examples/run_avrcp.py @@ -16,23 +16,19 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import json -import sys import logging +import sys import websockets +import bumble.logging +from bumble import a2dp, avc, avdtp, avrcp, utils +from bumble.core import PhysicalTransport from bumble.device import Device from bumble.transport import open_transport -from bumble.core import PhysicalTransport -from bumble import avc -from bumble import avrcp -from bumble import avdtp -from bumble import a2dp -from bumble import utils -import bumble.logging - logger = logging.getLogger(__name__) diff --git a/examples/run_channel_sounding.py b/examples/run_channel_sounding.py index a84f7a2..4d63b67 100644 --- a/examples/run_channel_sounding.py +++ b/examples/run_channel_sounding.py @@ -18,15 +18,13 @@ from __future__ import annotations import asyncio -import sys import functools +import sys -from bumble import core -from bumble import hci -from bumble.device import Connection, Device, ChannelSoundingCapabilities -from bumble.transport import open_transport import bumble.logging - +from bumble import core, hci +from bumble.device import ChannelSoundingCapabilities, Connection, Device +from bumble.transport import open_transport # From https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Bluetooth/system/gd/hci/distance_measurement_manager.cc. CS_TONE_ANTENNA_CONFIG_MAPPING_TABLE = [ diff --git a/examples/run_cig_setup.py b/examples/run_cig_setup.py index 67dea20..a01934f 100644 --- a/examples/run_cig_setup.py +++ b/examples/run_cig_setup.py @@ -18,12 +18,10 @@ import asyncio import sys -from bumble.device import Device, CigParameters, CisLink, Connection -from bumble.hci import ( - OwnAddressType, -) -from bumble.transport import open_transport import bumble.logging +from bumble.device import CigParameters, CisLink, Connection, Device +from bumble.hci import OwnAddressType +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_classic_connect.py b/examples/run_classic_connect.py index b287c12..2d2849c 100644 --- a/examples/run_classic_connect.py +++ b/examples/run_classic_connect.py @@ -18,16 +18,13 @@ import asyncio import sys -from bumble.colors import color -from bumble.device import Device -from bumble.transport import open_transport -from bumble.core import PhysicalTransport, BT_L2CAP_PROTOCOL_ID, CommandTimeoutError -from bumble.sdp import ( - Client as SDP_Client, - SDP_PUBLIC_BROWSE_ROOT, - SDP_ALL_ATTRIBUTES_RANGE, -) import bumble.logging +from bumble.colors import color +from bumble.core import BT_L2CAP_PROTOCOL_ID, CommandTimeoutError, PhysicalTransport +from bumble.device import Device +from bumble.sdp import SDP_ALL_ATTRIBUTES_RANGE, SDP_PUBLIC_BROWSE_ROOT +from bumble.sdp import Client as SDP_Client +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_classic_discoverable.py b/examples/run_classic_discoverable.py index aa09f71..bad08f6 100644 --- a/examples/run_classic_discoverable.py +++ b/examples/run_classic_discoverable.py @@ -18,26 +18,25 @@ import asyncio import sys +import bumble.logging +from bumble.core import ( + BT_ADVANCED_AUDIO_DISTRIBUTION_SERVICE, + BT_AUDIO_SINK_SERVICE, + BT_AVDTP_PROTOCOL_ID, + BT_L2CAP_PROTOCOL_ID, +) from bumble.device import Device -from bumble.transport import open_transport from bumble.sdp import ( + SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, + SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_PUBLIC_BROWSE_ROOT, + SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, + SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, DataElement, ServiceAttribute, - SDP_PUBLIC_BROWSE_ROOT, - SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, - SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, - SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, - SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, ) -from bumble.core import ( - BT_AUDIO_SINK_SERVICE, - BT_L2CAP_PROTOCOL_ID, - BT_AVDTP_PROTOCOL_ID, - BT_ADVANCED_AUDIO_DISTRIBUTION_SERVICE, -) -import bumble.logging - +from bumble.transport import open_transport # ----------------------------------------------------------------------------- SDP_SERVICE_RECORDS = { diff --git a/examples/run_classic_discovery.py b/examples/run_classic_discovery.py index d60945e..1b4a636 100644 --- a/examples/run_classic_discovery.py +++ b/examples/run_classic_discovery.py @@ -18,12 +18,12 @@ import asyncio import sys +import bumble.logging from bumble.colors import color +from bumble.core import DeviceClass from bumble.device import Device from bumble.hci import Address from bumble.transport import open_transport -from bumble.core import DeviceClass -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_connect_and_encrypt.py b/examples/run_connect_and_encrypt.py index 303a615..5515ade 100644 --- a/examples/run_connect_and_encrypt.py +++ b/examples/run_connect_and_encrypt.py @@ -18,9 +18,9 @@ import asyncio import sys +import bumble.logging from bumble.device import Device from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_controller.py b/examples/run_controller.py index c0e04e8..2b7f743 100644 --- a/examples/run_controller.py +++ b/examples/run_controller.py @@ -18,6 +18,9 @@ import asyncio import sys +import bumble.logging +from bumble.controller import Controller +from bumble.device import Device from bumble.gatt import ( GATT_CHARACTERISTIC_USER_DESCRIPTION_DESCRIPTOR, GATT_DEVICE_INFORMATION_SERVICE, @@ -26,12 +29,9 @@ from bumble.gatt import ( Descriptor, Service, ) -from bumble.device import Device from bumble.host import Host -from bumble.controller import Controller from bumble.link import LocalLink from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_controller_with_scanner.py b/examples/run_controller_with_scanner.py index 98c78fe..ff6cd3e 100644 --- a/examples/run_controller_with_scanner.py +++ b/examples/run_controller_with_scanner.py @@ -18,13 +18,13 @@ import asyncio import sys +import bumble.logging from bumble.colors import color -from bumble.device import Device from bumble.controller import Controller +from bumble.device import Device from bumble.hci import Address from bumble.link import LocalLink from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_csis_servers.py b/examples/run_csis_servers.py index 147217b..78fac89 100644 --- a/examples/run_csis_servers.py +++ b/examples/run_csis_servers.py @@ -16,18 +16,16 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import secrets +import sys +import bumble.logging from bumble.core import AdvertisingData from bumble.device import Device -from bumble.hci import ( - Address, -) +from bumble.hci import Address from bumble.profiles.cap import CommonAudioServiceService from bumble.profiles.csip import CoordinatedSetIdentificationService, SirkType from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_device_with_snooper.py b/examples/run_device_with_snooper.py index d9aaf36..c7752d8 100644 --- a/examples/run_device_with_snooper.py +++ b/examples/run_device_with_snooper.py @@ -18,11 +18,11 @@ import asyncio import sys -from bumble.hci import Address -from bumble.device import Device -from bumble.transport import open_transport -from bumble.snoop import BtSnooper import bumble.logging +from bumble.device import Device +from bumble.hci import Address +from bumble.snoop import BtSnooper +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_esco_connection.py b/examples/run_esco_connection.py index 2ae0bed..4c776d1 100644 --- a/examples/run_esco_connection.py +++ b/examples/run_esco_connection.py @@ -18,12 +18,12 @@ import asyncio import sys +import bumble.logging from bumble.core import PhysicalTransport from bumble.device import Device, ScoLink from bumble.hci import HCI_Enhanced_Setup_Synchronous_Connection_Command -from bumble.hfp import DefaultCodecParameters, ESCO_PARAMETERS +from bumble.hfp import ESCO_PARAMETERS, DefaultCodecParameters from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_extended_advertiser.py b/examples/run_extended_advertiser.py index e0d34c0..f178f50 100644 --- a/examples/run_extended_advertiser.py +++ b/examples/run_extended_advertiser.py @@ -18,15 +18,15 @@ import asyncio import sys +import bumble.logging from bumble.device import ( - AdvertisingParameters, AdvertisingEventProperties, + AdvertisingParameters, AdvertisingType, Device, ) from bumble.hci import Address from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_extended_advertiser_2.py b/examples/run_extended_advertiser_2.py index 054f822..21f3de5 100644 --- a/examples/run_extended_advertiser_2.py +++ b/examples/run_extended_advertiser_2.py @@ -18,11 +18,11 @@ import asyncio import sys -from bumble.device import AdvertisingParameters, AdvertisingEventProperties, Device -from bumble.hci import Address -from bumble.core import AdvertisingData -from bumble.transport import open_transport import bumble.logging +from bumble.core import AdvertisingData +from bumble.device import AdvertisingEventProperties, AdvertisingParameters, Device +from bumble.hci import Address +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_gatt_client.py b/examples/run_gatt_client.py index 1d5e99f..c0af85b 100644 --- a/examples/run_gatt_client.py +++ b/examples/run_gatt_client.py @@ -17,14 +17,14 @@ # ----------------------------------------------------------------------------- import asyncio import sys -from bumble.colors import color +import bumble.logging +from bumble.colors import color from bumble.core import ProtocolError from bumble.device import Device, Peer from bumble.gatt import show_services from bumble.transport import open_transport from bumble.utils import AsyncRunner -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_gatt_client_and_server.py b/examples/run_gatt_client_and_server.py index 28ccd43..f14f891 100644 --- a/examples/run_gatt_client_and_server.py +++ b/examples/run_gatt_client_and_server.py @@ -17,23 +17,23 @@ # ----------------------------------------------------------------------------- import asyncio +import bumble.logging from bumble.colors import color -from bumble.core import ProtocolError from bumble.controller import Controller +from bumble.core import ProtocolError from bumble.device import Device, Peer +from bumble.gatt import ( + GATT_CHARACTERISTIC_USER_DESCRIPTION_DESCRIPTOR, + GATT_DEVICE_INFORMATION_SERVICE, + GATT_MANUFACTURER_NAME_STRING_CHARACTERISTIC, + Characteristic, + Descriptor, + Service, +) +from bumble.gatt_client import show_services from bumble.hci import Address from bumble.host import Host from bumble.link import LocalLink -from bumble.gatt import ( - Service, - Characteristic, - Descriptor, - GATT_CHARACTERISTIC_USER_DESCRIPTION_DESCRIPTOR, - GATT_MANUFACTURER_NAME_STRING_CHARACTERISTIC, - GATT_DEVICE_INFORMATION_SERVICE, -) -from bumble.gatt_client import show_services -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_gatt_server.py b/examples/run_gatt_server.py index a3ca1b5..fcb2ac8 100644 --- a/examples/run_gatt_server.py +++ b/examples/run_gatt_server.py @@ -18,19 +18,19 @@ import asyncio import sys -from bumble.device import Device, Connection -from bumble.transport import open_transport -from bumble.att import ATT_Error, ATT_INSUFFICIENT_ENCRYPTION_ERROR +import bumble.logging +from bumble.att import ATT_INSUFFICIENT_ENCRYPTION_ERROR, ATT_Error +from bumble.device import Connection, Device from bumble.gatt import ( - Service, + GATT_CHARACTERISTIC_USER_DESCRIPTION_DESCRIPTOR, + GATT_DEVICE_INFORMATION_SERVICE, + GATT_MANUFACTURER_NAME_STRING_CHARACTERISTIC, Characteristic, CharacteristicValue, Descriptor, - GATT_CHARACTERISTIC_USER_DESCRIPTION_DESCRIPTOR, - GATT_MANUFACTURER_NAME_STRING_CHARACTERISTIC, - GATT_DEVICE_INFORMATION_SERVICE, + Service, ) -import bumble.logging +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_gatt_server_with_pairing_delegate.py b/examples/run_gatt_server_with_pairing_delegate.py index bb3f40e..151baec 100644 --- a/examples/run_gatt_server_with_pairing_delegate.py +++ b/examples/run_gatt_server_with_pairing_delegate.py @@ -18,14 +18,11 @@ import asyncio import sys -from bumble.device import Device -from bumble.transport import open_transport -from bumble.gatt import ( - Service, - Characteristic, -) -from bumble.pairing import PairingConfig, PairingDelegate import bumble.logging +from bumble.device import Device +from bumble.gatt import Characteristic, Service +from bumble.pairing import PairingConfig, PairingDelegate +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_gatt_with_adapters.py b/examples/run_gatt_with_adapters.py index c950672..9ec636d 100644 --- a/examples/run_gatt_with_adapters.py +++ b/examples/run_gatt_with_adapters.py @@ -16,24 +16,19 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import dataclasses -import functools import enum +import functools import random import struct import sys from typing import Any, Union -from bumble.device import Device, Peer -from bumble import transport -from bumble import gatt -from bumble import gatt_adapters -from bumble import gatt_client -from bumble import hci -from bumble import core import bumble.logging - +from bumble import core, gatt, gatt_adapters, gatt_client, hci, transport +from bumble.device import Device, Peer # ----------------------------------------------------------------------------- SERVICE_UUID = core.UUID("50DB505C-8AC4-4738-8448-3B1D9CC09CC5") diff --git a/examples/run_hap_server.py b/examples/run_hap_server.py index 08d0579..c30ea14 100644 --- a/examples/run_hap_server.py +++ b/examples/run_hap_server.py @@ -18,21 +18,20 @@ import asyncio import sys +import bumble.logging from bumble.core import AdvertisingData from bumble.device import Device from bumble.profiles.hap import ( + DynamicPresets, HearingAccessService, HearingAidFeatures, HearingAidType, - PresetSynchronizationSupport, IndependentPresets, - DynamicPresets, - WritablePresetsSupport, PresetRecord, + PresetSynchronizationSupport, + WritablePresetsSupport, ) from bumble.transport import open_transport -import bumble.logging - server_features = HearingAidFeatures( HearingAidType.MONAURAL_HEARING_AID, diff --git a/examples/run_hfp_gateway.py b/examples/run_hfp_gateway.py index 4635e8c..f92013e 100644 --- a/examples/run_hfp_gateway.py +++ b/examples/run_hfp_gateway.py @@ -16,21 +16,20 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import json -import sys import io +import json import logging +import sys from typing import Iterable, Optional import websockets import bumble.core +import bumble.logging +from bumble import hci, hfp, rfcomm +from bumble.core import PhysicalTransport from bumble.device import Device, ScoLink from bumble.transport import open_transport -from bumble.core import PhysicalTransport -from bumble import hci, rfcomm, hfp -import bumble.logging - logger = logging.getLogger(__name__) diff --git a/examples/run_hfp_handsfree.py b/examples/run_hfp_handsfree.py index ddb2075..1093dfc 100644 --- a/examples/run_hfp_handsfree.py +++ b/examples/run_hfp_handsfree.py @@ -17,21 +17,18 @@ # ----------------------------------------------------------------------------- import asyncio import contextlib -import sys -import json import functools +import json +import sys from typing import Optional import websockets -from bumble import rfcomm -from bumble import hci -from bumble.device import Device, Connection -from bumble.transport import open_transport -from bumble import hfp -from bumble.hfp import HfProtocol import bumble.logging - +from bumble import hci, hfp, rfcomm +from bumble.device import Connection, Device +from bumble.hfp import HfProtocol +from bumble.transport import open_transport ws: Optional[websockets.WebSocketServerProtocol] = None hf_protocol: Optional[HfProtocol] = None diff --git a/examples/run_hid_device.py b/examples/run_hid_device.py index 91f5a11..a67a20a 100644 --- a/examples/run_hid_device.py +++ b/examples/run_hid_device.py @@ -16,40 +16,36 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import json import struct +import sys import websockets -from bumble.device import Device -from bumble.transport import open_transport +import bumble.logging from bumble.core import ( - PhysicalTransport, - BT_L2CAP_PROTOCOL_ID, - BT_HUMAN_INTERFACE_DEVICE_SERVICE, BT_HIDP_PROTOCOL_ID, + BT_HUMAN_INTERFACE_DEVICE_SERVICE, + BT_L2CAP_PROTOCOL_ID, + PhysicalTransport, ) -from bumble.hid import ( - Device as HID_Device, - HID_CONTROL_PSM, - HID_INTERRUPT_PSM, - Message, -) +from bumble.device import Device +from bumble.hid import HID_CONTROL_PSM, HID_INTERRUPT_PSM +from bumble.hid import Device as HID_Device +from bumble.hid import Message from bumble.sdp import ( + SDP_ADDITIONAL_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, + SDP_LANGUAGE_BASE_ATTRIBUTE_ID_LIST_ATTRIBUTE_ID, + SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_PUBLIC_BROWSE_ROOT, + SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, + SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, DataElement, ServiceAttribute, - SDP_PUBLIC_BROWSE_ROOT, - SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, - SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_LANGUAGE_BASE_ATTRIBUTE_ID_LIST_ATTRIBUTE_ID, - SDP_ADDITIONAL_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, - SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, ) -import bumble.logging - +from bumble.transport import open_transport # ----------------------------------------------------------------------------- # SDP attributes for Bluetooth HID devices diff --git a/examples/run_hid_host.py b/examples/run_hid_host.py index 9c8593f..2691c92 100644 --- a/examples/run_hid_host.py +++ b/examples/run_hid_host.py @@ -18,29 +18,26 @@ import asyncio import sys -from bumble.colors import color +from hid_report_parser import ReportParser +import bumble.logging +from bumble.colors import color +from bumble.core import BT_HUMAN_INTERFACE_DEVICE_SERVICE, PhysicalTransport from bumble.device import Device -from bumble.transport import open_transport -from bumble.core import ( - BT_HUMAN_INTERFACE_DEVICE_SERVICE, - PhysicalTransport, -) from bumble.hci import Address from bumble.hid import Host, Message from bumble.sdp import ( - Client as SDP_Client, + SDP_ADDITIONAL_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_ALL_ATTRIBUTES_RANGE, + SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, + SDP_LANGUAGE_BASE_ATTRIBUTE_ID_LIST_ATTRIBUTE_ID, SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, - SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, - SDP_ALL_ATTRIBUTES_RANGE, - SDP_LANGUAGE_BASE_ATTRIBUTE_ID_LIST_ATTRIBUTE_ID, - SDP_ADDITIONAL_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, - SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, ) -import bumble.logging -from hid_report_parser import ReportParser +from bumble.sdp import Client as SDP_Client +from bumble.transport import open_transport # ----------------------------------------------------------------------------- # SDP attributes for Bluetooth HID devices diff --git a/examples/run_mcp_client.py b/examples/run_mcp_client.py index cca063c..db72ca6 100644 --- a/examples/run_mcp_client.py +++ b/examples/run_mcp_client.py @@ -16,43 +16,39 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import json +import sys from typing import Optional import websockets +import bumble.logging from bumble.core import AdvertisingData from bumble.device import ( - Device, - AdvertisingParameters, AdvertisingEventProperties, + AdvertisingParameters, Connection, + Device, Peer, ) -from bumble.hci import ( - CodecID, - CodingFormat, - OwnAddressType, -) +from bumble.hci import CodecID, CodingFormat, OwnAddressType from bumble.profiles.ascs import AudioStreamControlService from bumble.profiles.bap import ( + AudioLocation, CodecSpecificCapabilities, ContextType, - AudioLocation, - SupportedSamplingFrequency, SupportedFrameDuration, + SupportedSamplingFrequency, UnicastServerAdvertisingData, ) from bumble.profiles.mcp import ( - MediaControlServiceProxy, GenericMediaControlServiceProxy, - MediaState, MediaControlPointOpcode, + MediaControlServiceProxy, + MediaState, ) from bumble.profiles.pacs import PacRecord, PublishedAudioCapabilitiesService from bumble.transport import open_transport -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_notifier.py b/examples/run_notifier.py index 75da438..ef79257 100644 --- a/examples/run_notifier.py +++ b/examples/run_notifier.py @@ -16,13 +16,13 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys import random +import sys -from bumble.device import Device, Connection -from bumble.transport import open_transport -from bumble.gatt import Service, Characteristic import bumble.logging +from bumble.device import Connection, Device +from bumble.gatt import Characteristic, Service +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_rfcomm_client.py b/examples/run_rfcomm_client.py index 97d43d6..153d868 100644 --- a/examples/run_rfcomm_client.py +++ b/examples/run_rfcomm_client.py @@ -18,26 +18,20 @@ import asyncio import sys -from bumble.colors import color - import bumble.core +import bumble.logging +from bumble.colors import color +from bumble.core import BT_L2CAP_PROTOCOL_ID, BT_RFCOMM_PROTOCOL_ID, PhysicalTransport from bumble.device import Device -from bumble.transport import open_transport -from bumble.core import ( - BT_L2CAP_PROTOCOL_ID, - BT_RFCOMM_PROTOCOL_ID, - PhysicalTransport, -) from bumble.rfcomm import Client from bumble.sdp import ( - Client as SDP_Client, - DataElement, - ServiceAttribute, + SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, - SDP_BLUETOOTH_PROFILE_DESCRIPTOR_LIST_ATTRIBUTE_ID, ) -import bumble.logging +from bumble.sdp import Client as SDP_Client +from bumble.sdp import DataElement, ServiceAttribute +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_rfcomm_server.py b/examples/run_rfcomm_server.py index 9d23841..94a5a2f 100644 --- a/examples/run_rfcomm_server.py +++ b/examples/run_rfcomm_server.py @@ -18,13 +18,12 @@ import asyncio import sys +import bumble.logging from bumble.core import UUID from bumble.device import Device +from bumble.rfcomm import Server, make_service_sdp_records from bumble.transport import open_transport -from bumble.rfcomm import Server from bumble.utils import AsyncRunner -from bumble.rfcomm import make_service_sdp_records -import bumble.logging # ----------------------------------------------------------------------------- diff --git a/examples/run_scanner.py b/examples/run_scanner.py index 4061b6f..6bb7e78 100644 --- a/examples/run_scanner.py +++ b/examples/run_scanner.py @@ -17,11 +17,12 @@ # ----------------------------------------------------------------------------- import asyncio import sys -from bumble.colors import color -from bumble.hci import Address -from bumble.device import Device -from bumble.transport import open_transport + from bumble import logging +from bumble.colors import color +from bumble.device import Device +from bumble.hci import Address +from bumble.transport import open_transport # ----------------------------------------------------------------------------- diff --git a/examples/run_unicast_server.py b/examples/run_unicast_server.py index 336a922..fb2c6a0 100644 --- a/examples/run_unicast_server.py +++ b/examples/run_unicast_server.py @@ -18,33 +18,29 @@ import asyncio import datetime import functools -import sys import io -import struct import secrets +import struct +import sys +import bumble.logging from bumble.core import AdvertisingData from bumble.device import Device -from bumble.hci import ( - CodecID, - CodingFormat, - HCI_IsoDataPacket, -) +from bumble.hci import CodecID, CodingFormat, HCI_IsoDataPacket from bumble.profiles.ascs import AseStateMachine, AudioStreamControlService from bumble.profiles.bap import ( - UnicastServerAdvertisingData, - CodecSpecificConfiguration, - CodecSpecificCapabilities, - ContextType, AudioLocation, - SupportedSamplingFrequency, + CodecSpecificCapabilities, + CodecSpecificConfiguration, + ContextType, SupportedFrameDuration, + SupportedSamplingFrequency, + UnicastServerAdvertisingData, ) from bumble.profiles.cap import CommonAudioServiceService from bumble.profiles.csip import CoordinatedSetIdentificationService, SirkType from bumble.profiles.pacs import PacRecord, PublishedAudioCapabilitiesService from bumble.transport import open_transport -import bumble.logging def _sink_pac_record() -> PacRecord: diff --git a/examples/run_vcp_renderer.py b/examples/run_vcp_renderer.py index b93e668..c2b52ac 100644 --- a/examples/run_vcp_renderer.py +++ b/examples/run_vcp_renderer.py @@ -16,35 +16,31 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import sys -import secrets import json +import secrets +import sys from typing import Optional import websockets +import bumble.logging from bumble.core import AdvertisingData -from bumble.device import Device, AdvertisingParameters, AdvertisingEventProperties -from bumble.hci import ( - CodecID, - CodingFormat, - OwnAddressType, -) +from bumble.device import AdvertisingEventProperties, AdvertisingParameters, Device +from bumble.hci import CodecID, CodingFormat, OwnAddressType from bumble.profiles.ascs import AudioStreamControlService from bumble.profiles.bap import ( - UnicastServerAdvertisingData, + AudioLocation, CodecSpecificCapabilities, ContextType, - AudioLocation, - SupportedSamplingFrequency, SupportedFrameDuration, + SupportedSamplingFrequency, + UnicastServerAdvertisingData, ) -from bumble.profiles.pacs import PacRecord, PublishedAudioCapabilitiesService from bumble.profiles.cap import CommonAudioServiceService from bumble.profiles.csip import CoordinatedSetIdentificationService, SirkType +from bumble.profiles.pacs import PacRecord, PublishedAudioCapabilitiesService from bumble.profiles.vcs import VolumeControlService from bumble.transport import open_transport -import bumble.logging def dumps_volume_state(volume_setting: int, muted: int, change_counter: int) -> str: diff --git a/pyproject.toml b/pyproject.toml index 1507e41..184ccf0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ development = [ "bt-test-interfaces >= 0.0.6", "grpcio-tools >= 1.62.1", "invoke >= 1.7.3", + "isort ~= 5.13.2", "mobly >= 1.12.2", "mypy == 1.12.0", "nox >= 2022", @@ -203,3 +204,7 @@ ignore_missing_imports = true [[tool.mypy.overrides]] module = "usb1.*" ignore_missing_imports = true + +[tool.isort] +profile = "black" +skip = ["_version.py", "grpc_protobuf"] diff --git a/tasks.py b/tasks.py index add87ce..0b49859 100644 --- a/tasks.py +++ b/tasks.py @@ -16,16 +16,17 @@ Invoke tasks """ +import glob + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import os -import glob import shutil from pathlib import Path -from invoke import task, call, Collection -from invoke.exceptions import Exit, UnexpectedExit +from invoke import Collection, call, task +from invoke.exceptions import Exit, UnexpectedExit # ----------------------------------------------------------------------------- ROOT_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -136,12 +137,20 @@ def lint(ctx, disable='C,R', errors_only=False): # ----------------------------------------------------------------------------- @task def format_code(ctx, check=False, diff=False): + options = [] if check: options.append("--check") if diff: options.append("--diff") + print(">>> Sorting imports...") + try: + ctx.run(f"isort {' '.join(options)} .") + except UnexpectedExit as exc: + print("Please run 'invoke project.format' or 'isort .' to format the code. ❌") + raise Exit(code=1) from exc + print(">>> Running the formatter...") try: ctx.run(f"black -S {' '.join(options)} .") diff --git a/tests/a2dp_test.py b/tests/a2dp_test.py index f790c51..6ed92f0 100644 --- a/tests/a2dp_test.py +++ b/tests/a2dp_test.py @@ -18,31 +18,32 @@ import asyncio import logging import os + import pytest -from bumble.controller import Controller -from bumble.core import PhysicalTransport -from bumble.link import LocalLink -from bumble.device import Device -from bumble.host import Host -from bumble.transport.common import AsyncPipeSink -from bumble.avdtp import ( - AVDTP_IDLE_STATE, - AVDTP_STREAMING_STATE, - MediaPacketPump, - Protocol, - Listener, - MediaCodecCapabilities, - AVDTP_AUDIO_MEDIA_TYPE, - AVDTP_TSEP_SNK, - A2DP_SBC_CODEC_TYPE, -) from bumble.a2dp import ( AacMediaCodecInformation, OpusMediaCodecInformation, SbcMediaCodecInformation, ) +from bumble.avdtp import ( + A2DP_SBC_CODEC_TYPE, + AVDTP_AUDIO_MEDIA_TYPE, + AVDTP_IDLE_STATE, + AVDTP_STREAMING_STATE, + AVDTP_TSEP_SNK, + Listener, + MediaCodecCapabilities, + MediaPacketPump, + Protocol, +) +from bumble.controller import Controller +from bumble.core import PhysicalTransport +from bumble.device import Device +from bumble.host import Host +from bumble.link import LocalLink from bumble.rtp import MediaPacket +from bumble.transport.common import AsyncPipeSink # ----------------------------------------------------------------------------- # Logging diff --git a/tests/aics_test.py b/tests/aics_test.py index b044c39..4d0cdf2 100644 --- a/tests/aics_test.py +++ b/tests/aics_test.py @@ -19,25 +19,22 @@ import pytest import pytest_asyncio from bumble import device - from bumble.att import ATT_Error - from bumble.profiles.aics import ( - Mute, AICSService, - AudioInputState, AICSServiceProxy, + AudioInputControlPointOpCode, + AudioInputState, + AudioInputStatus, + ErrorCode, GainMode, GainSettingsProperties, - AudioInputStatus, - AudioInputControlPointOpCode, - ErrorCode, + Mute, ) from bumble.profiles.vcs import VolumeControlService, VolumeControlServiceProxy from .test_utils import TwoDevices - # ----------------------------------------------------------------------------- # Tests # ----------------------------------------------------------------------------- diff --git a/tests/asha_test.py b/tests/asha_test.py index 269e4a8..97e7e39 100644 --- a/tests/asha_test.py +++ b/tests/asha_test.py @@ -13,10 +13,11 @@ # limitations under the License. import asyncio -import pytest import struct from unittest import mock +import pytest + from bumble import device as bumble_device from bumble.profiles import asha diff --git a/tests/avdtp_test.py b/tests/avdtp_test.py index 09c4d86..983ea62 100644 --- a/tests/avdtp_test.py +++ b/tests/avdtp_test.py @@ -22,11 +22,11 @@ from bumble.avdtp import ( AVDTP_GET_CAPABILITIES, AVDTP_MEDIA_TRANSPORT_SERVICE_CATEGORY, AVDTP_SET_CONFIGURATION, - Message, Get_Capabilities_Response, - Set_Configuration_Command, - ServiceCapabilities, MediaCodecCapabilities, + Message, + ServiceCapabilities, + Set_Configuration_Command, ) from bumble.rtp import MediaPacket diff --git a/tests/avrcp_test.py b/tests/avrcp_test.py index 71955ea..dfc0bb3 100644 --- a/tests/avrcp_test.py +++ b/tests/avrcp_test.py @@ -20,14 +20,7 @@ import struct import pytest -from bumble import core -from bumble import device -from bumble import host -from bumble import controller -from bumble import link -from bumble import avc -from bumble import avrcp -from bumble import avctp +from bumble import avc, avctp, avrcp, controller, core, device, host, link from bumble.transport import common diff --git a/tests/bap_test.py b/tests/bap_test.py index 84cf8a1..2e78102 100644 --- a/tests/bap_test.py +++ b/tests/bap_test.py @@ -17,46 +17,46 @@ # ----------------------------------------------------------------------------- import asyncio import functools -import pytest import logging +import pytest + from bumble import device from bumble.hci import CodecID, CodingFormat from bumble.profiles.ascs import ( - AudioStreamControlService, - AudioStreamControlServiceProxy, - AseStateMachine, - ASE_Operation, ASE_Config_Codec, ASE_Config_QOS, ASE_Disable, ASE_Enable, + ASE_Operation, ASE_Receiver_Start_Ready, ASE_Receiver_Stop_Ready, ASE_Release, ASE_Update_Metadata, + AseStateMachine, + AudioStreamControlService, + AudioStreamControlServiceProxy, ) from bumble.profiles.bap import ( AudioLocation, BasicAudioAnnouncement, BroadcastAudioAnnouncement, - SupportedFrameDuration, - SupportedSamplingFrequency, - SamplingFrequency, - FrameDuration, CodecSpecificCapabilities, CodecSpecificConfiguration, ContextType, + FrameDuration, + SamplingFrequency, + SupportedFrameDuration, + SupportedSamplingFrequency, ) +from bumble.profiles.le_audio import Metadata from bumble.profiles.pacs import ( PacRecord, PublishedAudioCapabilitiesService, PublishedAudioCapabilitiesServiceProxy, ) -from bumble.profiles.le_audio import Metadata from tests.test_utils import TwoDevices, async_barrier - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/tests/bass_test.py b/tests/bass_test.py index b893555..4af9792 100644 --- a/tests/bass_test.py +++ b/tests/bass_test.py @@ -16,13 +16,12 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import os import logging +import os from bumble import hci from bumble.profiles import bass - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/tests/cap_test.py b/tests/cap_test.py index ab5ab81..9676eda 100644 --- a/tests/cap_test.py +++ b/tests/cap_test.py @@ -16,14 +16,14 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import os -import pytest import logging +import os + +import pytest + +from bumble import device, gatt +from bumble.profiles import cap, csip -from bumble import device -from bumble import gatt -from bumble.profiles import cap -from bumble.profiles import csip from .test_utils import TwoDevices # ----------------------------------------------------------------------------- diff --git a/tests/codecs_test.py b/tests/codecs_test.py index 2a44e1e..9d17bbb 100644 --- a/tests/codecs_test.py +++ b/tests/codecs_test.py @@ -16,7 +16,9 @@ # Imports # ----------------------------------------------------------------------------- import random + import pytest + from bumble.codecs import AacAudioRtpPacket, BitReader, BitWriter diff --git a/tests/core_test.py b/tests/core_test.py index a8e94e6..a77be12 100644 --- a/tests/core_test.py +++ b/tests/core_test.py @@ -16,7 +16,7 @@ # Imports # ----------------------------------------------------------------------------- -from bumble.core import AdvertisingData, Appearance, UUID, get_dict_key_by_value +from bumble.core import UUID, AdvertisingData, Appearance, get_dict_key_by_value # ----------------------------------------------------------------------------- diff --git a/tests/csip_test.py b/tests/csip_test.py index b34c426..497c670 100644 --- a/tests/csip_test.py +++ b/tests/csip_test.py @@ -16,14 +16,16 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import os -import pytest -import struct import logging +import os +import struct from unittest import mock +import pytest + from bumble import device from bumble.profiles import csip + from .test_utils import TwoDevices # ----------------------------------------------------------------------------- diff --git a/tests/decoder_test.py b/tests/decoder_test.py index 3be2c63..ff03e62 100644 --- a/tests/decoder_test.py +++ b/tests/decoder_test.py @@ -17,6 +17,7 @@ # ----------------------------------------------------------------------------- import hashlib import os + from bumble.decoder import G722Decoder diff --git a/tests/device_test.py b/tests/device_test.py index 2522bfe..c7b7baf 100644 --- a/tests/device_test.py +++ b/tests/device_test.py @@ -20,12 +20,11 @@ import functools import logging import os from unittest import mock + import pytest -from bumble.core import ( - PhysicalTransport, - ConnectionParameters, -) +from bumble import device, gatt, hci, utils +from bumble.core import ConnectionParameters, PhysicalTransport from bumble.device import ( AdvertisingEventProperties, AdvertisingParameters, @@ -35,27 +34,23 @@ from bumble.device import ( Device, PeriodicAdvertisingParameters, ) -from bumble.host import DataPacketQueue, Host -from bumble import device -from bumble import hci from bumble.hci import ( HCI_ACCEPT_CONNECTION_REQUEST_COMMAND, HCI_COMMAND_STATUS_PENDING, + HCI_CONNECTION_FAILED_TO_BE_ESTABLISHED_ERROR, HCI_CREATE_CONNECTION_COMMAND, HCI_SUCCESS, - HCI_CONNECTION_FAILED_TO_BE_ESTABLISHED_ERROR, Address, - OwnAddressType, - Role, HCI_Command_Complete_Event, HCI_Command_Status_Event, HCI_Connection_Complete_Event, HCI_Connection_Request_Event, HCI_Error, HCI_Packet, + OwnAddressType, + Role, ) -from bumble import utils -from bumble import gatt +from bumble.host import DataPacketQueue, Host from .test_utils import TwoDevices, async_barrier diff --git a/tests/gatt_service_test.py b/tests/gatt_service_test.py index d8e4477..90b5c91 100644 --- a/tests/gatt_service_test.py +++ b/tests/gatt_service_test.py @@ -16,14 +16,14 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import pytest -from . import test_utils - -from bumble import device -from bumble import gatt +from bumble import device, gatt from bumble.profiles import gatt_service +from . import test_utils + # ----------------------------------------------------------------------------- @pytest.mark.asyncio diff --git a/tests/gatt_test.py b/tests/gatt_test.py index 55c6c6d..49c0f75 100644 --- a/tests/gatt_test.py +++ b/tests/gatt_test.py @@ -16,56 +16,59 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import asyncio import enum import logging import os import struct -import pytest from typing import Any -from typing_extensions import Self -from unittest.mock import AsyncMock, Mock, ANY +from unittest.mock import ANY, AsyncMock, Mock + +import pytest +from typing_extensions import Self -from bumble.controller import Controller -from bumble.link import LocalLink -from bumble.device import Device, Peer -from bumble.host import Host -from bumble.gatt import ( - GATT_BATTERY_LEVEL_CHARACTERISTIC, - GATT_CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR, - Service, - Characteristic, - CharacteristicValue, - Descriptor, -) -from bumble.gatt_client import CharacteristicProxy -from bumble.gatt_adapters import ( - CharacteristicProxyAdapter, - SerializableCharacteristicAdapter, - SerializableCharacteristicProxyAdapter, - DelegatedCharacteristicAdapter, - DelegatedCharacteristicProxyAdapter, - PackedCharacteristicAdapter, - PackedCharacteristicProxyAdapter, - MappedCharacteristicAdapter, - MappedCharacteristicProxyAdapter, - UTF8CharacteristicAdapter, - UTF8CharacteristicProxyAdapter, - EnumCharacteristicAdapter, - EnumCharacteristicProxyAdapter, -) -from bumble.transport.common import AsyncPipeSink -from bumble.core import UUID from bumble.att import ( - Attribute, - Opcode, ATT_ATTRIBUTE_NOT_FOUND_ERROR, ATT_PDU, ATT_Error, ATT_Error_Response, ATT_Read_By_Group_Type_Request, + Attribute, ErrorCode, + Opcode, ) +from bumble.controller import Controller +from bumble.core import UUID +from bumble.device import Device, Peer +from bumble.gatt import ( + GATT_BATTERY_LEVEL_CHARACTERISTIC, + GATT_CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR, + Characteristic, + CharacteristicValue, + Descriptor, + Service, +) +from bumble.gatt_adapters import ( + CharacteristicProxyAdapter, + DelegatedCharacteristicAdapter, + DelegatedCharacteristicProxyAdapter, + EnumCharacteristicAdapter, + EnumCharacteristicProxyAdapter, + MappedCharacteristicAdapter, + MappedCharacteristicProxyAdapter, + PackedCharacteristicAdapter, + PackedCharacteristicProxyAdapter, + SerializableCharacteristicAdapter, + SerializableCharacteristicProxyAdapter, + UTF8CharacteristicAdapter, + UTF8CharacteristicProxyAdapter, +) +from bumble.gatt_client import CharacteristicProxy +from bumble.host import Host +from bumble.link import LocalLink +from bumble.transport.common import AsyncPipeSink + from .test_utils import async_barrier diff --git a/tests/gmap_test.py b/tests/gmap_test.py index 9901267..cf1f9d3 100644 --- a/tests/gmap_test.py +++ b/tests/gmap_test.py @@ -21,13 +21,13 @@ import pytest_asyncio from bumble import device from bumble.profiles.gmap import ( + BgrFeatures, + BgsFeatures, GamingAudioService, GamingAudioServiceProxy, GmapRole, UggFeatures, UgtFeatures, - BgrFeatures, - BgsFeatures, ) from .test_utils import TwoDevices diff --git a/tests/hap_test.py b/tests/hap_test.py index 15b2cfe..e72f995 100644 --- a/tests/hap_test.py +++ b/tests/hap_test.py @@ -16,15 +16,17 @@ # Imports # ----------------------------------------------------------------------------- import asyncio -import pytest -import pytest_asyncio import logging import sys +import pytest +import pytest_asyncio + from bumble import att, device -from bumble.profiles import hap -from .test_utils import TwoDevices from bumble.keys import PairingKeys +from bumble.profiles import hap + +from .test_utils import TwoDevices # ----------------------------------------------------------------------------- # Logging diff --git a/tests/hci_test.py b/tests/hci_test.py index 4531588..b21e33c 100644 --- a/tests/hci_test.py +++ b/tests/hci_test.py @@ -22,7 +22,6 @@ import pytest from bumble import hci - # ----------------------------------------------------------------------------- # pylint: disable=invalid-name diff --git a/tests/hfp_test.py b/tests/hfp_test.py index f2d3515..1282cea 100644 --- a/tests/hfp_test.py +++ b/tests/hfp_test.py @@ -18,17 +18,14 @@ import asyncio import logging import os +from typing import Optional + import pytest import pytest_asyncio -from typing import Optional +from bumble import core, hci, hfp, rfcomm from .test_utils import TwoDevices -from bumble import core -from bumble import hfp -from bumble import rfcomm -from bumble import hci - # ----------------------------------------------------------------------------- # Logging diff --git a/tests/host_test.py b/tests/host_test.py index 1f92a76..1665f93 100644 --- a/tests/host_test.py +++ b/tests/host_test.py @@ -16,14 +16,15 @@ # Imports # ----------------------------------------------------------------------------- import logging -import unittest.mock -import pytest import unittest +import unittest.mock + +import pytest from bumble.controller import Controller -from bumble.host import Host, DataPacketQueue -from bumble.transport.common import AsyncPipeSink from bumble.hci import HCI_AclDataPacket +from bumble.host import DataPacketQueue, Host +from bumble.transport.common import AsyncPipeSink # ----------------------------------------------------------------------------- # Logging diff --git a/tests/import_test.py b/tests/import_test.py index b868c0d..ffd40e7 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -39,7 +39,6 @@ def test_import(): transport, utils, ) - from bumble.profiles import ( ascs, bap, diff --git a/tests/keystore_test.py b/tests/keystore_test.py index 34a2cb2..35bb419 100644 --- a/tests/keystore_test.py +++ b/tests/keystore_test.py @@ -18,14 +18,14 @@ import asyncio import json import logging -import pathlib -import pytest -import tempfile import os +import pathlib +import tempfile + +import pytest from bumble.keys import JsonKeyStore, PairingKeys - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/tests/l2cap_test.py b/tests/l2cap_test.py index 85ebcdc..cbeb874 100644 --- a/tests/l2cap_test.py +++ b/tests/l2cap_test.py @@ -19,12 +19,13 @@ import asyncio import logging import os import random + import pytest -from bumble.core import ProtocolError from bumble import l2cap -from .test_utils import TwoDevices, async_barrier +from bumble.core import ProtocolError +from .test_utils import TwoDevices, async_barrier # ----------------------------------------------------------------------------- # Logging diff --git a/tests/mcp_test.py b/tests/mcp_test.py index c063536..6158c3d 100644 --- a/tests/mcp_test.py +++ b/tests/mcp_test.py @@ -17,16 +17,16 @@ # ----------------------------------------------------------------------------- import asyncio import dataclasses +import logging +import struct + import pytest import pytest_asyncio -import struct -import logging from bumble import device from bumble.profiles import mcp from tests.test_utils import TwoDevices - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/tests/rfcomm_test.py b/tests/rfcomm_test.py index 959aae9..b9b5264 100644 --- a/tests/rfcomm_test.py +++ b/tests/rfcomm_test.py @@ -16,21 +16,23 @@ # Imports # ----------------------------------------------------------------------------- import asyncio + import pytest -from . import test_utils from bumble import core from bumble.rfcomm import ( + DLC, + RFCOMM_PSM, + Client, RFCOMM_Frame, Server, - Client, - DLC, - make_service_sdp_records, - find_rfcomm_channels, find_rfcomm_channel_with_uuid, - RFCOMM_PSM, + find_rfcomm_channels, + make_service_sdp_records, ) +from . import test_utils + _TIMEOUT = 0.1 diff --git a/tests/sdp_test.py b/tests/sdp_test.py index 26d9d38..8fa58f3 100644 --- a/tests/sdp_test.py +++ b/tests/sdp_test.py @@ -18,19 +18,21 @@ import asyncio import logging import os + import pytest -from bumble.core import UUID, BT_L2CAP_PROTOCOL_ID +from bumble.core import BT_L2CAP_PROTOCOL_ID, UUID from bumble.sdp import ( - DataElement, - ServiceAttribute, - Client, - SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, SDP_BROWSE_GROUP_LIST_ATTRIBUTE_ID, + SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, SDP_PUBLIC_BROWSE_ROOT, SDP_SERVICE_CLASS_ID_LIST_ATTRIBUTE_ID, - SDP_PROTOCOL_DESCRIPTOR_LIST_ATTRIBUTE_ID, + SDP_SERVICE_RECORD_HANDLE_ATTRIBUTE_ID, + Client, + DataElement, + ServiceAttribute, ) + from .test_utils import TwoDevices # ----------------------------------------------------------------------------- diff --git a/tests/self_test.py b/tests/self_test.py index 4467299..c431c59 100644 --- a/tests/self_test.py +++ b/tests/self_test.py @@ -19,26 +19,24 @@ import asyncio import itertools import logging import os -import pytest - from unittest.mock import AsyncMock, MagicMock, patch -from bumble.core import PhysicalTransport +import pytest + +from bumble.core import PhysicalTransport, ProtocolError from bumble.device import Peer -from bumble.gatt import Service, Characteristic +from bumble.gatt import Characteristic, Service +from bumble.hci import Role from bumble.pairing import PairingConfig, PairingDelegate from bumble.smp import ( - SMP_PAIRING_NOT_SUPPORTED_ERROR, SMP_CONFIRM_VALUE_FAILED_ERROR, + SMP_PAIRING_NOT_SUPPORTED_ERROR, OobContext, OobLegacyContext, ) -from bumble.core import ProtocolError -from bumble.hci import Role from .test_utils import TwoDevices - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/tests/smp_test.py b/tests/smp_test.py index 89b6c88..90df809 100644 --- a/tests/smp_test.py +++ b/tests/smp_test.py @@ -16,19 +16,17 @@ # Imports # ----------------------------------------------------------------------------- -import pytest +from typing import Any, Optional from unittest import mock -from bumble import smp -from bumble import pairing -from bumble import crypto -from bumble.crypto import EccKey, aes_cmac, ah, c1, f4, f5, f6, g2, h6, h7, s1 -from bumble.pairing import OobData, OobSharedData, LeRole -from bumble.hci import Address -from bumble.core import AdvertisingData -from bumble.device import Device +import pytest -from typing import Optional, Any +from bumble import crypto, pairing, smp +from bumble.core import AdvertisingData +from bumble.crypto import EccKey, aes_cmac, ah, c1, f4, f5, f6, g2, h6, h7, s1 +from bumble.device import Device +from bumble.hci import Address +from bumble.pairing import LeRole, OobData, OobSharedData # ----------------------------------------------------------------------------- diff --git a/tests/test_utils.py b/tests/test_utils.py index be40ecb..b34263e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -17,15 +17,16 @@ # ----------------------------------------------------------------------------- import asyncio from typing import Optional + from typing_extensions import Self from bumble.controller import Controller -from bumble.link import LocalLink -from bumble.device import Device, Connection -from bumble.host import Host -from bumble.transport.common import AsyncPipeSink +from bumble.device import Connection, Device from bumble.hci import Address +from bumble.host import Host from bumble.keys import PairingKeys +from bumble.link import LocalLink +from bumble.transport.common import AsyncPipeSink # ----------------------------------------------------------------------------- diff --git a/tests/transport_tcp_server_test.py b/tests/transport_tcp_server_test.py index ff6ff27..00ef8d6 100644 --- a/tests/transport_tcp_server_test.py +++ b/tests/transport_tcp_server_test.py @@ -14,10 +14,11 @@ import asyncio import os -import pytest import socket from unittest import mock +import pytest + from bumble.transport.tcp_server import ( open_tcp_server_transport, open_tcp_server_transport_with_socket, diff --git a/tests/transport_test.py b/tests/transport_test.py index b2b09f7..d8e1087 100644 --- a/tests/transport_test.py +++ b/tests/transport_test.py @@ -12,21 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import random -import os import socket import sys import pytest -from bumble import controller -from bumble import device -from bumble import hci -from bumble import link -from bumble import transport +from bumble import controller, device, hci, link, transport from bumble.transport.common import PacketParser diff --git a/tests/vcp_test.py b/tests/vcp_test.py index 4876cb6..59e6430 100644 --- a/tests/vcp_test.py +++ b/tests/vcp_test.py @@ -12,15 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import pytest import pytest_asyncio -import logging from bumble import device from bumble.profiles import vcs + from .test_utils import TwoDevices # ----------------------------------------------------------------------------- diff --git a/tests/vocs_test.py b/tests/vocs_test.py index 599fc6d..84ca0dd 100644 --- a/tests/vocs_test.py +++ b/tests/vocs_test.py @@ -13,32 +13,30 @@ # limitations under the License. +import struct + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import pytest import pytest_asyncio -import struct from bumble import device - from bumble.att import ATT_Error - +from bumble.profiles.bap import AudioLocation +from bumble.profiles.vcs import VolumeControlService, VolumeControlServiceProxy from bumble.profiles.vocs import ( - VolumeOffsetControlService, - ErrorCode, - MIN_VOLUME_OFFSET, MAX_VOLUME_OFFSET, + MIN_VOLUME_OFFSET, + ErrorCode, SetVolumeOffsetOpCode, + VolumeOffsetControlService, VolumeOffsetControlServiceProxy, VolumeOffsetState, ) -from bumble.profiles.vcs import VolumeControlService, VolumeControlServiceProxy -from bumble.profiles.bap import AudioLocation from .test_utils import TwoDevices - # ----------------------------------------------------------------------------- # Tests # ----------------------------------------------------------------------------- diff --git a/tools/generate_company_id_list.py b/tools/generate_company_id_list.py index d79a6d8..c4f96ad 100644 --- a/tools/generate_company_id_list.py +++ b/tools/generate_company_id_list.py @@ -23,6 +23,7 @@ # Imports # ----------------------------------------------------------------------------- import sys + import yaml # ----------------------------------------------------------------------------- diff --git a/tools/intel_fw_download.py b/tools/intel_fw_download.py index 675b4fa..1bcd133 100644 --- a/tools/intel_fw_download.py +++ b/tools/intel_fw_download.py @@ -17,15 +17,14 @@ # ----------------------------------------------------------------------------- import logging import pathlib -import urllib.request import urllib.error +import urllib.request import click from bumble.colors import color from bumble.drivers import intel - # ----------------------------------------------------------------------------- # Logging # ----------------------------------------------------------------------------- diff --git a/tools/intel_util.py b/tools/intel_util.py index 8307d4e..3d77987 100644 --- a/tools/intel_util.py +++ b/tools/intel_util.py @@ -12,21 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio + # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import logging -import asyncio from typing import Any, Optional import click -from bumble.colors import color +import bumble.logging from bumble import transport +from bumble.colors import color from bumble.drivers import intel from bumble.host import Host -import bumble.logging - # ----------------------------------------------------------------------------- # Logging diff --git a/tools/rtk_fw_download.py b/tools/rtk_fw_download.py index 3621cd8..4d99498 100644 --- a/tools/rtk_fw_download.py +++ b/tools/rtk_fw_download.py @@ -17,16 +17,15 @@ # ----------------------------------------------------------------------------- import logging import pathlib -import urllib.request import urllib.error +import urllib.request import click +import bumble.logging from bumble.colors import color from bumble.drivers import rtk from bumble.tools import rtk_util -import bumble.logging - # ----------------------------------------------------------------------------- # Logging diff --git a/tools/rtk_util.py b/tools/rtk_util.py index 04595b5..a9043f3 100644 --- a/tools/rtk_util.py +++ b/tools/rtk_util.py @@ -20,11 +20,10 @@ import logging import click -from bumble import company_ids, hci, transport -from bumble.host import Host -from bumble.drivers import rtk import bumble.logging - +from bumble import company_ids, hci, transport +from bumble.drivers import rtk +from bumble.host import Host # ----------------------------------------------------------------------------- # Logging diff --git a/web/speaker/speaker.py b/web/speaker/speaker.py index 8cffe25..b020a05 100644 --- a/web/speaker/speaker.py +++ b/web/speaker/speaker.py @@ -16,30 +16,30 @@ # Imports # ----------------------------------------------------------------------------- from __future__ import annotations + import enum import logging -from bumble.core import PhysicalTransport, CommandTimeoutError -from bumble.device import Device, DeviceConfiguration -from bumble.pairing import PairingConfig -from bumble.sdp import ServiceAttribute +from bumble.a2dp import ( + A2DP_MPEG_2_4_AAC_CODEC_TYPE, + A2DP_SBC_CODEC_TYPE, + AacMediaCodecInformation, + SbcMediaCodecInformation, + make_audio_sink_service_sdp_records, +) from bumble.avdtp import ( AVDTP_AUDIO_MEDIA_TYPE, Listener, MediaCodecCapabilities, Protocol, ) -from bumble.a2dp import ( - make_audio_sink_service_sdp_records, - A2DP_SBC_CODEC_TYPE, - A2DP_MPEG_2_4_AAC_CODEC_TYPE, - SbcMediaCodecInformation, - AacMediaCodecInformation, -) from bumble.codecs import AacAudioRtpPacket +from bumble.core import CommandTimeoutError, PhysicalTransport +from bumble.device import Device, DeviceConfiguration from bumble.hci import HCI_Reset_Command +from bumble.pairing import PairingConfig from bumble.rtp import MediaPacket - +from bumble.sdp import ServiceAttribute # ----------------------------------------------------------------------------- # Logging