[tor-commits] [stem/master] Python3 parsing for BandwidthFiles

atagar at torproject.org atagar at torproject.org
Mon Jan 21 01:52:11 UTC 2019


commit e6ed3d1581be027f93113488a553a8582fde1108
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jan 20 17:34:59 2019 -0800

    Python3 parsing for BandwidthFiles
    
    Just the regular bytes vs unicode chore.
---
 stem/descriptor/bandwidth_file.py      | 23 ++++++++++++-----------
 test/unit/descriptor/bandwidth_file.py | 10 +++++-----
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/stem/descriptor/bandwidth_file.py b/stem/descriptor/bandwidth_file.py
index 2e9fc216..b51e9f82 100644
--- a/stem/descriptor/bandwidth_file.py
+++ b/stem/descriptor/bandwidth_file.py
@@ -25,7 +25,7 @@ from stem.descriptor import (
   Descriptor,
 )
 
-HEADER_DIV = '====='
+HEADER_DIV = b'====='
 
 
 # Converters header attributes to a given type. Malformed fields should be
@@ -103,11 +103,11 @@ def _parse_header(descriptor, entries):
       break  # end of the content
     elif line == HEADER_DIV:
       break  # end of header
-    elif line.startswith('node_id='):
+    elif line.startswith(b'node_id='):
       break  # version 1.0 measurement
 
-    if '=' in line:
-      key, value = line.split('=', 1)
+    if b'=' in line:
+      key, value = stem.util.str_tools._to_unicode(line).split('=', 1)
       header[key] = value
     else:
       raise ValueError("Header expected to be key=value pairs, but had '%s'" % line)
@@ -142,10 +142,11 @@ def _parse_body(descriptor, entries):
   measurements = {}
 
   for line in content.readlines():
-    attr = dict(_mappings_for('measurement', line.strip()))
+    line = stem.util.str_tools._to_unicode(line.strip())
+    attr = dict(_mappings_for('measurement', line))
 
     if 'node_id' not in attr:
-      raise ValueError("Every meaurement must include 'node_id': %s" % line.strip())
+      raise ValueError("Every meaurement must include 'node_id': %s" % line)
     elif attr['node_id'] in measurements:
       # Relay is listed multiple times. This is a bug for the bandwidth
       # authority that made this descriptor, but according to the spec
@@ -207,7 +208,7 @@ class BandwidthFile(Descriptor):
 
       * 'timestamp' is a reserved key for our mandatory header unix timestamp.
 
-      * 'content' is a reserved key for a list of our bandwidth measurements.
+      * 'content' is a reserved key for our bandwidth measurement lines.
 
       * All other keys are treated as header fields.
 
@@ -233,20 +234,20 @@ class BandwidthFile(Descriptor):
     lines = []
 
     if 'timestamp' not in exclude:
-      lines.append(timestamp)
+      lines.append(stem.util.str_tools._to_bytes(timestamp))
 
     if version == '1.0.0' and header:
       raise ValueError('Headers require BandwidthFile version 1.1 or later')
     elif version != '1.0.0':
       for k, v in header.items():
-        lines.append('%s=%s' % (k, v))
+        lines.append(stem.util.str_tools._to_bytes('%s=%s' % (k, v)))
 
       lines.append(HEADER_DIV)
 
     for measurement in content:
-      lines.append(measurement)  # TODO: replace when we have a measurement struct
+      lines.append(stem.util.str_tools._to_bytes(measurement))
 
-    return '\n'.join(lines)
+    return b'\n'.join(lines)
 
   def __init__(self, raw_content, validate = False):
     super(BandwidthFile, self).__init__(raw_content, lazy_load = not validate)
diff --git a/test/unit/descriptor/bandwidth_file.py b/test/unit/descriptor/bandwidth_file.py
index 43af974b..003f9fe8 100644
--- a/test/unit/descriptor/bandwidth_file.py
+++ b/test/unit/descriptor/bandwidth_file.py
@@ -150,7 +150,7 @@ class TestBandwidthFile(unittest.TestCase):
       'content': [],
     })
 
-    self.assertEqual('12345\nversion=1.2.0\n=====', content)
+    self.assertEqual(b'12345\nversion=1.2.0\n=====', content)
 
   @patch('time.time', Mock(return_value = 1410723598.276578))
   def test_new_header_attribute(self):
@@ -176,10 +176,10 @@ class TestBandwidthFile(unittest.TestCase):
     """
 
     test_values = (
-      '',
-      'boo',
-      '123.4',
-      '-123',
+      b'',
+      b'boo',
+      b'123.4',
+      b'-123',
     )
 
     for value in test_values:





More information about the tor-commits mailing list