Skip to content

Commit cef5e90

Browse files
committed
add ws.ready() and explicit parameters
1 parent be3d06d commit cef5e90

4 files changed

Lines changed: 232 additions & 29 deletions

File tree

src/mistapi/websockets/__ws_client.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ def connect(self, run_in_background: bool = True) -> None:
155155
def _run_forever_safe(self) -> None:
156156
if self._ws:
157157
try:
158-
self._ws.run_forever(ping_interval=self._ping_interval, ping_timeout=self._ping_timeout)
158+
self._ws.run_forever(
159+
ping_interval=self._ping_interval, ping_timeout=self._ping_timeout
160+
)
159161
except Exception as exc:
160162
self._handle_error(self._ws, exc)
161163
self._handle_close(self._ws, -1, str(exc))
@@ -188,3 +190,7 @@ def __enter__(self) -> "_MistWebsocket":
188190

189191
def __exit__(self, *args) -> None:
190192
self.disconnect()
193+
194+
def ready(self) -> bool | None:
195+
"""Returns True if the WebSocket connection is open and ready."""
196+
return self._ws is not None and self._ws.ready()

src/mistapi/websockets/location.py

Lines changed: 73 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class LocationBleAssetsEvents(_MistWebsocket):
2929
UUID of the site to stream events from.
3030
map_id : str
3131
UUID of the map to stream events from.
32+
ping_interval : int, default 30
33+
Interval in seconds to send WebSocket ping frames (keep-alive).
34+
ping_timeout : int, default 10
35+
Time in seconds to wait for a ping response before considering the connection dead.
36+
3237
3338
EXAMPLE
3439
-----------
@@ -54,9 +59,19 @@ class LocationBleAssetsEvents(_MistWebsocket):
5459
time.sleep(60)
5560
"""
5661

57-
def __init__(self, mist_session: APISession, site_id: str, map_id: str, **kwargs) -> None:
62+
def __init__(
63+
self,
64+
mist_session: APISession,
65+
site_id: str,
66+
map_id: str,
67+
ping_interval: int = 30,
68+
ping_timeout: int = 10,
69+
) -> None:
5870
super().__init__(
59-
mist_session, channel=f"/sites/{site_id}/stats/maps/{map_id}/assets", **kwargs
71+
mist_session,
72+
channel=f"/sites/{site_id}/stats/maps/{map_id}/assets",
73+
ping_interval=ping_interval,
74+
ping_timeout=ping_timeout,
6075
)
6176

6277

@@ -74,6 +89,10 @@ class LocationConnectedClientsEvents(_MistWebsocket):
7489
UUID of the site to stream events from.
7590
map_id : str
7691
UUID of the map to stream events from.
92+
ping_interval : int, default 30
93+
Interval in seconds to send WebSocket ping frames (keep-alive).
94+
ping_timeout : int, default 10
95+
Time in seconds to wait for a ping response before considering the connection dead.
7796
7897
EXAMPLE
7998
-----------
@@ -99,11 +118,19 @@ class LocationConnectedClientsEvents(_MistWebsocket):
99118
time.sleep(60)
100119
"""
101120

102-
def __init__(self, mist_session: APISession, site_id: str, map_id: str, **kwargs) -> None:
121+
def __init__(
122+
self,
123+
mist_session: APISession,
124+
site_id: str,
125+
map_id: str,
126+
ping_interval: int = 30,
127+
ping_timeout: int = 10,
128+
) -> None:
103129
super().__init__(
104130
mist_session,
105131
channel=f"/sites/{site_id}/stats/maps/{map_id}/clients",
106-
**kwargs,
132+
ping_interval=ping_interval,
133+
ping_timeout=ping_timeout,
107134
)
108135

109136

@@ -121,6 +148,10 @@ class LocationSdkClientsEvents(_MistWebsocket):
121148
UUID of the site to stream events from.
122149
map_id : str
123150
UUID of the map to stream events from.
151+
ping_interval : int, default 30
152+
Interval in seconds to send WebSocket ping frames (keep-alive).
153+
ping_timeout : int, default 10
154+
Time in seconds to wait for a ping response before considering the connection dead.
124155
125156
EXAMPLE
126157
-----------
@@ -146,11 +177,19 @@ class LocationSdkClientsEvents(_MistWebsocket):
146177
time.sleep(60)
147178
"""
148179

149-
def __init__(self, mist_session: APISession, site_id: str, map_id: str, **kwargs) -> None:
180+
def __init__(
181+
self,
182+
mist_session: APISession,
183+
site_id: str,
184+
map_id: str,
185+
ping_interval: int = 30,
186+
ping_timeout: int = 10,
187+
) -> None:
150188
super().__init__(
151189
mist_session,
152190
channel=f"/sites/{site_id}/stats/maps/{map_id}/sdkclients",
153-
**kwargs,
191+
ping_interval=ping_interval,
192+
ping_timeout=ping_timeout,
154193
)
155194

156195

@@ -168,6 +207,10 @@ class LocationUnconnectedClientsEvents(_MistWebsocket):
168207
UUID of the site to stream events from.
169208
map_id : str
170209
UUID of the map to stream events from.
210+
ping_interval : int, default 30
211+
Interval in seconds to send WebSocket ping frames (keep-alive).
212+
ping_timeout : int, default 10
213+
Time in seconds to wait for a ping response before considering the connection dead.
171214
172215
EXAMPLE
173216
-----------
@@ -193,11 +236,19 @@ class LocationUnconnectedClientsEvents(_MistWebsocket):
193236
time.sleep(60)
194237
"""
195238

