diff --git a/bin/mqtt-rpc-client b/bin/mqtt-rpc-client index 11fe048..cb5004a 100644 --- a/bin/mqtt-rpc-client +++ b/bin/mqtt-rpc-client @@ -1,49 +1,34 @@ #!/usr/bin/env python3 +import argparse +import json import os -import json, time import pprint -import argparse - +import time from urllib.parse import urlparse -from paho.mqtt import client as mqttclient -from mqttrpc.client import TMQTTRPCClient -from jsonrpc.exceptions import JSONRPCError + import paho_socket +from jsonrpc.exceptions import JSONRPCError +from paho.mqtt import client as mqttclient + +from mqttrpc.client import MQTTRPCError, TMQTTRPCClient def main(): parser = argparse.ArgumentParser(description="Sample RPC client", add_help=False) parser.add_argument( - "-b", "--broker_url", dest="broker_url", type=str, help="MQTT url", default="unix:///var/run/mosquitto/mosquitto.sock" - ) - parser.add_argument( - "-d", - "--driver", - dest="driver", + "-b", + "--broker_url", + dest="broker_url", type=str, - help="Driver name" - ) - parser.add_argument( - "-s", - "--service", - dest="service", - type=str, - help="Service name" - ) - parser.add_argument( - "-m", - "--method", - dest="method", - type=str, - help="Method name" - ) - parser.add_argument( - "-a", "--args", dest="args", type=json.loads, help="Method arguments" - ) - parser.add_argument( - "-t", "--timeout", dest="timeout", type=int, help="Timeout", default=10 + help="MQTT url", + default="unix:///var/run/mosquitto/mosquitto.sock", ) + parser.add_argument("-d", "--driver", dest="driver", type=str, help="Driver name") + parser.add_argument("-s", "--service", dest="service", type=str, help="Service name") + parser.add_argument("-m", "--method", dest="method", type=str, help="Method name") + parser.add_argument("-a", "--args", dest="args", type=json.loads, help="Method arguments") + parser.add_argument("-t", "--timeout", dest="timeout", type=int, help="Timeout", default=10) args = parser.parse_args() url = urlparse(args.broker_url) @@ -64,10 +49,11 @@ def main(): rpc_client = TMQTTRPCClient(client) client.on_message = rpc_client.on_mqtt_message - resp = rpc_client.call( - args.driver, args.service, args.method, args.args, args.timeout - ) - pprint.pprint(resp) + try: + resp = rpc_client.call(args.driver, args.service, args.method, args.args, args.timeout) + pprint.pprint(resp) + except MQTTRPCError as e: + print("Error: %s" % e) if __name__ == "__main__": diff --git a/debian/changelog b/debian/changelog index 1efd56f..92df52b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +python-mqttrpc (1.1.7) stable; urgency=medium + + * mqtt-rpc-client: fix error response handling + + -- Nikolay Korotkiy Fri, 03 Feb 2023 13:17:00 +0400 + python-mqttrpc (1.1.6) stable; urgency=medium * Fix formatting diff --git a/editor_client.py b/editor_client.py index 57247f9..0ad7696 100644 --- a/editor_client.py +++ b/editor_client.py @@ -14,10 +14,11 @@ def main(): rpc_client = mqttrpc.client.TMQTTRPCClient(mqttClient) mqttClient.on_message = rpc_client.on_mqtt_message - resp = rpc_client.call('wbrules', 'Editor', 'List', {'path': '/'}) - print resp + resp = rpc_client.call("wbrules", "Editor", "List", {"path": "/"}) + print(resp) raw_input() + if __name__ == "__main__": main() diff --git a/mqttrpc/client.py b/mqttrpc/client.py index 006f316..3fb6667 100644 --- a/mqttrpc/client.py +++ b/mqttrpc/client.py @@ -93,7 +93,11 @@ def on_mqtt_message(self, mosq, obj, msg): if result.error: future.set_exception( - MQTTRPCError(result.error["message"], result.error["code"], result.error["data"]) + MQTTRPCError( + result.error["message"], + result.error["code"], + result.error["data"] if "data" in result.error else None, + ) ) future.set_result(result.result) diff --git a/server.py b/server.py index d1621d3..25e4e15 100644 --- a/server.py +++ b/server.py @@ -15,32 +15,32 @@ logging.getLogger().setLevel(logging.DEBUG) + @dispatcher.add_method def foobar(**kwargs): return kwargs["foo"] + kwargs["bar"] - class TMQTTRPCServer(object): def __init__(self, client, driver_id): self.client = client self.driver_id = driver_id def on_mqtt_message(self, mosq, obj, msg): - print msg.topic - print msg.payload + print(msg.topic) + print(msg.payload) - parts = msg.topic.split('/') + parts = msg.topic.split("/") driver_id = parts[3] service_id = parts[4] method_id = parts[5] client_id = parts[6] - response = MQTTRPCResponseManager.handle(msg.payload, service_id, method_id, dispatcher) - self.client.publish("/rpc/v1/%s/%s/%s/%s/reply" % (self.driver_id, service_id, method_id, client_id ), response.json) - + self.client.publish( + "/rpc/v1/%s/%s/%s/%s/reply" % (self.driver_id, service_id, method_id, client_id), response.json + ) def setup(self): for service, method in dispatcher.iterkeys(): @@ -49,31 +49,21 @@ def setup(self): self.client.subscribe("/rpc/v1/%s/%s/%s/+" % (self.driver_id, service, method)) - - - - # Dispatcher is dictionary {: callable} dispatcher[("test", "echo")] = lambda s: s dispatcher[("test", "add")] = lambda a, b: a + b +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Sample RPC server", add_help=False) + parser.add_argument("-h", "--host", dest="host", type=str, help="MQTT host", default="localhost") -if __name__ =='__main__': - parser = argparse.ArgumentParser(description='Sample RPC server', add_help=False) - - parser.add_argument('-h', '--host', dest='host', type=str, - help='MQTT host', default='localhost') + parser.add_argument("-u", "--username", dest="username", type=str, help="MQTT username", default="") - parser.add_argument('-u', '--username', dest='username', type=str, - help='MQTT username', default='') + parser.add_argument("-P", "--password", dest="password", type=str, help="MQTT password", default="") - parser.add_argument('-P', '--password', dest='password', type=str, - help='MQTT password', default='') - - parser.add_argument('-p', '--port', dest='port', type=int, - help='MQTT port', default='1883') + parser.add_argument("-p", "--port", dest="port", type=int, help="MQTT port", default="1883") args = parser.parse_args() client = mosquitto.Mosquitto() @@ -81,14 +71,12 @@ def setup(self): if args.username: client.username_pw_set(args.username, args.password) - - rpc_server = TMQTTRPCServer(client, 'Driver') + rpc_server = TMQTTRPCServer(client, "Driver") client.connect(args.host, args.port) client.on_message = rpc_server.on_mqtt_message rpc_server.setup() - while 1: rc = client.loop() if rc != 0: