webex-bot 0.6.0__tar.gz → 0.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {webex_bot-0.6.0/webex_bot.egg-info → webex_bot-0.6.1}/PKG-INFO +7 -1
  2. {webex_bot-0.6.0 → webex_bot-0.6.1}/README.md +6 -0
  3. {webex_bot-0.6.0 → webex_bot-0.6.1}/setup.cfg +1 -1
  4. {webex_bot-0.6.0 → webex_bot-0.6.1}/setup.py +1 -1
  5. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/__init__.py +1 -1
  6. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/websockets/webex_websocket_client.py +25 -4
  7. {webex_bot-0.6.0 → webex_bot-0.6.1/webex_bot.egg-info}/PKG-INFO +7 -1
  8. {webex_bot-0.6.0 → webex_bot-0.6.1}/CONTRIBUTING.rst +0 -0
  9. {webex_bot-0.6.0 → webex_bot-0.6.1}/LICENSE +0 -0
  10. {webex_bot-0.6.0 → webex_bot-0.6.1}/MANIFEST.in +0 -0
  11. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/Makefile +0 -0
  12. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/conf.py +0 -0
  13. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/contributing.rst +0 -0
  14. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/index.rst +0 -0
  15. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/installation.rst +0 -0
  16. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/make.bat +0 -0
  17. {webex_bot-0.6.0 → webex_bot-0.6.1}/docs/usage.rst +0 -0
  18. {webex_bot-0.6.0 → webex_bot-0.6.1}/tests/__init__.py +0 -0
  19. {webex_bot-0.6.0 → webex_bot-0.6.1}/tests/test_webex_bot.py +0 -0
  20. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/cards/__init__.py +0 -0
  21. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/commands/__init__.py +0 -0
  22. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/commands/echo.py +0 -0
  23. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/commands/help.py +0 -0
  24. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/exceptions.py +0 -0
  25. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/formatting.py +0 -0
  26. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/models/__init__.py +0 -0
  27. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/models/command.py +0 -0
  28. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/models/response.py +0 -0
  29. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/webex_bot.py +0 -0
  30. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot/websockets/__init__.py +0 -0
  31. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot.egg-info/SOURCES.txt +0 -0
  32. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot.egg-info/dependency_links.txt +0 -0
  33. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot.egg-info/not-zip-safe +0 -0
  34. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot.egg-info/requires.txt +0 -0
  35. {webex_bot-0.6.0 → webex_bot-0.6.1}/webex_bot.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webex_bot
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Python package for a Webex Bot based on websockets.
5
5
  Home-page: https://github.com/fbradyirl/webex_bot
6
6
  Author: Finbarr Brady
