commit fa0fbd195d0531980a6e250ee2e32c99a0708259 Author: Damian Johnson atagar@torproject.org Date: Sun Mar 24 20:52:07 2013 -0700
Allowing stem.descriptor.parse_file() to handle paths
Several times now I've passed a string path to parse_file() rather than a file object and been confused for a sec by the stacktrace. On reflection there's no reason *not* to accept paths - that's commonly what we want it for after all and eliminating the extra open() lets our callers have much nicer code. --- stem/descriptor/__init__.py | 11 ++++++++++- stem/descriptor/microdescriptor.py | 14 ++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py index 501ac5d..ef438a7 100644 --- a/stem/descriptor/__init__.py +++ b/stem/descriptor/__init__.py @@ -125,7 +125,7 @@ def parse_file(descriptor_file, descriptor_type = None, validate = True, documen
my_descriptor_file = open(descriptor_path, 'rb')
- :param file descriptor_file: opened file with the descriptor contents + :param str,file descriptor_file: path or opened file with the descriptor contents :param str descriptor_type: `descriptor type https://metrics.torproject.org/formats.html#descriptortypes`_, this is guessed if not provided :param bool validate: checks the validity of the descriptor's content if **True**, skips these checks otherwise @@ -139,6 +139,15 @@ def parse_file(descriptor_file, descriptor_type = None, validate = True, documen * **IOError** if unable to read from the descriptor_file """
+ # if we got a path then open that file for parsing + + if isinstance(descriptor_file, (bytes, unicode)): + with open(descriptor_file) as desc_file: + for desc in parse_file(desc_file, descriptor_type, validate, document_handler): + yield desc + + return + import stem.descriptor.server_descriptor import stem.descriptor.extrainfo_descriptor import stem.descriptor.networkstatus diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py index 4fc2c31..ac1eb2e 100644 --- a/stem/descriptor/microdescriptor.py +++ b/stem/descriptor/microdescriptor.py @@ -41,10 +41,9 @@ the exit relays.
print "Exit Relays:"
- with open(os.path.join(data_dir, 'cached-microdesc-consensus')) as desc_file: - for desc in parse_file(desc_file): - if desc.digest in exit_digests: - print " %s (%s)" % (desc.nickname, desc.fingerprint) + for desc in parse_file(os.path.join(data_dir, 'cached-microdesc-consensus')): + if desc.digest in exit_digests: + print " %s (%s)" % (desc.nickname, desc.fingerprint)
Doing the same is trivial with server descriptors...
@@ -54,10 +53,9 @@ Doing the same is trivial with server descriptors...
print "Exit Relays:"
- with open("/home/atagar/.tor/cached-descriptors") as desc_file: - for desc in parse_file(desc_file): - if desc.exit_policy.is_exiting_allowed(): - print " %s (%s)" % (desc.nickname, desc.fingerprint) + for desc in parse_file("/home/atagar/.tor/cached-descriptors"): + if desc.exit_policy.is_exiting_allowed(): + print " %s (%s)" % (desc.nickname, desc.fingerprint)
**Module Overview:**
tor-commits@lists.torproject.org