Skip to content

Add paho-mqtt stubs #8853

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyrightconfig.stricter.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"stubs/pytz/pytz/reference.pyi",
"stubs/pytz/pytz/tzfile.pyi",
"stubs/google-cloud-ndb",
"stubs/paho-mqtt",
"stubs/passlib",
"stubs/peewee",
"stubs/pep8-naming",
Expand Down
4 changes: 4 additions & 0 deletions stubs/paho-mqtt/METADATA.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
version = "1.6.*"

[tool.stubtest]
ignore_missing_stub = false
Empty file.
1 change: 1 addition & 0 deletions stubs/paho-mqtt/paho/mqtt/__init__.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
class MQTTException(Exception): ...
326 changes: 326 additions & 0 deletions stubs/paho-mqtt/paho/mqtt/client.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,326 @@
import logging
import socket as _socket
import ssl as _ssl
import time
import types
from collections.abc import Callable, Iterable
from typing import Any, TypeVar
from typing_extensions import TypeAlias

from .matcher import MQTTMatcher as MQTTMatcher
from .properties import Properties as Properties
from .reasoncodes import ReasonCodes as ReasonCodes
from .subscribeoptions import SubscribeOptions as SubscribeOptions

ssl: types.ModuleType | None
socks: types.ModuleType | None
time_func = time.monotonic
HAVE_DNS: bool
EAGAIN: int | Any
MQTTv31: int
MQTTv311: int
MQTTv5: int
unicode = str
basestring = str
CONNECT: int
CONNACK: int
PUBLISH: int
PUBACK: int
PUBREC: int
PUBREL: int
PUBCOMP: int
SUBSCRIBE: int
SUBACK: int
UNSUBSCRIBE: int
UNSUBACK: int
PINGREQ: int
PINGRESP: int
DISCONNECT: int
AUTH: int
MQTT_LOG_INFO: int
MQTT_LOG_NOTICE: int
MQTT_LOG_WARNING: int
MQTT_LOG_ERR: int
MQTT_LOG_DEBUG: int
LOGGING_LEVEL: dict[int, int]
CONNACK_ACCEPTED: int
CONNACK_REFUSED_PROTOCOL_VERSION: int
CONNACK_REFUSED_IDENTIFIER_REJECTED: int
CONNACK_REFUSED_SERVER_UNAVAILABLE: int
CONNACK_REFUSED_BAD_USERNAME_PASSWORD: int
CONNACK_REFUSED_NOT_AUTHORIZED: int
mqtt_cs_new: int
mqtt_cs_connected: int
mqtt_cs_disconnecting: int
mqtt_cs_connect_async: int
mqtt_ms_invalid: int
mqtt_ms_publish: int
mqtt_ms_wait_for_puback: int
mqtt_ms_wait_for_pubrec: int
mqtt_ms_resend_pubrel: int
mqtt_ms_wait_for_pubrel: int
mqtt_ms_resend_pubcomp: int
mqtt_ms_wait_for_pubcomp: int
mqtt_ms_send_pubrec: int
mqtt_ms_queued: int
MQTT_ERR_AGAIN: int
MQTT_ERR_SUCCESS: int
MQTT_ERR_NOMEM: int
MQTT_ERR_PROTOCOL: int
MQTT_ERR_INVAL: int
MQTT_ERR_NO_CONN: int
MQTT_ERR_CONN_REFUSED: int
MQTT_ERR_NOT_FOUND: int
MQTT_ERR_CONN_LOST: int
MQTT_ERR_TLS: int
MQTT_ERR_PAYLOAD_SIZE: int
MQTT_ERR_NOT_SUPPORTED: int
MQTT_ERR_AUTH: int
MQTT_ERR_ACL_DENIED: int
MQTT_ERR_UNKNOWN: int
MQTT_ERR_ERRNO: int
MQTT_ERR_QUEUE_SIZE: int
MQTT_ERR_KEEPALIVE: int
MQTT_CLIENT: int
MQTT_BRIDGE: int
MQTT_CLEAN_START_FIRST_ONLY: int
sockpair_data: bytes
_UserData: TypeAlias = Any
_Socket: TypeAlias = _socket.socket | _ssl.SSLSocket | Any
_Payload: TypeAlias = str | bytes | bytearray | float
_ExtraHeader: TypeAlias = dict[str, str] | Callable[[dict[str, str]], dict[str, str]]
_OnLog: TypeAlias = Callable[[Client, _UserData, int, str], object]
_OnConnect = TypeVar(
"_OnConnect",
Callable[[Client, _UserData, dict[str, int], int], object],
Callable[[Client, _UserData, dict[str, int], ReasonCodes, Properties | None], object],
)
_OnConnectFail: TypeAlias = Callable[[Client, _UserData], object]
_OnSubscribe = TypeVar(
"_OnSubscribe",
Callable[[Client, _UserData, int, Iterable[int]], object],
Callable[[Client, _UserData, Iterable[ReasonCodes], Iterable[Properties]], object],
)
_OnMessage: TypeAlias = Callable[[Client, _UserData, MQTTMessage], object]
_OnPublish: TypeAlias = Callable[[Client, _UserData, int], object]
_OnUnsubscribe = TypeVar(
"_OnUnsubscribe",
Callable[[Client, _UserData, int], object],
Callable[[Client, _UserData, int, Iterable[Properties], Iterable[ReasonCodes]], object],
)
_OnDisconnect = TypeVar(
"_OnDisconnect",
Callable[[Client, _UserData, int], object],
Callable[[Client, _UserData, int, ReasonCodes | None, Properties | None], object],
)
_OnSocket: TypeAlias = Callable[[Client, _UserData, _Socket | WebsocketWrapper | None], object]

