[tor-commits] [stem/master] Removing _skip_until_keywords()

atagar at torproject.org atagar at torproject.org
Sat Oct 13 18:35:45 UTC 2012


commit e1ce38ebd4e49faff993e212e6959f9a46e93e50
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Aug 18 19:08:15 2012 -0700

    Removing _skip_until_keywords()
    
    The _skip_until_keywords() is almost entirely a duplicate of
    _read_until_keywords(), its only difference being that it doesn't return the
    content. Adding an argument to _read_until_keywords() to do the same.
---
 stem/descriptor/__init__.py      |   53 ++++++++-----------------------------
 stem/descriptor/networkstatus.py |    4 +-
 2 files changed, 14 insertions(+), 43 deletions(-)

diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 814fc49..151f13e 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -253,7 +253,7 @@ def _read_keyword_line_str(keyword, lines, validate = True, optional = False):
     raise ValueError("Error parsing network status document: Expected %s, received: %s" % (keyword, lines[0]))
   else: return None
 
-def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_first = False):
+def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_first = False, skip = False):
   """
   Reads from the descriptor file until we get to one of the given keywords or reach the
   end of the file.
@@ -262,16 +262,19 @@ def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_fi
   :param file descriptor_file: file with the descriptor content
   :param bool inclusive: includes the line with the keyword if True
   :param bool ignore_first: doesn't check if the first line read has one of the given keywords
+  :param bool skip: skips buffering content, returning None
   
   :returns: list with the lines until we find one of the keywords
   """
   
-  content = []
+  content = None if skip else []
   if type(keywords) == str: keywords = (keywords,)
   
   if ignore_first:
-    content.append(descriptor_file.readline())
-    if content == [None]: return []
+    first_line = descriptor_file.readline()
+    
+    if content != None and first_line != None:
+      content.append(first_line)
   
   while True:
     last_position = descriptor_file.tell()
@@ -287,49 +290,17 @@ def _read_until_keywords(keywords, descriptor_file, inclusive = False, ignore_fi
       line_keyword = line_match.groups()[0]
     
     if line_keyword in keywords:
-      if inclusive: content.append(line)
-      else: descriptor_file.seek(last_position)
+      if not inclusive:
+        descriptor_file.seek(last_position)
+      elif content != None:
+        content.append(line)
       
       break
-    else:
+    elif content != None:
       content.append(line)
   
   return content
 
-def _skip_until_keywords(keywords, descriptor_file, inclusive = False):
-  """
-  Reads and discards lines of data from the descriptor file until we get to one
-  of the given keywords or reach the end of the file.
-  
-  :param str,list keywords: keyword(s) we want to skip until
-  :param file descriptor_file: file with the descriptor content
-  :param bool inclusive: includes the line with the keyword if True
-  
-  :returns: descriptor_file with the new offset
-  """
-  
-  if type(keywords) == str: keywords = (keywords,)
-  
-  while True:
-    last_position = descriptor_file.tell()
-    line = descriptor_file.readline()
-    if not line: break # EOF
-    
-    line_match = KEYWORD_LINE.match(line)
-    
-    if not line_match:
-      # no spaces or tabs in the line
-      line_keyword = line.strip()
-    else:
-      line_keyword = line_match.groups()[0]
-    
-    if line_keyword in keywords:
-      if not inclusive: descriptor_file.seek(last_position)
-      
-      break
-  
-  return descriptor_file
-
 def _get_pseudo_pgp_block(remaining_contents):
   """
   Checks if given contents begins with a pseudo-Open-PGP-style block and, if
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index f9d89a8..3b592ec 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -53,7 +53,7 @@ import stem.version
 import stem.exit_policy
 import stem.util.enum
 
-from stem.descriptor import _read_until_keywords, _skip_until_keywords, _peek_keyword, _strptime
+from stem.descriptor import _read_until_keywords, _peek_keyword, _strptime
 from stem.descriptor import _read_keyword_line, _read_keyword_line_str, _get_pseudo_pgp_block, _peek_line
 
 _bandwidth_weights_regex = re.compile(" ".join(["W%s=\d+" % weight for weight in ["bd",
@@ -101,7 +101,7 @@ def parse_file(document_file, validate = True, flavour = Flavour.NONE):
   # store offset
   r_offset = document_file.tell()
   # skip until end of router descriptors
-  _skip_until_keywords(["bandwidth-weights", "directory-footer", "directory-signature"], document_file)
+  _read_until_keywords(["bandwidth-weights", "directory-footer", "directory-signature"], document_file, skip = True)
   # parse until end
   document_data = document_data + document_file.read()
   





More information about the tor-commits mailing list