[tor-commits] [stem/master] Flatten parse function mappings

atagar at torproject.org atagar at torproject.org
Sun Jan 25 22:37:33 UTC 2015


commit b8af52b411713fd49e50cdcb9ef34851a350bf86
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Jan 6 09:08:32 2015 -0800

    Flatten parse function mappings
    
    No reason to have these in a for loop. Actually, if we make all functions
    uniform we'll be able to get rid of all the conditionals...
---
 stem/descriptor/server_descriptor.py |   35 +++++++++++++++-------------------
 1 file changed, 15 insertions(+), 20 deletions(-)

diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index e8d6e74..1ed8d4e 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -572,6 +572,19 @@ class ServerDescriptor(Descriptor):
     self.write_history_interval = None
     self.write_history_values = None
 
+    parse_functions = {
+      'router': _parse_router_line,
+      'bandwidth': _parse_bandwidth_line,
+      'platform': _parse_platform_line,
+      'published': _parse_published_line,
+      'fingerprint': _parse_fingerprint_line,
+      'hibernating': _parse_hibernating_line,
+      'extra-info-digest': _parse_extrainfo_digest_line,
+      'hidden-service-dir': _parse_hidden_service_dir_line,
+      'uptime': _parse_uptime_line,
+      'protocols': _parse_protocols_line,
+    }
+
     for keyword, values in list(entries.items()):
       # most just work with the first (and only) value
       value, block_type, block_contents = values[0]
@@ -582,32 +595,14 @@ class ServerDescriptor(Descriptor):
         line += '\n%s' % block_contents
 
       try:
-        if keyword == 'router':
-          _parse_router_line(self, value)
-        elif keyword == 'bandwidth':
-          _parse_bandwidth_line(self, value)
-        elif keyword == 'platform':
-          _parse_platform_line(self, value)
-        elif keyword == 'published':
-          _parse_published_line(self, value)
-        elif keyword == 'fingerprint':
-          _parse_fingerprint_line(self, value)
-        elif keyword == 'hibernating':
-          _parse_hibernating_line(self, value)
+        if keyword in parse_functions:
+          parse_functions[keyword](self, value)
         elif keyword == 'allow-single-hop-exits':
           self.allow_single_hop_exits = True
         elif keyword == 'caches-extra-info':
           self.extra_info_cache = True
-        elif keyword == 'extra-info-digest':
-          _parse_extrainfo_digest_line(self, value)
-        elif keyword == 'hidden-service-dir':
-          _parse_hidden_service_dir_line(self, value)
-        elif keyword == 'uptime':
-          _parse_uptime_line(self, value)
         elif keyword == 'contact':
           pass  # parsed as a bytes field earlier
-        elif keyword == 'protocols':
-          _parse_protocols_line(self, value)
         elif keyword == 'family':
           self.family = set(value.split(' '))
         elif keyword == 'eventdns':





More information about the tor-commits mailing list