Skip to content

Commit 00a2f52

Browse files
committed
Update STOMP version handling and modify dependencies for compatibility
1 parent af8569e commit 00a2f52

3 files changed

Lines changed: 59 additions & 14 deletions

File tree

gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/field_proxy_forwarder.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
from gridappsd import GridAPPSD
55
from gridappsd import topics
66

7+
try:
8+
from importlib.metadata import version as _pkg_version
9+
_STOMP_V8 = int(_pkg_version('stomp-py').split('.')[0]) >= 8
10+
except Exception:
11+
_STOMP_V8 = False
12+
713
from cimgraph.databases import BlazegraphConnection
814
from cimgraph.models import BusBranchModel
915

@@ -18,8 +24,13 @@ def __init__(self, ot_connection: GridAPPSD, proxy_connection: stomp.Connection)
1824
self.ot_connection = ot_connection
1925
self.proxy_connection = proxy_connection
2026

21-
def on_message(self, headers, message):
27+
def on_message(self, *args):
2228
"Receives messages coming from Proxy bus (e.g. ARTEMIS) and forwards to OT bus"
29+
if _STOMP_V8:
30+
frame = args[0]
31+
headers, message = frame.headers, frame.body
32+
else:
33+
headers, message = args[0], args[1]
2334
try:
2435
print(f"Received message at Proxy. destination: {headers['destination']}, message: {headers}")
2536

gridappsd-python-lib/gridappsd/goss.py

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
from logging import Logger
5858
from queue import Queue
5959

60+
import stomp as _stomp_module
6061
from stomp import Connection12 as Connection
6162
from stomp.exception import NotConnectedException
6263
from time import sleep
@@ -65,6 +66,15 @@
6566

6667
_log: Logger = logging.getLogger(inspect.getmodulename(__file__))
6768

69+
# stomp.py 8.x changed listener callbacks from (headers, body) to (frame)
70+
_stomp_major = int(getattr(_stomp_module, '__version__', (0,))[0]) if isinstance(getattr(_stomp_module, '__version__', None), tuple) else 0
71+
try:
72+
from importlib.metadata import version as _pkg_version
73+
_stomp_major = int(_pkg_version('stomp-py').split('.')[0])
74+
except Exception:
75+
pass
76+
_STOMP_V8 = _stomp_major >= 8
77+
6878

6979
class GRIDAPPSD_ENV_ENUM(Enum):
7080
GRIDAPPSD_USER = "GRIDAPPSD_USER"
@@ -182,7 +192,12 @@ def __init__(self, topic, result_format):
182192
self._topic = topic
183193
self.result_format = result_format
184194

185-
def on_message(self, header, message):
195+
def on_message(self, *args):
196+
if _STOMP_V8:
197+
frame = args[0]
198+
header, message = frame.headers, frame.body
199+
else:
200+
header, message = args[0], args[1]
186201
_log.debug("Internal on message is: {} {}".format(header, message))
187202
try:
188203
if self.result_format == "JSON":
@@ -195,13 +210,15 @@ def on_message(self, header, message):
195210
except ValueError:
196211
self.response = dict(error="Invalid json returned", header=header, message=message)
197212

198-
def on_error(self, headers, message):
213+
def on_error(self, *args):
214+
if _STOMP_V8:
215+
frame = args[0]
216+
headers, message = frame.headers, frame.body
217+
else:
218+
headers, message = args[0], args[1]
199219
_log.error("ERR: {}".format(headers))
200220
_log.error("OUR ERROR: {}".format(message))
201221

202-
def on_disconnect(self, header, message):
203-
_log.debug("Disconnected")
204-
205222
listener = ResponseListener(reply_to, self.result_format)
206223
self.subscribe(reply_to, listener)
207224

@@ -314,18 +331,25 @@ def __init__(self):
314331
def get_token(self):
315332
return self.__token
316333

317-
def on_message(self, header, message):
334+
def on_message(self, *args):
335+
if _STOMP_V8:
336+
frame = args[0]
337+
header, message = frame.headers, frame.body
338+
else:
339+
header, message = args[0], args[1]
318340
_log.debug("Internal on message is: {} {}".format(header, message))
319341

320342
self.__token = str(message)
321343

322-
def on_error(self, headers, message):
344+
def on_error(self, *args):
345+
if _STOMP_V8:
346+
frame = args[0]
347+
headers, message = frame.headers, frame.body
348+
else:
349+
headers, message = args[0], args[1]
323350
_log.error("ERR: {}".format(headers))
324351
_log.error("OUR ERROR: {}".format(message))
325352

326-
def on_disconnect(self, header, message):
327-
_log.debug("Disconnected")
328-
329353
# receive token and set token variable
330354
# set callback
331355
listener = TokenResponseListener()
@@ -399,15 +423,25 @@ def remove_callback(self, topic, callback):
399423
except ValueError:
400424
pass
401425

402-
def on_message(self, headers, message):
426+
def on_message(self, *args):
427+
if _STOMP_V8:
428+
frame = args[0]
429+
headers, message = frame.headers, frame.body
430+
else:
431+
headers, message = args[0], args[1]
403432
destination = headers["destination"]
404433
# _log.debug("Topic map keys are: {keys}".format(keys=self._topics_callback_map.keys()))
405434
if destination in self._topics_callback_map:
406435
self._queue_callerback.put((self._topics_callback_map[destination], headers, message))
407436
else:
408437
_log.error("INVALID DESTINATION {destination}".format(destination=destination))
409438

410-
def on_error(self, header, message):
439+
def on_error(self, *args):
440+
if _STOMP_V8:
441+
frame = args[0]
442+
header, message = frame.headers, frame.body
443+
else:
444+
header, message = args[0], args[1]
411445
_log.error("Error in callback router")
412446
_log.error(header)
413447
_log.error(message)

gridappsd-python-lib/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies = [
1919
"PyYAML>=6.0",
2020
"pytz>=2022.7",
2121
"dateutils>=0.6.7",
22-
"stomp-py==6.0.0",
22+
"stomp-py>=6.0.0",
2323
"requests>=2.28",
2424
"python-dotenv>=0.9",
2525
"loguru>=0.7",

0 commit comments

Comments
 (0)