class WebsocketConnectionError(ValueError): ...

def error_string(mqtt_errno: int) -> str: ...
def connack_string(connack_code: int) -> str: ...
def base62(num: int, base: str = ..., padding: int = ...) -> str: ...
def topic_matches_sub(sub: str, topic: str) -> bool: ...

class MQTTMessageInfo:
mid: int
rc: int
def __init__(self, mid: int) -> None: ...
def __iter__(self) -> MQTTMessageInfo: ...
def __next__(self) -> int: ...
def next(self) -> int: ...
def __getitem__(self, index: int) -> int: ...
def wait_for_publish(self, timeout: float | None = ...) -> None: ...
def is_published(self) -> bool: ...

class MQTTMessage:
timestamp: int
state: int
dup: bool
mid: int
payload: bytes | bytearray
qos: int
retain: bool
info: MQTTMessageInfo
properties: Properties | None
def __init__(self, mid: int = ..., topic: bytes | bytearray = ...) -> None: ...
def __eq__(self, other: object) -> bool: ...
def __ne__(self, other: object) -> bool: ...
@property
def topic(self) -> str: ...
@topic.setter
def topic(self, value: bytes | bytearray) -> None: ...

class Client:
suppress_exceptions: bool
def __init__(
self,
client_id: str = ...,
clean_session: bool | None = ...,
userdata: _UserData | None = ...,
protocol: int = ...,
transport: str = ...,
reconnect_on_failure: bool = ...,
) -> None: ...
def __del__(self) -> None: ...
def reinitialise(self, client_id: str = ..., clean_session: bool = ..., userdata: _UserData | None = ...) -> None: ...
def ws_set_options(self, path: str = ..., headers: _ExtraHeader | None = ...) -> None: ...
def tls_set_context(self, context: _ssl.SSLContext | None = ...) -> None: ...
def tls_set(
self,
ca_certs: str | None = ...,
certfile: str | None = ...,
keyfile: str | None = ...,
cert_reqs: _ssl.VerifyMode | None = ...,
tls_version: _ssl._SSLMethod | None = ...,
ciphers: str | None = ...,
keyfile_password: _ssl._PasswordType | None = ...,
) -> None: ...
def tls_insecure_set(self, value: bool) -> None: ...
def proxy_set(self, **proxy_args: str | int) -> None: ...
def enable_logger(self, logger: logging.Logger | None = ...) -> None: ...
def disable_logger(self) -> None: ...
def connect(
self,
host: str,
port: int = ...,
keepalive: int = ...,
bind_address: str = ...,
bind_port: int = ...,
clean_start: int = ...,
properties: Properties | None = ...,
) -> int: ...
def connect_srv(
self,
domain: str | None = ...,
keepalive: int = ...,
bind_address: str = ...,
clean_start: int = ...,
properties: Properties | None = ...,
) -> int: ...
def connect_async(
self,
host: str,
port: int = ...,
keepalive: int = ...,
bind_address: str = ...,
bind_port: int = ...,
clean_start: int = ...,
properties: Properties | None = ...,
) -> None: ...
def reconnect_delay_set(self, min_delay: int = ..., max_delay: int = ...) -> None: ...
def reconnect(self) -> int: ...
def loop(self, timeout: float = ..., max_packets: int = ...) -> int: ...
def publish(
self, topic: str, payload: _Payload | None = ..., qos: int = ..., retain: bool = ..., properties: Properties | None = ...
) -> MQTTMessageInfo: ...
def username_pw_set(self, username: str, password: str | bytes | bytearray | None = ...) -> None: ...
def enable_bridge_mode(self) -> None: ...
def is_connected(self) -> bool: ...
def disconnect(self, reasoncode: ReasonCodes | None = ..., properties: Properties | None = ...) -> int: ...
def subscribe(
self,
topic: str | tuple[str, SubscribeOptions] | list[tuple[str, SubscribeOptions]] | list[tuple[str, int]],
qos: int = ...,
options: SubscribeOptions | None = ...,
properties: Properties | None = ...,
) -> tuple[int, int]: ...
def unsubscribe(self, topic: str | list[str], properties: Properties | None = ...) -> tuple[int, int]: ...
def loop_read(self, max_packets: int = ...) -> int: ...
def loop_write(self, max_packets: int = ...) -> int: ...
def want_write(self) -> bool: ...
def loop_misc(self) -> int: ...
def max_inflight_messages_set(self, inflight: int) -> None: ...
def max_queued_messages_set(self, queue_size: int) -> Client: ...
def message_retry_set(self, retry: object) -> None: ...
def user_data_set(self, userdata: _UserData) -> None: ...
def will_set(
self, topic: str, payload: _Payload | None = ..., qos: int = ..., retain: bool = ..., properties: Properties | None = ...
) -> None: ...
def will_clear(self) -> None: ...
def socket(self) -> _Socket | WebsocketWrapper: ...
def loop_forever(self, timeout: float = ..., max_packets: int = ..., retry_first_connection: bool = ...) -> int: ...
def loop_start(self) -> int | None: ...
def loop_stop(self, force: bool = ...) -> int | None: ...
@property
def on_log(self) -> _OnLog | None: ...
@on_log.setter
def on_log(self, func: _OnLog) -> None: ...
def log_callback(self) -> Callable[[_OnLog], _OnLog]: ...
@property
def on_connect(self) -> _OnConnect | None: ...
@on_connect.setter
def on_connect(self, func: _OnConnect) -> None: ...
def connect_callback(self) -> Callable[[_OnConnect], _OnConnect]: ...
@property
def on_connect_fail(self) -> _OnConnectFail | None: ...
@on_connect_fail.setter
def on_connect_fail(self, func: _OnConnectFail) -> None: ...
def connect_fail_callback(self) -> Callable[[_OnConnectFail], _OnConnectFail]: ...
@property
def on_subscribe(self) -> _OnSubscribe | None: ...
@on_subscribe.setter
def on_subscribe(self, func: _OnSubscribe) -> None: ...
def subscribe_callback(self) -> Callable[[_OnSubscribe], _OnSubscribe]: ...
@property
def on_message(self) -> _OnMessage | None: ...
@on_message.setter
def on_message(self, func: _OnMessage) -> None: ...
def message_callback(self) -> Callable[[_OnMessage], _OnMessage]: ...
@property
def on_publish(self) -> _OnPublish | None: ...
@on_publish.setter
def on_publish(self, func: _OnPublish) -> None: ...
def publish_callback(self) -> Callable[[_OnPublish], _OnPublish]: ...
@property
def on_unsubscribe(self) -> _OnUnsubscribe | None: ...
@on_unsubscribe.setter
def on_unsubscribe(self, func: _OnUnsubscribe) -> None: ...
def unsubscribe_callback(self) -> Callable[[_OnUnsubscribe], _OnUnsubscribe]: ...
@property
def on_disconnect(self) -> _OnDisconnect: ...
@on_disconnect.setter
def on_disconnect(self, func: _OnDisconnect) -> None: ...
def disconnect_callback(self) -> Callable[[_OnDisconnect], _OnDisconnect]: ...
@property
def on_socket_open(self) -> _OnSocket: ...
@on_socket_open.setter
def on_socket_open(self, func: _OnSocket) -> None: ...
def socket_open_callback(self) -> Callable[[_OnSocket], _OnSocket]: ...
@property
def on_socket_close(self) -> _OnSocket: ...
@on_socket_close.setter
def on_socket_close(self, func: _OnSocket) -> None: ...
def socket_close_callback(self) -> Callable[[_OnSocket], _OnSocket]: ...
@property
def on_socket_register_write(self) -> _OnSocket: ...
@on_socket_register_write.setter
def on_socket_register_write(self, func: _OnSocket) -> None: ...
def socket_register_write_callback(self) -> Callable[[_OnSocket], _OnSocket]: ...
@property
def on_socket_unregister_write(self) -> _OnSocket: ...
@on_socket_unregister_write.setter
def on_socket_unregister_write(self, func: _OnSocket) -> None: ...
def socket_unregister_write_callback(self) -> Callable[[_OnSocket], _OnSocket]: ...
def message_callback_add(self, sub: str, callback: _OnMessage) -> None: ...
def topic_callback(self, sub: str) -> Callable[[_OnMessage], _OnMessage]: ...
def message_callback_remove(self, sub: str) -> None: ...

class WebsocketWrapper:
OPCODE_CONTINUATION: int
OPCODE_TEXT: int
OPCODE_BINARY: int
OPCODE_CONNCLOSE: int
OPCODE_PING: int
OPCODE_PONG: int
connected: bool
def __init__(self, socket: _Socket, host: str, port: int, is_ssl: bool, path: str, extra_headers: _ExtraHeader) -> None: ...
def __del__(self) -> None: ...
def recv(self, length: int) -> bytes | bytearray | None: ...
def read(self, length: int) -> bytes | bytearray | None: ...
def send(self, data: bytes | bytearray) -> int: ...
def write(self, data: bytes | bytearray) -> int: ...
def close(self) -> None: ...
def fileno(self) -> int: ...
def pending(self) -> int: ...
def setblocking(self, flag: bool) -> None: ...
11 changes: 11 additions & 0 deletions stubs/paho-mqtt/paho/mqtt/matcher.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from collections.abc import Generator
from typing import Any

class MQTTMatcher:
class Node: ...

def __init__(self) -> None: ...
def __setitem__(self, key: str, value: Any) -> None: ...
def __getitem__(self, key: str) -> Any: ...
def __delitem__(self, key: str) -> None: ...
def iter_match(self, topic: str) -> Generator[Any, None, None]: ...
19 changes: 19 additions & 0 deletions stubs/paho-mqtt/paho/mqtt/packettypes.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class PacketTypes:
indexes: range
CONNECT: int
CONNACK: int
PUBLISH: int
PUBACK: int
PUBREC: int
PUBREL: int
PUBCOMP: int
SUBSCRIBE: int
SUBACK: int
UNSUBSCRIBE: int
UNSUBACK: int
PINGREQ: int
PINGRESP: int
DISCONNECT: int
AUTH: int
WILLMESSAGE: int
Names: list[str]
Loading