diff --git a/hbmqtt/client.py b/hbmqtt/client.py index b213ef5..253a5a0 100644 --- a/hbmqtt/client.py +++ b/hbmqtt/client.py @@ -2,6 +2,7 @@ # # See the file license.txt for copying permission. +import asyncio import logging import ssl from urllib.parse import urlparse, urlunparse @@ -9,13 +10,12 @@ from functools import wraps from hbmqtt.utils import not_in_dict_or_none from hbmqtt.session import Session -from hbmqtt.mqtt.connack import * -from hbmqtt.mqtt.connect import * +from hbmqtt.mqtt.connack import CONNECTION_ACCEPTED from hbmqtt.mqtt.protocol.client_handler import ClientProtocolHandler from hbmqtt.adapters import StreamReaderAdapter, StreamWriterAdapter, WebSocketsReader, WebSocketsWriter from hbmqtt.plugins.manager import PluginManager, BaseContext from hbmqtt.mqtt.protocol.handler import ProtocolHandlerException -from hbmqtt.mqtt.constants import * +from hbmqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 import websockets from websockets.uri import InvalidURI from websockets.handshake import InvalidHandshake diff --git a/hbmqtt/mqtt/__init__.py b/hbmqtt/mqtt/__init__.py index 52fc81d..8c80c38 100644 --- a/hbmqtt/mqtt/__init__.py +++ b/hbmqtt/mqtt/__init__.py @@ -2,7 +2,10 @@ # # See the file license.txt for copying permission. from hbmqtt.errors import HBMQTTException -from hbmqtt.mqtt.packet import * +from hbmqtt.mqtt.packet import ( + CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, + SUBACK, UNSUBSCRIBE, UNSUBACK, PINGREQ, PINGRESP, DISCONNECT, + MQTTFixedHeader) from hbmqtt.mqtt.connect import ConnectPacket from hbmqtt.mqtt.connack import ConnackPacket from hbmqtt.mqtt.disconnect import DisconnectPacket diff --git a/hbmqtt/mqtt/connect.py b/hbmqtt/mqtt/connect.py index 79d6b39..c82a45b 100644 --- a/hbmqtt/mqtt/connect.py +++ b/hbmqtt/mqtt/connect.py @@ -1,8 +1,10 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio + +from hbmqtt.codecs import bytes_to_int, decode_data_with_length, decode_string, encode_data_with_length, encode_string, int_to_bytes, read_or_raise from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, CONNECT, MQTTVariableHeader, MQTTPayload -from hbmqtt.codecs import * from hbmqtt.errors import HBMQTTException, NoDataException from hbmqtt.adapters import ReaderAdapter diff --git a/hbmqtt/mqtt/packet.py b/hbmqtt/mqtt/packet.py index a799e78..3d682a6 100644 --- a/hbmqtt/mqtt/packet.py +++ b/hbmqtt/mqtt/packet.py @@ -1,8 +1,10 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. -from hbmqtt.errors import CodecException, MQTTException -from hbmqtt.codecs import * +import asyncio + +from hbmqtt.codecs import bytes_to_hex_str, decode_packet_id, int_to_bytes, read_or_raise +from hbmqtt.errors import CodecException, MQTTException, NoDataException from hbmqtt.adapters import ReaderAdapter, WriterAdapter from datetime import datetime from struct import unpack diff --git a/hbmqtt/mqtt/protocol/broker_handler.py b/hbmqtt/mqtt/protocol/broker_handler.py index 09509c2..6acf470 100644 --- a/hbmqtt/mqtt/protocol/broker_handler.py +++ b/hbmqtt/mqtt/protocol/broker_handler.py @@ -4,8 +4,10 @@ import asyncio from asyncio import futures, Queue from hbmqtt.mqtt.protocol.handler import ProtocolHandler +from hbmqtt.mqtt.connack import ( + CONNECTION_ACCEPTED, UNACCEPTABLE_PROTOCOL_VERSION, IDENTIFIER_REJECTED, + BAD_USERNAME_PASSWORD, NOT_AUTHORIZED, ConnackPacket) from hbmqtt.mqtt.connect import ConnectPacket -from hbmqtt.mqtt.connack import * from hbmqtt.mqtt.pingreq import PingReqPacket from hbmqtt.mqtt.pingresp import PingRespPacket from hbmqtt.mqtt.subscribe import SubscribePacket diff --git a/hbmqtt/mqtt/protocol/handler.py b/hbmqtt/mqtt/protocol/handler.py index 744b91e..d1e8b24 100644 --- a/hbmqtt/mqtt/protocol/handler.py +++ b/hbmqtt/mqtt/protocol/handler.py @@ -5,12 +5,16 @@ import logging import collections import itertools +import asyncio from asyncio import InvalidStateError from hbmqtt.mqtt import packet_class -from hbmqtt.mqtt.packet import * from hbmqtt.mqtt.connack import ConnackPacket from hbmqtt.mqtt.connect import ConnectPacket +from hbmqtt.mqtt.packet import ( + RESERVED_0, CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, + SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, PINGREQ, PINGRESP, DISCONNECT, + RESERVED_15, MQTTFixedHeader) from hbmqtt.mqtt.pingresp import PingRespPacket from hbmqtt.mqtt.pingreq import PingReqPacket from hbmqtt.mqtt.publish import PublishPacket @@ -25,9 +29,9 @@ from hbmqtt.mqtt.unsuback import UnsubackPacket from hbmqtt.mqtt.disconnect import DisconnectPacket from hbmqtt.adapters import ReaderAdapter, WriterAdapter from hbmqtt.session import Session, OutgoingApplicationMessage, IncomingApplicationMessage, INCOMING, OUTGOING -from hbmqtt.mqtt.constants import * +from hbmqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 from hbmqtt.plugins.manager import PluginManager -from hbmqtt.errors import HBMQTTException +from hbmqtt.errors import HBMQTTException, MQTTException, NoDataException import sys if sys.version_info < (3, 5): diff --git a/hbmqtt/mqtt/publish.py b/hbmqtt/mqtt/publish.py index ce52ba1..a33c6fd 100644 --- a/hbmqtt/mqtt/publish.py +++ b/hbmqtt/mqtt/publish.py @@ -1,9 +1,11 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio + from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, PUBLISH, MQTTVariableHeader, MQTTPayload from hbmqtt.errors import HBMQTTException, MQTTException -from hbmqtt.codecs import * +from hbmqtt.codecs import decode_packet_id, decode_string, encode_string, int_to_bytes class PublishVariableHeader(MQTTVariableHeader): diff --git a/hbmqtt/mqtt/suback.py b/hbmqtt/mqtt/suback.py index f965764..b5966b2 100644 --- a/hbmqtt/mqtt/suback.py +++ b/hbmqtt/mqtt/suback.py @@ -1,10 +1,12 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio + from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, SUBACK, PacketIdVariableHeader, MQTTPayload, MQTTVariableHeader -from hbmqtt.errors import HBMQTTException +from hbmqtt.errors import HBMQTTException, NoDataException from hbmqtt.adapters import ReaderAdapter -from hbmqtt.codecs import * +from hbmqtt.codecs import bytes_to_int, int_to_bytes, read_or_raise class SubackPayload(MQTTPayload): diff --git a/hbmqtt/mqtt/subscribe.py b/hbmqtt/mqtt/subscribe.py index 0a2a9b2..c814b34 100644 --- a/hbmqtt/mqtt/subscribe.py +++ b/hbmqtt/mqtt/subscribe.py @@ -1,9 +1,11 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio + from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, SUBSCRIBE, PacketIdVariableHeader, MQTTPayload, MQTTVariableHeader -from hbmqtt.errors import HBMQTTException -from hbmqtt.codecs import * +from hbmqtt.errors import HBMQTTException, NoDataException +from hbmqtt.codecs import bytes_to_int, decode_string, encode_string, int_to_bytes, read_or_raise class SubscribePayload(MQTTPayload): diff --git a/hbmqtt/mqtt/unsubscribe.py b/hbmqtt/mqtt/unsubscribe.py index b12f460..cb7839a 100644 --- a/hbmqtt/mqtt/unsubscribe.py +++ b/hbmqtt/mqtt/unsubscribe.py @@ -1,9 +1,11 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio + from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, UNSUBSCRIBE, PacketIdVariableHeader, MQTTPayload, MQTTVariableHeader -from hbmqtt.errors import HBMQTTException -from hbmqtt.codecs import * +from hbmqtt.errors import HBMQTTException, NoDataException +from hbmqtt.codecs import decode_string, encode_string class UnubscribePayload(MQTTPayload): diff --git a/hbmqtt/utils.py b/hbmqtt/utils.py index 1c2a104..8eca44a 100644 --- a/hbmqtt/utils.py +++ b/hbmqtt/utils.py @@ -1,9 +1,14 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import logging + import yaml +logger = logging.getLogger(__name__) + + def not_in_dict_or_none(dict, key): """ Check if a key exists in a map and if it's not None diff --git a/samples/client_publish.py b/samples/client_publish.py index 6e150ad..fc9d0e0 100644 --- a/samples/client_publish.py +++ b/samples/client_publish.py @@ -2,7 +2,7 @@ import logging import asyncio from hbmqtt.client import MQTTClient, ConnectException -from hbmqtt.mqtt.constants import * +from hbmqtt.mqtt.constants import QOS_1, QOS_2 # diff --git a/tests/mqtt/protocol/test_handler.py b/tests/mqtt/protocol/test_handler.py index d890bcd..5a8180e 100644 --- a/tests/mqtt/protocol/test_handler.py +++ b/tests/mqtt/protocol/test_handler.py @@ -9,7 +9,7 @@ from hbmqtt.plugins.manager import PluginManager from hbmqtt.session import Session, OutgoingApplicationMessage, IncomingApplicationMessage from hbmqtt.mqtt.protocol.handler import ProtocolHandler from hbmqtt.adapters import StreamWriterAdapter, StreamReaderAdapter -from hbmqtt.mqtt.constants import * +from hbmqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 from hbmqtt.mqtt.publish import PublishPacket from hbmqtt.mqtt.puback import PubackPacket from hbmqtt.mqtt.pubrec import PubrecPacket diff --git a/tests/mqtt/test_puback.py b/tests/mqtt/test_puback.py index 2a20d99..14f6691 100644 --- a/tests/mqtt/test_puback.py +++ b/tests/mqtt/test_puback.py @@ -1,10 +1,10 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.puback import PubackPacket, PacketIdVariableHeader -from hbmqtt.codecs import * from hbmqtt.adapters import BufferReader diff --git a/tests/mqtt/test_pubcomp.py b/tests/mqtt/test_pubcomp.py index 25c0a2c..540fc41 100644 --- a/tests/mqtt/test_pubcomp.py +++ b/tests/mqtt/test_pubcomp.py @@ -1,11 +1,11 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.pubcomp import PubcompPacket, PacketIdVariableHeader from hbmqtt.adapters import BufferReader -from hbmqtt.codecs import * class PubcompPacketTest(unittest.TestCase): diff --git a/tests/mqtt/test_publish.py b/tests/mqtt/test_publish.py index ac34a0b..06c2913 100644 --- a/tests/mqtt/test_publish.py +++ b/tests/mqtt/test_publish.py @@ -1,11 +1,11 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.publish import PublishPacket, PublishVariableHeader, PublishPayload from hbmqtt.adapters import BufferReader -from hbmqtt.codecs import * from hbmqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 diff --git a/tests/mqtt/test_pubrec.py b/tests/mqtt/test_pubrec.py index e1092df..b376b72 100644 --- a/tests/mqtt/test_pubrec.py +++ b/tests/mqtt/test_pubrec.py @@ -1,11 +1,11 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.pubrec import PubrecPacket, PacketIdVariableHeader from hbmqtt.adapters import BufferReader -from hbmqtt.codecs import * class PubrecPacketTest(unittest.TestCase): diff --git a/tests/mqtt/test_pubrel.py b/tests/mqtt/test_pubrel.py index 516f9d8..385d0e3 100644 --- a/tests/mqtt/test_pubrel.py +++ b/tests/mqtt/test_pubrel.py @@ -1,10 +1,10 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.pubrel import PubrelPacket, PacketIdVariableHeader -from hbmqtt.codecs import * from hbmqtt.adapters import BufferReader diff --git a/tests/mqtt/test_suback.py b/tests/mqtt/test_suback.py index 9e6613d..c0b0e8a 100644 --- a/tests/mqtt/test_suback.py +++ b/tests/mqtt/test_suback.py @@ -1,12 +1,12 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.suback import SubackPacket, SubackPayload from hbmqtt.mqtt.packet import PacketIdVariableHeader from hbmqtt.adapters import BufferReader -from hbmqtt.codecs import * class SubackPacketTest(unittest.TestCase): diff --git a/tests/mqtt/test_subscribe.py b/tests/mqtt/test_subscribe.py index 7e58329..18f8f58 100644 --- a/tests/mqtt/test_subscribe.py +++ b/tests/mqtt/test_subscribe.py @@ -1,12 +1,12 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.subscribe import SubscribePacket, SubscribePayload from hbmqtt.mqtt.packet import PacketIdVariableHeader -from hbmqtt.mqtt.constants import * -from hbmqtt.codecs import * +from hbmqtt.mqtt.constants import QOS_1, QOS_2 from hbmqtt.adapters import BufferReader diff --git a/tests/mqtt/test_unsuback.py b/tests/mqtt/test_unsuback.py index 91650d0..376ba6b 100644 --- a/tests/mqtt/test_unsuback.py +++ b/tests/mqtt/test_unsuback.py @@ -1,12 +1,12 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.unsuback import UnsubackPacket from hbmqtt.mqtt.packet import PacketIdVariableHeader from hbmqtt.adapters import BufferReader -from hbmqtt.codecs import * class UnsubackPacketTest(unittest.TestCase): diff --git a/tests/mqtt/test_unsubscribe.py b/tests/mqtt/test_unsubscribe.py index 3c3c750..fc97c02 100644 --- a/tests/mqtt/test_unsubscribe.py +++ b/tests/mqtt/test_unsubscribe.py @@ -1,12 +1,12 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio import unittest from hbmqtt.mqtt.unsubscribe import UnsubscribePacket, UnubscribePayload from hbmqtt.mqtt.packet import PacketIdVariableHeader from hbmqtt.adapters import BufferReader -from hbmqtt.codecs import * class UnsubscribePacketTest(unittest.TestCase): diff --git a/tests/test_broker.py b/tests/test_broker.py index fa031df..835efaf 100644 --- a/tests/test_broker.py +++ b/tests/test_broker.py @@ -1,14 +1,35 @@ # Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. +import asyncio +import logging import unittest from unittest.mock import patch, call -from hbmqtt.broker import * -from hbmqtt.mqtt.constants import * + +from hbmqtt.adapters import StreamReaderAdapter, StreamWriterAdapter +from hbmqtt.broker import ( + EVENT_BROKER_PRE_START, + EVENT_BROKER_POST_START, + EVENT_BROKER_PRE_SHUTDOWN, + EVENT_BROKER_POST_SHUTDOWN, + EVENT_BROKER_CLIENT_CONNECTED, + EVENT_BROKER_CLIENT_DISCONNECTED, + EVENT_BROKER_CLIENT_SUBSCRIBED, + EVENT_BROKER_CLIENT_UNSUBSCRIBED, + EVENT_BROKER_MESSAGE_RECEIVED, + Broker) from hbmqtt.client import MQTTClient, ConnectException -from hbmqtt.mqtt import ConnectPacket, ConnackPacket, PublishPacket, PubrecPacket, \ - PubrelPacket, PubcompPacket, DisconnectPacket +from hbmqtt.mqtt import ( + ConnectPacket, ConnackPacket, PublishPacket, PubrecPacket, + PubrelPacket, PubcompPacket, DisconnectPacket) from hbmqtt.mqtt.connect import ConnectVariableHeader, ConnectPayload +from hbmqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 + +import sys +if sys.version_info < (3, 5): + from asyncio import async as ensure_future +else: + from asyncio import ensure_future formatter = "[%(asctime)s] %(name)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s" logging.basicConfig(level=logging.DEBUG, format=formatter) diff --git a/tests/test_client.py b/tests/test_client.py index 905ade8..99f11d5 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -7,7 +7,7 @@ import os import logging from hbmqtt.client import MQTTClient, ConnectException from hbmqtt.broker import Broker -from hbmqtt.mqtt.constants import * +from hbmqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 formatter = "[%(asctime)s] %(name)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s" logging.basicConfig(level=logging.ERROR, format=formatter) diff --git a/tox.ini b/tox.ini index d6c9d0e..66a4332 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,8 @@ [flake8] ignore = - F403, # 'from x import *' used; unable to detect undefined names (~29 warnings) - F821, # undefined name 'x' (~1 warnings) F841, # local variable 'wildcard_pattern' is assigned to but never used (~17 warnings) E265, # block comment should start with '# ' (~64 warnings) E501, # line too long (~664 warnings) - F405, # 'x' may be undefined, or defined from star imports (~401 warnings) [tox] envlist =