[z3-checkins] r56076 - in z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance: . tests
ianb at codespeak.net
ianb at codespeak.net
Wed Jun 25 21:13:10 CEST 2008
Author: ianb
Date: Wed Jun 25 21:13:07 2008
New Revision: 56076
Added:
z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/stringmatch.py
- copied unchanged from r56075, z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/classmatch.py
z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_stringmatch.txt
- copied, changed from r56075, z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_classmatch.txt
Removed:
z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/classmatch.py
z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_classmatch.txt
Log:
rename classmatch to stringmatch
Deleted: /z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/classmatch.py
==============================================================================
--- /z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/classmatch.py Wed Jun 25 21:13:07 2008
+++ (empty file)
@@ -1,194 +0,0 @@
-import fnmatch
-import re
-
-__all__ = ['compile_matcher', 'compile_header_matcher', 'MatchSyntaxError']
-
-_prefix_re = re.compile(r'^([a-z_-]+):', re.I)
-
-def compile_matcher(s, default=None):
- match = _prefix_re.search(s)
- if not match:
- if default is None:
- ## FIXME: show possible names?
- raise MatchSyntaxError(
- "You must provide a match type (like type:) in the pattern %r"
- % s)
- type = default
- pattern = s
- else:
- type = match.group(1).lower()
- pattern = s[match.end():]
- if type not in _matches:
- ## FIXME: show possible names?
- raise MatchSyntaxError(
- "The type %r is not valid"
- % (type + ':'))
- return _matches[type](pattern)
-
-def compile_header_matcher(s, default='exact'):
- if ':' not in s:
- raise MatchSyntaxError(
- "A header match must be like 'Header: pattern'; you have no header in %r"
- % s)
- header, pattern = s.split(':', 1)
- header = header.strip()
- pattern = pattern.lstrip()
- pattern = compile_matcher(pattern, default)
- if '*' in header:
- return HeaderWildcardMatcher(header, pattern)
- else:
- return HeaderMatcher(header, pattern)
-
-class MatchSyntaxError(Exception):
- """
- Raised if you have an invalid expression in a matcher
- """
-
-_matches = {}
-
-def _add_matcher(cls):
- _matches[cls.name] = cls
-
-class Matcher(object):
-
- name = None
-
- def __init__(self, pattern):
- self.pattern = pattern
-
- def __call__(self, s):
- raise NotImplementedError
-
- def __unicode__(self):
- return '%s:%s' % (self.name, self.pattern)
-
- def __str__(self):
- return str(unicode(self))
-
- def __repr__(self):
- return '<%s %s>' % (self.__class__.__name__, str(self))
-
-class WildcardMatcher(Matcher):
-
- name = 'wildcard'
-
- def __init__(self, pattern):
- super(WildcardMatcher, self).__init__(pattern)
- self.compiled = re.compile(fnmatch.translate(pattern))
-
- def __call__(self, s):
- return bool(self.compiled.match(s))
-
-_add_matcher(WildcardMatcher)
-
-class WildcardInsensitiveMatcher(Matcher):
-
- name = 'wildcard-insensitive'
-
- def __init__(self, pattern):
- super(WildcardInsensitiveMatcher, self).__init__(pattern)
- self.compiled = re.compile(fnmatch.translate(pattern), re.I)
-
- def __call__(self, s):
- return bool(self.compiled.match(s))
-
-_add_matcher(WildcardInsensitiveMatcher)
-
-class RegexMatcher(Matcher):
-
- name = 'regex'
-
- def __init__(self, pattern):
- super(RegexMatcher, self).__init__(pattern)
- try:
- self.compiled = re.compile(pattern)
- except re.error, e:
- raise MatchSyntaxError(
- "Invalid regular expression %r: %s"
- % (pattern, e))
-
- def __call__(self, s):
- return bool(self.compiled.match(s))
-
-_add_matcher(RegexMatcher)
-
-class PathMatcher(Matcher):
-
- name = 'path'
-
- def __init__(self, pattern):
- if not pattern.endswith('/'):
- pattern += '/'
- super(PathMatcher, self).__init__(pattern)
-
- def __call__(self, s):
- return (s == self.pattern[:-1]
- or s.startswith(self.pattern))
-
-_add_matcher(PathMatcher)
-
-class ExactMatcher(Matcher):
-
- name = 'exact'
-
- def __call__(self, s):
- return s == self.pattern
-
-_add_matcher(ExactMatcher)
-
-class ExactInsensitiveMatcher(Matcher):
-
- name = 'exact-insensitive'
-
- def __call__(self, s):
- return s.lower() == self.pattern.lower()
-
-_add_matcher(ExactInsensitiveMatcher)
-
-class ContainsMatcher(Matcher):
-
- name = 'contains'
-
- def __call__(self, s):
- return self.pattern in s
-
-_add_matcher(ContainsMatcher)
-
-class ContainsInsensitiveMatcher(Matcher):
-
- name = 'contains-insensitive'
-
- def __call__(self, s):
- return self.pattern.lower() in s.lower()
-
-_add_matcher(ContainsInsensitiveMatcher)
-
-class HeaderMatcher(object):
-
- def __init__(self, header, pattern):
- self.header = header
- self.pattern = pattern
-
- def __call__(self, headers):
- return self.pattern(headers.get(self.header, ''))
-
- def __unicode__(self):
- return u'%s: %s' % (self.header, self.pattern)
-
-class HeaderWildcardMatcher(object):
-
- def __init__(self, header, pattern):
- self.header = header
- self.header_re = re.compile(fnmatch.translate(header), re.I)
- self.pattern = pattern
-
- def __call__(self, headers):
- matches = self.header_re.match
- for key in headers:
- if matches(key):
- if self.pattern(headers[key]):
- return True
- return False
-
- def __unicode__(self):
- return u'%s: %s' % (self.header, self.pattern)
Deleted: /z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_classmatch.txt
==============================================================================
--- /z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_classmatch.txt Wed Jun 25 21:13:07 2008
+++ (empty file)
@@ -1,50 +0,0 @@
-This tests different kinds of matchers.
-
- >>> from deliverance.classmatch import compile_matcher, compile_header_matcher
- >>> def match(pattern, *values):
- ... for value in values:
- ... result = compile_matcher(pattern)(value)
- ... print '%s: %s' % (value, result)
- >>> match('exact:foo', 'foo', ' foo')
- foo: True
- foo: False
- >>> match('exact-insensitive:foo', 'foo', 'fOo', ' FOO')
- foo: True
- fOo: True
- FOO: False
- >>> match('wildcard:foo*', 'foobar', 'barfoo', 'FOOBAR')
- foobar: True
- barfoo: False
- FOOBAR: False
- >>> match('wildcard-insensitive:*foo*', 'foobar', 'BARFOOBAR', 'fobar')
- foobar: True
- BARFOOBAR: True
- fobar: False
- >>> match('regex:^\\w+$', 'asdf', '1234', ' ', '')
- asdf: True
- 1234: True
- : False
- : False
- >>> match('path:/foo', '/foo', '/foo/', '/foo/something', '/foobar')
- /foo: True
- /foo/: True
- /foo/something: True
- /foobar: False
- >>> match('contains:foo', 'somefoo thing')
- somefoo thing: True
-
-And then some header matching:
-
- >>> def mheader(pattern, headers):
- ... return compile_header_matcher(pattern)(headers)
- >>> mheader('Something: foo', {'Something': 'foo'})
- True
- >>> mheader('Something: foo', {'Something': 'foobar'})
- False
- >>> mheader('Something: contains:foo', {'Something': 'foobar'})
- True
- >>> mheader('X-*: contains:evil', {'X-Other': 'nothing', 'X-Foo-Bar': 'some evil!'})
- True
- >>> mheader('X-*: contains:evil', {'X-Foo-Bar': 'okay'})
- False
-
Copied: z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_stringmatch.txt (from r56075, z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_classmatch.txt)
==============================================================================
--- z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_classmatch.txt (original)
+++ z3/deliverance/sandbox/ianb/deliverance/trunk/deliverance/tests/test_stringmatch.txt Wed Jun 25 21:13:07 2008
@@ -1,6 +1,6 @@
This tests different kinds of matchers.
- >>> from deliverance.classmatch import compile_matcher, compile_header_matcher
+ >>> from deliverance.stringmatch import compile_matcher, compile_header_matcher
>>> def match(pattern, *values):
... for value in values:
... result = compile_matcher(pattern)(value)
More information about the z3-checkins
mailing list