From ffaa6177596da4fd8c13465bea32c1e1fe28a91b Mon Sep 17 00:00:00 2001 From: Rossen Georgiev Date: Sat, 27 Oct 2018 02:38:26 +0100 Subject: [PATCH] expose unified message errors --- steam/client/builtins/unified_messages.py | 25 ++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/steam/client/builtins/unified_messages.py b/steam/client/builtins/unified_messages.py index e4ee796..3508bd8 100644 --- a/steam/client/builtins/unified_messages.py +++ b/steam/client/builtins/unified_messages.py @@ -36,6 +36,18 @@ class UnifiedMessages(object): self.unified_messages = SteamUnifiedMessages(self, name) #: instance of :class:`SteamUnifiedMessages` +class UnifiedMessageError(object): + def __init__(self, eresult, message): + self.eresult = eresult + self.message = message + + def __repr__(self): + return "%s(%s, %s)" % (self.__class__.__name__, self.eresult, repr(self.message)) + + def __str__(self): + return self.message + + class SteamUnifiedMessages(EventEmitter): """Simple API for send/recv of unified messages @@ -66,18 +78,21 @@ class SteamUnifiedMessages(EventEmitter): self._LOG.error("Unable to find proto for %s" % repr(method_name)) return + error = None if message.header.eresult != EResult.OK: self._LOG.error("%s (%s): %s" % (method_name, repr(EResult(message.header.eresult)), message.header.error_message)) + error = UnifiedMessageError(EResult(message.header.eresult), + message.header.error_message) resp = proto() resp.ParseFromString(message.body.serialized_method_response) - self.emit(method_name, resp) + self.emit(method_name, resp, error) jobid = message.header.jobid_target if jobid not in (-1, 18446744073709551615): - self.emit("job_%d" % jobid, resp) + self.emit("job_%d" % jobid, resp, error) def get(self, method_name): """Get request proto instance for given methed name @@ -113,7 +128,7 @@ class SteamUnifiedMessages(EventEmitter): if isinstance(message, str): message = self.get(message) if message not in self._data: - raise ValueError("Supplied message seems to be invalid. Did you use 'get' method?") + raise ValueError("Supplied message is invalid. Use 'get' method.") if params: proto_fill_from_dict(message, params) @@ -138,7 +153,7 @@ class SteamUnifiedMessages(EventEmitter): :param raises: (optional) On timeout if :class:`False` return :class:`None`, else raise :class:`gevent.Timeout` :type raises: :class:`bool` :return: response proto message instance - :rtype: proto message, :class:`None` + :rtype: (proto message, :class:`.UnifiedMessageError`) :raises: :class:`gevent.Timeout` """ job_id = self.send(message, params) @@ -146,4 +161,4 @@ class SteamUnifiedMessages(EventEmitter): if resp is None and not raises: return None else: - return resp[0] + return resp