@@ -438,6 +438,12 @@ to
438
438
  bot = WebexBot(teams_bot_token=os.getenv("WEBEX_ACCESS_TOKEN")
439
439
  ```
440
440
 
441
+
442
+ ### 0.6.1 (2025-May-19)
443
+
444
+ * Handle and retry on InvalidStatusCode in Websocket loop
445
+
446
+
441
447
  [1]: https://github.com/aaugustin/websockets
442
448
 
443
449
  [2]: https://github.com/WebexCommunity/WebexPythonSDK
@@ -398,6 +398,12 @@ to
398
398
  bot = WebexBot(teams_bot_token=os.getenv("WEBEX_ACCESS_TOKEN")
399
399
  ```
400
400
 
401
+
402
+ ### 0.6.1 (2025-May-19)
403
+
404
+ * Handle and retry on InvalidStatusCode in Websocket loop
405
+
406
+
401
407
  [1]: https://github.com/aaugustin/websockets
402
408
 
403
409
  [2]: https://github.com/WebexCommunity/WebexPythonSDK
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.6.0
2
+ current_version = 0.6.1
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -45,6 +45,6 @@ setup(
45
45
  test_suite='tests',
46
46
  tests_require=test_requirements,
47
47
  url='https://github.com/fbradyirl/webex_bot',
48
- version='0.6.0',
48
+ version='0.6.1',
49
49
  zip_safe=False,
50
50
  )
@@ -1,4 +1,4 @@
1
1
  """Top-level package for Webex Bot."""
2
2
 
3
3
  __author__ = """Finbarr Brady"""
4
- __version__ = '0.6.0'
4
+ __version__ = '0.6.1'
@@ -10,6 +10,7 @@ import certifi
10
10
  import requests
11
11
  import websockets
12
12
  from webexpythonsdk import WebexAPI
13
+ from websockets.exceptions import InvalidStatusCode
13
14
 
14
15
  try:
15
16
  from websockets_proxy import Proxy, proxy_connect
@@ -193,6 +194,9 @@ class WebexWebsocketClient(object):
193
194
  logger.error('could not get/create device info')
194
195
  raise Exception("No WDM device info")
195
196
 
197
+ # Pull out URL now so we can log it on failure
198
+ ws_url = self.device_info.get('webSocketUrl')
199
+
196
200
  async def _websocket_recv():
197
201
  message = await self.websocket.recv()
198
202
  logger.debug("WebSocket Received Message(raw): %s\n" % message)
@@ -204,10 +208,17 @@ class WebexWebsocketClient(object):
204
208
  logger.warning(
205
209
  f"An exception occurred while processing message. Ignoring. {messageProcessingException}")
206
210
 
207
- @backoff.on_exception(backoff.expo, websockets.ConnectionClosedError, max_time=MAX_BACKOFF_TIME)
208
- @backoff.on_exception(backoff.expo, websockets.ConnectionClosedOK, max_time=MAX_BACKOFF_TIME)
209
- @backoff.on_exception(backoff.expo, websockets.ConnectionClosed, max_time=MAX_BACKOFF_TIME)
210
- @backoff.on_exception(backoff.expo, socket.gaierror, max_time=MAX_BACKOFF_TIME)
211
+ @backoff.on_exception(
212
+ backoff.expo,
213
+ (
214
+ websockets.ConnectionClosedError,
215
+ websockets.ConnectionClosedOK,
216
+ websockets.ConnectionClosed,
217
+ socket.gaierror,
218
+ InvalidStatusCode,
219
+ ),
220
+ max_time=MAX_BACKOFF_TIME
221
+ )
211
222
  async def _connect_and_listen():
212
223
  ws_url = self.device_info['webSocketUrl']
213
224
  logger.info(f"Opening websocket connection to {ws_url}")
@@ -237,6 +248,16 @@ class WebexWebsocketClient(object):
237
248
 
238
249
  try:
239
250
  asyncio.get_event_loop().run_until_complete(_connect_and_listen())
251
+ except InvalidStatusCode as e:
252
+ logger.error(f"WebSocket handshake to {ws_url} failed with status {e.status_code}")
253
+ if e.status_code == 404:
254
+ logger.info("Refreshing WDM device info and retrying...")
255
+ self._get_device_info(check_existing=False)
256
+ # update ws_url before retry
257
+ ws_url = self.device_info.get('webSocketUrl')
258
+ asyncio.get_event_loop().run_until_complete(_connect_and_listen())
259
+ else:
260
+ raise
240
261
  except Exception as runException:
241
262
  logger.error(f"runException: {runException}")
242
263
  if self._get_device_info(check_existing=False) is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webex_bot
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Python package for a Webex Bot based on websockets.
5
5
  Home-page: https://github.com/fbradyirl/webex_bot
6
6
  Author: Finbarr Brady
@@ -438,6 +438,12 @@ to
438
438
  bot = WebexBot(teams_bot_token=os.getenv("WEBEX_ACCESS_TOKEN")
439
439
  ```
440
440
 
441
+
442
+ ### 0.6.1 (2025-May-19)
443
+
444
+ * Handle and retry on InvalidStatusCode in Websocket loop
445
+
446
+
441
447
  [1]: https://github.com/aaugustin/websockets
442
448
 
443
449
  [2]: https://github.com/WebexCommunity/WebexPythonSDK
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes