commit aebf3e4e573858b0a4f77939429c89700a07c78c
Author: Damian Johnson <atagar(a)torproject.org>
Date: Wed Jan 2 13:56:21 2019 -0800
Separate Query exception attributes
Oops, commit cc43a6c both broke our unit tests and is incorrect in that it
changes the Query's 'error' attribute to a completely different type.
The error attribute is public so we cannot change it. Simply storing exception
metadata as a separate private attribute for the time being. In stem 2.x we'll
be able to drop this whole thing because without requiring python 2.x
compatibility we can re-raise exceptions while retaining their stacktrace.
---
stem/descriptor/remote.py | 11 +++++++----
test/unit/descriptor/remote.py | 2 +-
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py
index 20622cce..9ccfaced 100644
--- a/stem/descriptor/remote.py
+++ b/stem/descriptor/remote.py
@@ -423,7 +423,8 @@ class Query(object):
self.fall_back_to_authority = fall_back_to_authority
self.content = None
- self.error = None
+ self.error = None # TODO: maybe remove in favor of error_attr in stem 2.x
+ self._error_attr = None
self.is_done = False
self.download_url = None
@@ -518,7 +519,7 @@ class Query(object):
# When we drop python 2.x support we should replace this with the
# 'raise from' option above.
- exc_type, exc_value, exc_traceback = self.error
+ exc_type, exc_value, exc_traceback = self._error_attr
stacktrace = 'Original traceback:\n' + ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)[1:])
raise exc_type(str(exc_value) + '\n\n' + stacktrace)
@@ -552,7 +553,8 @@ class Query(object):
for desc in results:
yield desc
except ValueError as exc:
- self.error = sys.exc_info() # encountered a parsing error
+ self.error = exc # encountered a parsing error
+ self._error_attr = sys.exc_info()
if suppress:
return
@@ -606,7 +608,8 @@ class Query(object):
return self._download_descriptors(retries - 1, timeout)
else:
log.debug("Unable to download descriptors from '%s': %s" % (self.download_url, exc))
- self.error = sys.exc_info()
+ self.error = exc
+ self._error_attr = sys.exc_info()
finally:
self.is_done = True
diff --git a/test/unit/descriptor/remote.py b/test/unit/descriptor/remote.py
index aab5f5d6..d2688775 100644
--- a/test/unit/descriptor/remote.py
+++ b/test/unit/descriptor/remote.py
@@ -162,7 +162,7 @@ class TestDescriptorDownloader(unittest.TestCase):
validate = True,
)
- self.assertRaisesWith(stem.ProtocolError, "Response should begin with HTTP success, but was 'HTTP/1.0 500 Kaboom'", request.run)
+ self.assertRaisesRegexp(stem.ProtocolError, "^Response should begin with HTTP success, but was 'HTTP/1.0 500 Kaboom'", request.run)
@patch(URL_OPEN, _dirport_mock(TEST_DESCRIPTOR))
def test_using_dirport(self):