1616
1717import functools
1818import warnings
19+ from types import MappingProxyType
1920from typing import Any
2021
2122from .packettypes import PacketTypes
@@ -30,70 +31,80 @@ class ReasonCode:
3031
3132 """
3233
33- names = {
34- 0 : {
35- "Success" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .PUBREL , PacketTypes .PUBCOMP , PacketTypes .UNSUBACK , PacketTypes .AUTH ],
36- "Normal disconnection" : [PacketTypes .DISCONNECT ],
37- "Granted QoS 0" : [PacketTypes .SUBACK ],
38- },
39- 1 : {"Granted QoS 1" : [PacketTypes .SUBACK ]},
40- 2 : {"Granted QoS 2" : [PacketTypes .SUBACK ]},
41- 4 : {"Disconnect with will message" : [PacketTypes .DISCONNECT ]},
42- 16 : {"No matching subscribers" : [PacketTypes .PUBACK , PacketTypes .PUBREC ]},
43- 17 : {"No subscription found" : [PacketTypes .UNSUBACK ]},
44- 24 : {"Continue authentication" : [PacketTypes .AUTH ]},
45- 25 : {"Re-authenticate" : [PacketTypes .AUTH ]},
46- 128 : {
47- "Unspecified error" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .UNSUBACK , PacketTypes .DISCONNECT ],
48- },
49- 129 : {"Malformed packet" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
50- 130 : {"Protocol error" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
51- 131 : {
52- "Implementation specific error" : [
53- PacketTypes .CONNACK ,
54- PacketTypes .PUBACK ,
55- PacketTypes .PUBREC ,
56- PacketTypes .SUBACK ,
57- PacketTypes .UNSUBACK ,
58- PacketTypes .DISCONNECT ,
59- ],
60- },
61- 132 : {"Unsupported protocol version" : [PacketTypes .CONNACK ]},
62- 133 : {"Client identifier not valid" : [PacketTypes .CONNACK ]},
63- 134 : {"Bad user name or password" : [PacketTypes .CONNACK ]},
64- 135 : {
65- "Not authorized" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .UNSUBACK , PacketTypes .DISCONNECT ],
66- },
67- 136 : {"Server unavailable" : [PacketTypes .CONNACK ]},
68- 137 : {"Server busy" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
69- 138 : {"Banned" : [PacketTypes .CONNACK ]},
70- 139 : {"Server shutting down" : [PacketTypes .DISCONNECT ]},
71- 140 : {"Bad authentication method" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
72- 141 : {"Keep alive timeout" : [PacketTypes .DISCONNECT ]},
73- 142 : {"Session taken over" : [PacketTypes .DISCONNECT ]},
74- 143 : {"Topic filter invalid" : [PacketTypes .SUBACK , PacketTypes .UNSUBACK , PacketTypes .DISCONNECT ]},
75- 144 : {"Topic name invalid" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .DISCONNECT ]},
76- 145 : {"Packet identifier in use" : [PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .UNSUBACK ]},
77- 146 : {"Packet identifier not found" : [PacketTypes .PUBREL , PacketTypes .PUBCOMP ]},
78- 147 : {"Receive maximum exceeded" : [PacketTypes .DISCONNECT ]},
79- 148 : {"Topic alias invalid" : [PacketTypes .DISCONNECT ]},
80- 149 : {"Packet too large" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
81- 150 : {"Message rate too high" : [PacketTypes .DISCONNECT ]},
82- 151 : {
83- "Quota exceeded" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .DISCONNECT ],
84- },
85- 152 : {"Administrative action" : [PacketTypes .DISCONNECT ]},
86- 153 : {"Payload format invalid" : [PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .DISCONNECT ]},
87- 154 : {"Retain not supported" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
88- 155 : {"QoS not supported" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
89- 156 : {"Use another server" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
90- 157 : {"Server moved" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
91- 158 : {"Shared subscription not supported" : [PacketTypes .SUBACK , PacketTypes .DISCONNECT ]},
92- 159 : {"Connection rate exceeded" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
93- 160 : {"Maximum connect time" : [PacketTypes .DISCONNECT ]},
94- 161 : {"Subscription identifiers not supported" : [PacketTypes .SUBACK , PacketTypes .DISCONNECT ]},
95- 162 : {"Wildcard subscription not supported" : [PacketTypes .SUBACK , PacketTypes .DISCONNECT ]},
96- }
34+ names = MappingProxyType (
35+ {
36+ 0 : {
37+ "Success" : [
38+ PacketTypes .CONNACK ,
39+ PacketTypes .PUBACK ,
40+ PacketTypes .PUBREC ,
41+ PacketTypes .PUBREL ,
42+ PacketTypes .PUBCOMP ,
43+ PacketTypes .UNSUBACK ,
44+ PacketTypes .AUTH ,
45+ ],
46+ "Normal disconnection" : [PacketTypes .DISCONNECT ],
47+ "Granted QoS 0" : [PacketTypes .SUBACK ],
48+ },
49+ 1 : {"Granted QoS 1" : [PacketTypes .SUBACK ]},
50+ 2 : {"Granted QoS 2" : [PacketTypes .SUBACK ]},
51+ 4 : {"Disconnect with will message" : [PacketTypes .DISCONNECT ]},
52+ 16 : {"No matching subscribers" : [PacketTypes .PUBACK , PacketTypes .PUBREC ]},
53+ 17 : {"No subscription found" : [PacketTypes .UNSUBACK ]},
54+ 24 : {"Continue authentication" : [PacketTypes .AUTH ]},
55+ 25 : {"Re-authenticate" : [PacketTypes .AUTH ]},
56+ 128 : {
57+ "Unspecified error" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .UNSUBACK , PacketTypes .DISCONNECT ],
58+ },
59+ 129 : {"Malformed packet" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
60+ 130 : {"Protocol error" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
61+ 131 : {
62+ "Implementation specific error" : [
63+ PacketTypes .CONNACK ,
64+ PacketTypes .PUBACK ,
65+ PacketTypes .PUBREC ,
66+ PacketTypes .SUBACK ,
67+ PacketTypes .UNSUBACK ,
68+ PacketTypes .DISCONNECT ,
69+ ],
70+ },
71+ 132 : {"Unsupported protocol version" : [PacketTypes .CONNACK ]},
72+ 133 : {"Client identifier not valid" : [PacketTypes .CONNACK ]},
73+ 134 : {"Bad user name or password" : [PacketTypes .CONNACK ]},
74+ 135 : {
75+ "Not authorized" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .UNSUBACK , PacketTypes .DISCONNECT ],
76+ },
77+ 136 : {"Server unavailable" : [PacketTypes .CONNACK ]},
78+ 137 : {"Server busy" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
79+ 138 : {"Banned" : [PacketTypes .CONNACK ]},
80+ 139 : {"Server shutting down" : [PacketTypes .DISCONNECT ]},
81+ 140 : {"Bad authentication method" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
82+ 141 : {"Keep alive timeout" : [PacketTypes .DISCONNECT ]},
83+ 142 : {"Session taken over" : [PacketTypes .DISCONNECT ]},
84+ 143 : {"Topic filter invalid" : [PacketTypes .SUBACK , PacketTypes .UNSUBACK , PacketTypes .DISCONNECT ]},
85+ 144 : {"Topic name invalid" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .DISCONNECT ]},
86+ 145 : {"Packet identifier in use" : [PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .UNSUBACK ]},
87+ 146 : {"Packet identifier not found" : [PacketTypes .PUBREL , PacketTypes .PUBCOMP ]},
88+ 147 : {"Receive maximum exceeded" : [PacketTypes .DISCONNECT ]},
89+ 148 : {"Topic alias invalid" : [PacketTypes .DISCONNECT ]},
90+ 149 : {"Packet too large" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
91+ 150 : {"Message rate too high" : [PacketTypes .DISCONNECT ]},
92+ 151 : {
93+ "Quota exceeded" : [PacketTypes .CONNACK , PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .SUBACK , PacketTypes .DISCONNECT ],
94+ },
95+ 152 : {"Administrative action" : [PacketTypes .DISCONNECT ]},
96+ 153 : {"Payload format invalid" : [PacketTypes .PUBACK , PacketTypes .PUBREC , PacketTypes .DISCONNECT ]},
97+ 154 : {"Retain not supported" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
98+ 155 : {"QoS not supported" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
99+ 156 : {"Use another server" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
100+ 157 : {"Server moved" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
101+ 158 : {"Shared subscription not supported" : [PacketTypes .SUBACK , PacketTypes .DISCONNECT ]},
102+ 159 : {"Connection rate exceeded" : [PacketTypes .CONNACK , PacketTypes .DISCONNECT ]},
103+ 160 : {"Maximum connect time" : [PacketTypes .DISCONNECT ]},
104+ 161 : {"Subscription identifiers not supported" : [PacketTypes .SUBACK , PacketTypes .DISCONNECT ]},
105+ 162 : {"Wildcard subscription not supported" : [PacketTypes .SUBACK , PacketTypes .DISCONNECT ]},
106+ }
107+ )
97108
98109 def __init__ (self , packetType : int , aName : str = "Success" , identifier : int = - 1 ):
99110 """
@@ -108,6 +119,7 @@ def __init__(self, packetType: int, aName: str = "Success", identifier: int = -1
108119
109120 """
110121
122+ self .names = dict (type (self ).names )
111123 self .packetType = packetType
112124 if identifier == - 1 :
113125 if packetType == PacketTypes .DISCONNECT and aName == "Success" :
@@ -156,8 +168,7 @@ def unpack(self, buffer):
156168 return 1
157169
158170 def getName (self ):
159- """Returns the reason code name corresponding to the numeric value which is set.
160- """
171+ """Returns the reason code name corresponding to the numeric value which is set."""
161172 return self .__getName__ (self .packetType , self .value )
162173
163174 def __eq__ (self , other ):
@@ -205,7 +216,8 @@ def __instancecheck__(self, other: Any) -> bool:
205216
206217class ReasonCodes (ReasonCode , metaclass = _CompatibilityIsInstance ):
207218 def __init__ (self , * args , ** kwargs ):
208- warnings .warn ("ReasonCodes is deprecated, use ReasonCode (singular) instead" ,
219+ warnings .warn (
220+ "ReasonCodes is deprecated, use ReasonCode (singular) instead" ,
209221 category = DeprecationWarning ,
210222 stacklevel = 2 ,
211223 )
0 commit comments