[tor-commits] [stem/master] Don't raise a ValueError when descriptor information is unavialable
atagar at torproject.org
atagar at torproject.org
Mon Nov 24 19:32:03 UTC 2014
commit ce2d809ae979aad67d626437078f3a639597f9a6
Author: Damian Johnson <atagar at torproject.org>
Date: Mon Nov 24 11:24:34 2014 -0800
Don't raise a ValueError when descriptor information is unavialable
Controller methods like get_network_status() raised a ValueError and pretty
unhelpful error message when descriptor information is unavailable...
======================================================================
ERROR: test_get_network_status
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/atagar/Desktop/stem/test/integ/control/controller.py", line 1108, in test_get_network_status
self.assertRaises(stem.ControllerError, controller.get_network_status, 'blargg')
File "/usr/lib/python2.7/unittest/case.py", line 471, in assertRaises
callableObj(*args, **kwargs)
File "/home/atagar/Desktop/stem/stem/control.py", line 384, in wrapped
raise exc
ValueError: Router status entries (v3) must have a 'r' line:
I don't have a reliable repro for this, but I've seen it on occasion. We're not
documented as raising ValueErrors, so raising a ControllerError instead with a
slightly more descriptive message.
---
stem/control.py | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/stem/control.py b/stem/control.py
index 6e34ec0..1079629 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -1454,6 +1454,10 @@ class Controller(BaseController):
raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay)
desc_content = self.get_info(query, get_bytes = True)
+
+ if not desc_content:
+ raise stem.ControllerError("Descriptor information is unavailable, tor might still be downloading it")
+
return stem.descriptor.microdescriptor.Microdescriptor(desc_content)
@with_default(yields = True)
@@ -1546,6 +1550,10 @@ class Controller(BaseController):
raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay)
desc_content = self.get_info(query, get_bytes = True)
+
+ if not desc_content:
+ raise stem.ControllerError("Descriptor information is unavailable, tor might still be downloading it")
+
return stem.descriptor.server_descriptor.RelayDescriptor(desc_content)
except Exception as exc:
if not self._is_server_descriptors_available():
@@ -1581,8 +1589,11 @@ class Controller(BaseController):
desc_content = self.get_info('desc/all-recent', get_bytes = True)
- if not desc_content and not self._is_server_descriptors_available():
- raise ValueError(SERVER_DESCRIPTORS_UNSUPPORTED)
+ if not desc_content:
+ if not self._is_server_descriptors_available():
+ raise stem.ControllerError(SERVER_DESCRIPTORS_UNSUPPORTED)
+ else:
+ raise stem.ControllerError("Descriptor information is unavailable, tor might still be downloading it")
for desc in stem.descriptor.server_descriptor._parse_file(io.BytesIO(desc_content)):
yield desc
@@ -1655,6 +1666,9 @@ class Controller(BaseController):
desc_content = self.get_info(query, get_bytes = True)
+ if not desc_content:
+ raise stem.ControllerError("Descriptor information is unavailable, tor might still be downloading it")
+
if self.get_conf('UseMicrodescriptors', '0') == '1':
return stem.descriptor.router_status_entry.RouterStatusEntryMicroV3(desc_content)
else:
@@ -1699,6 +1713,9 @@ class Controller(BaseController):
desc_content = self.get_info('ns/all', get_bytes = True)
+ if not desc_content:
+ raise stem.ControllerError("Descriptor information is unavailable, tor might still be downloading it")
+
desc_iterator = stem.descriptor.router_status_entry._parse_file(
io.BytesIO(desc_content),
True,
More information about the tor-commits
mailing list