[Secure-testing-commits] r14630 - in lib/python: . sectracker

Florian Weimer fw at alioth.debian.org
Fri May 7 21:08:45 UTC 2010


Author: fw
Date: 2010-05-07 21:08:39 +0000 (Fri, 07 May 2010)
New Revision: 14630

Added:
   lib/python/sectracker/regexpcase.py
Removed:
   lib/python/regexpcase.py
Modified:
   lib/python/parsers.py
Log:
sectracker.regexpcase: renamed from regexpcase


Modified: lib/python/parsers.py
===================================================================
--- lib/python/parsers.py	2010-05-07 21:05:30 UTC (rev 14629)
+++ lib/python/parsers.py	2010-05-07 21:08:39 UTC (rev 14630)
@@ -19,7 +19,7 @@
 import re
 
 import debian_support
-import regexpcase
+import sectracker.regexpcase as _regexpcase
 import xcollections
 import xpickle
 
@@ -81,14 +81,14 @@
 def _annotationdispatcher():
     # Parser for inner annotations, like (bug #1345; low)
     urgencies=set("unimportant low medium high".split())
-    @regexpcase.rule('(bug filed|%s)' % '|'.join(urgencies))
+    @_regexpcase.rule('(bug filed|%s)' % '|'.join(urgencies))
     def innerflag(groups, diag, flags, bugs):
         f = groups[0]
         if f in flags:
             diag.error("duplicate flag: " + repr(f))
         else:
             flags.add(f)
-    @regexpcase.rule(r'bug #(\d+)')
+    @_regexpcase.rule(r'bug #(\d+)')
     def innerbug(groups, diag, flags, bugs):
         no = int(groups[0])
         if no in bugs:
@@ -97,8 +97,8 @@
             bugs.add(no)
     def innerdefault(text, diag, flags, bugs):
         diag.error("invalid inner annotation: " + repr(text))
-    innerdispatch = regexpcase.RegexpCase((innerflag, innerbug),
-                                          default=innerdefault)
+    innerdispatch = _regexpcase.RegexpCase((innerflag, innerbug),
+                                           default=innerdefault)
 
     def parseinner(diag, inner):
         if not inner:
@@ -126,8 +126,8 @@
 
     # Parsers for indented annotations (NOT-FOR-US:, " - foo <unfixed>" etc.)
 
-    @regexpcase.rule(r'(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)\s*'
-                     + r'(?:\s([A-Za-z0-9:.+~-]+)\s*)?(?:\s\((.*)\))?')
+    @_regexpcase.rule(r'(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)\s*'
+                      + r'(?:\s([A-Za-z0-9:.+~-]+)\s*)?(?:\s\((.*)\))?')
     def package_version(groups, diag, anns):
         release, package, version, inner = groups
         inner = parseinner(diag, inner)
@@ -141,8 +141,8 @@
 
     pseudo_freetext = "no-dsa not-affected end-of-life".split()
     pseudo_struct = set("unfixed removed itp undetermined".split())
-    @regexpcase.rule(r'(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)'
-                     + r'\s+<([a-z-]+)>\s*(?:\s\((.*)\))?')
+    @_regexpcase.rule(r'(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)'
+                      + r'\s+<([a-z-]+)>\s*(?:\s\((.*)\))?')
     def package_pseudo(groups, diag, anns):
         release, package, version, inner = groups
         if version in pseudo_freetext:
@@ -159,7 +159,7 @@
         else:
             diag.error("invalid pseudo-version: " + repr(version))
 
-    @regexpcase.rule(r'\{(.*)\}')
+    @_regexpcase.rule(r'\{(.*)\}')
     def xref(groups, diag, anns):
         x = _sortedtuple(groups[0].strip().split())
         if x:
@@ -167,7 +167,7 @@
         else:
             diag.error("empty cross-reference")
         