196-
def __init__(self, mist_session: APISession, site_id: str, map_id: str, **kwargs) -> None:
239+
def __init__(
240+
self,
241+
mist_session: APISession,
242+
site_id: str,
243+
map_id: str,
244+
ping_interval: int = 30,
245+
ping_timeout: int = 10,
246+
) -> None:
197247
super().__init__(
198248
mist_session,
199249
channel=f"/sites/{site_id}/stats/maps/{map_id}/unconnected_clients",
200-
**kwargs,
250+
ping_interval=ping_interval,
251+
ping_timeout=ping_timeout,
201252
)
202253

203254

@@ -215,6 +266,10 @@ class LocationDiscoveredBleAssetsEvents(_MistWebsocket):
215266
UUID of the site to stream events from.
216267
map_id : str
217268
UUID of the map to stream events from.
269+
ping_interval : int, default 30
270+
Interval in seconds to send WebSocket ping frames (keep-alive).
271+
ping_timeout : int, default 10
272+
Time in seconds to wait for a ping response before considering the connection dead.
218273
219274
EXAMPLE
220275
-----------
@@ -240,9 +295,17 @@ class LocationDiscoveredBleAssetsEvents(_MistWebsocket):
240295
time.sleep(60)
241296
"""
242297

243-
def __init__(self, mist_session: APISession, site_id: str, map_id: str, **kwargs) -> None:
298+
def __init__(
299+
self,
300+
mist_session: APISession,
301+
site_id: str,
302+
map_id: str,
303+
ping_interval: int = 30,
304+
ping_timeout: int = 10,
305+
) -> None:
244306
super().__init__(
245307
mist_session,
246308
channel=f"/sites/{site_id}/stats/maps/{map_id}/discovered_assets",
247-
**kwargs,
309+
ping_interval=ping_interval,
310+
ping_timeout=ping_timeout,
248311
)

src/mistapi/websockets/orgs.py

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ class OrgInsightsEvents(_MistWebsocket):
2727
Authenticated API session.
2828
org_id : str
2929
UUID of the organization to stream events from.
30+
ping_interval : int, default 30
31+
Interval in seconds to send WebSocket ping frames (keep-alive).
32+
ping_timeout : int, default 10
33+
Time in seconds to wait for a ping response before considering the connection dead.
3034
3135
EXAMPLE
3236
-----------
@@ -52,8 +56,19 @@ class OrgInsightsEvents(_MistWebsocket):
5256
time.sleep(60)
5357
"""
5458

55-
def __init__(self, mist_session: APISession, org_id: str, **kwargs) -> None:
56-
super().__init__(mist_session, channel=f"/orgs/{org_id}/insights/summary", **kwargs)
59+
def __init__(
60+
self,
61+
mist_session: APISession,
62+
org_id: str,
63+
ping_interval: int = 30,
64+
ping_timeout: int = 10,
65+
) -> None:
66+
super().__init__(
67+
mist_session,
68+
channel=f"/orgs/{org_id}/insights/summary",
69+
ping_interval=ping_interval,
70+
ping_timeout=ping_timeout,
71+
)
5772

5873

5974
class OrgMxEdgesStatsEvents(_MistWebsocket):
@@ -68,6 +83,10 @@ class OrgMxEdgesStatsEvents(_MistWebsocket):
6883
Authenticated API session.
6984
org_id : str
7085
UUID of the organization to stream events from.
86+
ping_interval : int, default 30
87+
Interval in seconds to send WebSocket ping frames (keep-alive).
88+
ping_timeout : int, default 10
89+
Time in seconds to wait for a ping response before considering the connection dead.
7190
7291
EXAMPLE
7392
-----------
@@ -93,8 +112,19 @@ class OrgMxEdgesStatsEvents(_MistWebsocket):
93112
time.sleep(60)
94113
"""
95114

96-
def __init__(self, mist_session: APISession, org_id: str, **kwargs) -> None:
97-
super().__init__(mist_session, channel=f"/orgs/{org_id}/stats/mxedges", **kwargs)
115+
def __init__(
116+
self,
117+
mist_session: APISession,
118+
org_id: str,
119+
ping_interval: int = 30,
120+
ping_timeout: int = 10,
121+
) -> None:
122+
super().__init__(
123+
mist_session,
124+
channel=f"/orgs/{org_id}/stats/mxedges",
125+
ping_interval=ping_interval,
126+
ping_timeout=ping_timeout,
127+
)
98128

99129

100130
class OrgMxEdgesUpgradesEvents(_MistWebsocket):
@@ -109,6 +139,10 @@ class OrgMxEdgesUpgradesEvents(_MistWebsocket):
109139
Authenticated API session.
110140
org_id : str
111141
UUID of the org to stream events from.
142+
ping_interval : int, default 30
143+
Interval in seconds to send WebSocket ping frames (keep-alive).
144+
ping_timeout : int, default 10
145+
Time in seconds to wait for a ping response before considering the connection dead.
112146
113147
EXAMPLE
114148
-----------
@@ -134,5 +168,16 @@ class OrgMxEdgesUpgradesEvents(_MistWebsocket):
134168
time.sleep(60)
135169
"""
136170

137-
def __init__(self, mist_session: APISession, org_id: str, **kwargs) -> None:
138-
super().__init__(mist_session, channel=f"/orgs/{org_id}/mxedges", **kwargs)
171+
def __init__(
172+
self,
173+
mist_session: APISession,
174+
org_id: str,
175+
ping_interval: int = 30,
176+
ping_timeout: int = 10,
177+
) -> None:
178+
super().__init__(
179+
mist_session,
180+
channel=f"/orgs/{org_id}/mxedges",
181+
ping_interval=ping_interval,
182+
ping_timeout=ping_timeout,
183+
)

0 commit comments

Comments
 (0)