From 280e23d825455d4ecb7559b1805ff9ef0f4556be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=BC=9F?= Date: Mon, 16 Mar 2026 13:54:22 +0800 Subject: [PATCH 1/2] Make documented client re-exports explicit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈伟 --- src/paho/mqtt/client.py | 20 ++++++++++++++++---- tests/test_client.py | 6 ++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/paho/mqtt/client.py b/src/paho/mqtt/client.py index 4ccc8696..a77e3e96 100644 --- a/src/paho/mqtt/client.py +++ b/src/paho/mqtt/client.py @@ -39,11 +39,23 @@ from paho.mqtt.packettypes import PacketTypes -from .enums import CallbackAPIVersion, ConnackCode, LogLevel, MessageState, MessageType, MQTTErrorCode, MQTTProtocolVersion, PahoClientMode, _ConnectionState +# Re-export public enums and helper types explicitly so static type checkers +# treat the documented ``paho.mqtt.client`` module surface as exported API. +from .enums import ( + CallbackAPIVersion as CallbackAPIVersion, + ConnackCode as ConnackCode, + LogLevel as LogLevel, + MessageState as MessageState, + MessageType as MessageType, + MQTTErrorCode as MQTTErrorCode, + MQTTProtocolVersion as MQTTProtocolVersion, + PahoClientMode as PahoClientMode, + _ConnectionState, +) from .matcher import MQTTMatcher -from .properties import Properties -from .reasoncodes import ReasonCode, ReasonCodes -from .subscribeoptions import SubscribeOptions +from .properties import Properties as Properties +from .reasoncodes import ReasonCode as ReasonCode, ReasonCodes as ReasonCodes +from .subscribeoptions import SubscribeOptions as SubscribeOptions try: from typing import Literal diff --git a/tests/test_client.py b/tests/test_client.py index 09e46066..e6cb6762 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -15,6 +15,12 @@ from tests.testsupport.broker import FakeBroker, fake_broker # noqa: F401 +def test_documented_public_reexports() -> None: + assert client.CallbackAPIVersion is CallbackAPIVersion + assert client.Properties is Properties + assert client.ReasonCode is ReasonCode + + @pytest.mark.parametrize("proto_ver,callback_version", [ (MQTTProtocolVersion.MQTTv31, CallbackAPIVersion.VERSION1), (MQTTProtocolVersion.MQTTv31, CallbackAPIVersion.VERSION2), From ef7a5772e09ada29b9df79e6276295980a586a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=BC=9F?= Date: Thu, 19 Mar 2026 11:56:38 +0800 Subject: [PATCH 2/2] "Expand_public_reexport_regression_test" --- tests/test_client.py | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/tests/test_client.py b/tests/test_client.py index e6cb6762..2bccfe00 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -4,10 +4,20 @@ import paho.mqtt.client as client import pytest -from paho.mqtt.enums import CallbackAPIVersion, MQTTErrorCode, MQTTProtocolVersion +from paho.mqtt.enums import ( + CallbackAPIVersion, + ConnackCode, + LogLevel, + MessageState, + MessageType, + MQTTErrorCode, + MQTTProtocolVersion, + PahoClientMode, +) from paho.mqtt.packettypes import PacketTypes from paho.mqtt.properties import Properties -from paho.mqtt.reasoncodes import ReasonCode +from paho.mqtt.reasoncodes import ReasonCode, ReasonCodes +from paho.mqtt.subscribeoptions import SubscribeOptions import tests.paho_test as paho_test @@ -16,9 +26,23 @@ def test_documented_public_reexports() -> None: - assert client.CallbackAPIVersion is CallbackAPIVersion - assert client.Properties is Properties - assert client.ReasonCode is ReasonCode + expected_public_api = { + "CallbackAPIVersion": CallbackAPIVersion, + "ConnackCode": ConnackCode, + "LogLevel": LogLevel, + "MessageState": MessageState, + "MessageType": MessageType, + "MQTTErrorCode": MQTTErrorCode, + "MQTTProtocolVersion": MQTTProtocolVersion, + "PahoClientMode": PahoClientMode, + "Properties": Properties, + "ReasonCode": ReasonCode, + "ReasonCodes": ReasonCodes, + "SubscribeOptions": SubscribeOptions, + } + + for name, expected in expected_public_api.items(): + assert getattr(client, name) is expected @pytest.mark.parametrize("proto_ver,callback_version", [