-    return regexpcase.RegexpCase(
+    return _regexpcase.RegexpCase(
         ((r'(RESERVED|REJECTED)',
           lambda groups, diag, anns:
               anns.append(FlagAnnotation(diag.line(), groups[0]))),

Deleted: lib/python/regexpcase.py
===================================================================
--- lib/python/regexpcase.py	2010-05-07 21:05:30 UTC (rev 14629)
+++ lib/python/regexpcase.py	2010-05-07 21:08:39 UTC (rev 14630)
@@ -1,127 +0,0 @@
-# regexpcase.py -- Python module for regexp-based dispatching
-# Copyright (C) 2009, 2010 Florian Weimer <fw at deneb.enyo.de>
-# 
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import re
-
-class RegexpCase(object):
-    def __init__(self, rules, prefix=None, suffix=None, default=None):
-        offset = 0
-        probes = []
-        maycall = default is None or callable(default)
-
-        # We use a single regular expression and use special probe
-        # captures to figure out which one has actually matched.
-        # Hopefully, the regular expression engine will make this run
-        # fast.
-        for (regexp, action) in rules:
-            compiled = re.compile(regexp)
-            probes.append((offset, offset + 1, offset + compiled.groups + 1,
-                           action))
-            offset += compiled.groups + 1
-            if action is not None:
-                maycall = maycall and callable(action)
-        self.probes = tuple(probes)
-        self.maycall = maycall
-
-        if not self.probes:
-            raise ValueError("empty rule list")
-        if prefix is None:
-            prefix = "^(?:("
-        else:
-            if re.compile(prefix).groups > 0:
-                raise ValueError("prefix must not contain captures")
-            prefix = "^(?:" + prefix + ")(?:("
-
-        if suffix is None:
-            suffix = "))$"
-        else:
-            if re.compile(suffix).groups > 0:
-                raise ValueError("suffix must not contain captures")
-            suffix = "))(?:" + suffix + ")$"
-
-        self.regexp = re.compile(
-            prefix + ')|('.join(regexp for (regexp, action) in rules)
-            + suffix)
-
-        self.default = default
-
-    def match(self, key):
-        match = self.regexp.match(key)
-        if match is None:
-            return (None, self.default)
-        groups = match.groups()
-        for (probe, i, j, action) in self.probes:
-            if groups[probe] is not None:
-                return (groups[i:j], action)
-        raise AssertionError("pattern and offset list incongruent")
-
-    def __getitem__(self, key):
-        return self.match(key)[1]
-
-    def __call__(self, key, *args):
-        if not self.maycall:
-            raise TypeError, "not all actions are callable"
-        (groups, action) = self.match(key)
-        if action is None:
-            return None
-        if groups is None:
-            groups = key
-        return action(groups, *args)
-
-def rule(regexp):
-    """Add a regular expression to the function, for the rule list"""
-    return lambda f: (regexp, f)
-
-if __name__ == "__main__":
-    import unittest
-
-    class TestRegexpCase(unittest.TestCase):
-        def testempty(self):
-            self.assertRaises(ValueError, RegexpCase, ())
-            self.assertRaises(ValueError, RegexpCase, (), prefix="foo")
-            self.assertRaises(ValueError, RegexpCase, (), suffix="foo")
-            self.assertRaises(ValueError, RegexpCase, (), default="foo")
-            self.assertRaises(ValueError, RegexpCase, (("two", 2)),
-                                                       prefix="(f)oo")
-            self.assertRaises(ValueError, RegexpCase, (("two", 2)),
-                                                       suffix="(f)oo")
-
-        def teststrings(self):
-            rc = RegexpCase((("two", 2),
-                             ("three", 3),
-                             ("five", 5)))
-            self.assertEqual(2, rc["two"])
-            self.assertEqual(3, rc["three"])
-            self.assertEqual(5, rc["five"])
-            self.assertEqual(None, rc["seven"])
-            self.assertEquals((None, None), rc.match("seven"))
-            self.assertRaises(TypeError, rc.__call__, ())
-
-        def testcallstrings(self):
-            rc = RegexpCase((("(two)", lambda groups, x: (groups, x)),
-                             ("three", lambda groups, x: (groups, x)),
-                             ("f(i)v(e)", lambda groups, x : (groups, x))))
-            self.assertEqual((("two",), -2), rc("two", -2))
-            self.assertEqual(((), -3), rc("three", -3))
-            self.assertEqual((tuple("ie"), -5), rc("five", -5))
-            self.assertEqual(None, rc("seven", -1))
-        def testcallstringsdefault(self):
-            rc = RegexpCase([("f(i)v(e)", lambda groups, x : (groups, x))],
-                            default=lambda key, x: (key, x))
-            self.assertEqual(("seven", -1), rc("seven", -1))
-
-    unittest.main()

Copied: lib/python/sectracker/regexpcase.py (from rev 14622, lib/python/regexpcase.py)
===================================================================
--- lib/python/sectracker/regexpcase.py	                        (rev 0)
+++ lib/python/sectracker/regexpcase.py	2010-05-07 21:08:39 UTC (rev 14630)
@@ -0,0 +1,127 @@
+# sectracker.regexpcase -- Python module for regexp-based dispatching
+# Copyright (C) 2009, 2010 Florian Weimer <fw at deneb.enyo.de>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import re
+
+class RegexpCase(object):
+    def __init__(self, rules, prefix=None, suffix=None, default=None):
+        offset = 0
+        probes = []
+        maycall = default is None or callable(default)
+
+        # We use a single regular expression and use special probe
+        # captures to figure out which one has actually matched.
+        # Hopefully, the regular expression engine will make this run
+        # fast.
+        for (regexp, action) in rules:
+            compiled = re.compile(regexp)
+            probes.append((offset, offset + 1, offset + compiled.groups + 1,
+                           action))
+            offset += compiled.groups + 1
+            if action is not None:
+                maycall = maycall and callable(action)
+        self.probes = tuple(probes)
+        self.maycall = maycall
+
+        if not self.probes:
+            raise ValueError("empty rule list")
+        if prefix is None:
+            prefix = "^(?:("
+        else:
+            if re.compile(prefix).groups > 0:
+                raise ValueError("prefix must not contain captures")
+            prefix = "^(?:" + prefix + ")(?:("
+
+        if suffix is None:
+            suffix = "))$"
+        else:
+            if re.compile(suffix).groups > 0:
+                raise ValueError("suffix must not contain captures")
+            suffix = "))(?:" + suffix + ")$"
+
+        self.regexp = re.compile(
+            prefix + ')|('.join(regexp for (regexp, action) in rules)
+            + suffix)
+
+        self.default = default
+
+    def match(self, key):
+        match = self.regexp.match(key)
+        if match is None:
+            return (None, self.default)
+        groups = match.groups()
+        for (probe, i, j, action) in self.probes:
+            if groups[probe] is not None:
+                return (groups[i:j], action)
+        raise AssertionError("pattern and offset list incongruent")
+
+    def __getitem__(self, key):
+        return self.match(key)[1]
+
+    def __call__(self, key, *args):
+        if not self.maycall:
+            raise TypeError, "not all actions are callable"
+        (groups, action) = self.match(key)
+        if action is None:
+            return None
+        if groups is None:
+            groups = key
+        return action(groups, *args)
+
+def rule(regexp):
+    """Add a regular expression to the function, for the rule list"""
+    return lambda f: (regexp, f)
+
+if __name__ == "__main__":
+    import unittest
+
+    class TestRegexpCase(unittest.TestCase):
+        def testempty(self):
+            self.assertRaises(ValueError, RegexpCase, ())
+            self.assertRaises(ValueError, RegexpCase, (), prefix="foo")
+            self.assertRaises(ValueError, RegexpCase, (), suffix="foo")
+            self.assertRaises(ValueError, RegexpCase, (), default="foo")
+            self.assertRaises(ValueError, RegexpCase, (("two", 2)),
+                                                       prefix="(f)oo")
+            self.assertRaises(ValueError, RegexpCase, (("two", 2)),
+                                                       suffix="(f)oo")
+
+        def teststrings(self):
+            rc = RegexpCase((("two", 2),
+                             ("three", 3),
+                             ("five", 5)))
+            self.assertEqual(2, rc["two"])
+            self.assertEqual(3, rc["three"])
+            self.assertEqual(5, rc["five"])
+            self.assertEqual(None, rc["seven"])
+            self.assertEquals((None, None), rc.match("seven"))
+            self.assertRaises(TypeError, rc.__call__, ())
+
+        def testcallstrings(self):
+            rc = RegexpCase((("(two)", lambda groups, x: (groups, x)),
+                             ("three", lambda groups, x: (groups, x)),
+                             ("f(i)v(e)", lambda groups, x : (groups, x))))
+            self.assertEqual((("two",), -2), rc("two", -2))
+            self.assertEqual(((), -3), rc("three", -3))
+            self.assertEqual((tuple("ie"), -5), rc("five", -5))
+            self.assertEqual(None, rc("seven", -1))
+        def testcallstringsdefault(self):
+            rc = RegexpCase([("f(i)v(e)", lambda groups, x : (groups, x))],
+                            default=lambda key, x: (key, x))
+            self.assertEqual(("seven", -1), rc("seven", -1))
+
+    unittest.main()




More information about the Secure-testing-commits mailing list