[tor-commits] [stem/master] Adding optional key arg to is_next_mapping checks

atagar at torproject.org atagar at torproject.org
Wed Nov 9 18:26:11 UTC 2011


commit eb5b522430bc32acb0f8f18c1e92e8ae7782df62
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Nov 6 11:24:21 2011 -0800

    Adding optional key arg to is_next_mapping checks
    
    Option to simplify testing for the next key being parsed.
---
 stem/types.py                   |   20 +++++++++++++-------
 test/unit/types/control_line.py |    9 ++++++---
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/stem/types.py b/stem/types.py
index d152542..17d812c 100644
--- a/stem/types.py
+++ b/stem/types.py
@@ -275,11 +275,13 @@ class ControlLine(str):
     start_quote, end_quote = _get_quote_indeces(self._remainder, escaped)
     return start_quote == 0 and end_quote != -1
   
-  def is_next_mapping(self, quoted = False, escaped = False):
+  def is_next_mapping(self, key = None, quoted = False, escaped = False):
     """
     Checks if our next entry is a KEY=VALUE mapping or not.
     
     Arguments:
+      key (str)      - checks that the key matches this value, skipping the
+                       check if None
       quoted (bool)  - checks that the mapping is to a quoted value
       escaped (bool) - unescapes the CONTROL_ESCAPES escape sequences
     
@@ -291,12 +293,16 @@ class ControlLine(str):
     remainder = self._remainder # temp copy to avoid locking
     key_match = KEY_ARG.match(remainder)
     
-    if key_match and quoted:
-      # checks that we have a quoted value and that it comes after the 'key='
-      start_quote, end_quote = _get_quote_indeces(remainder, escaped)
-      return start_quote == key_match.end() and end_quote != -1
-    elif key_match:
-      return True # we just needed to check for the key
+    if key_match:
+      if key and key != key_match.groups()[0]:
+        return False
+      
+      if quoted:
+        # checks that we have a quoted value and that it comes after the 'key='
+        start_quote, end_quote = _get_quote_indeces(remainder, escaped)
+        return start_quote == key_match.end() and end_quote != -1
+      else:
+        return True # we just needed to check for the key
     else:
       return False # doesn't start with a key
   
diff --git a/test/unit/types/control_line.py b/test/unit/types/control_line.py
index 7f7349c..bacda76 100644
--- a/test/unit/types/control_line.py
+++ b/test/unit/types/control_line.py
@@ -91,7 +91,9 @@ class TestControlLine(unittest.TestCase):
     self.assertFalse(line.is_empty())
     self.assertFalse(line.is_next_quoted())
     self.assertTrue(line.is_next_mapping())
-    self.assertTrue(line.is_next_mapping(True))
+    self.assertTrue(line.is_next_mapping(key = "Tor"))
+    self.assertTrue(line.is_next_mapping(key = "Tor", quoted = True))
+    self.assertTrue(line.is_next_mapping(quoted = True))
     
     # try popping this as a non-quoted mapping
     self.assertEquals(line.pop_mapping(), ('Tor', '"0.2.1.30'))
@@ -126,8 +128,9 @@ class TestControlLine(unittest.TestCase):
     
     self.assertEquals(line.remainder(), r'COOKIEFILE="/tmp/my data\\\"dir//control_auth_cookie"')
     self.assertTrue(line.is_next_mapping())
-    self.assertTrue(line.is_next_mapping(True))
-    self.assertTrue(line.is_next_mapping(True, True))
+    self.assertTrue(line.is_next_mapping(key = "COOKIEFILE"))
+    self.assertTrue(line.is_next_mapping(quoted = True))
+    self.assertTrue(line.is_next_mapping(quoted = True, escaped = True))
     cookie_file_entry = line.remainder()
     
     # try a general pop





More information about the tor-commits mailing list