Use constants for pattern style prefixes

The prefix used for pattern styles should be kept together with the
respective style implementation.
This commit is contained in:
Michael Hanselmann 2016-01-18 13:05:48 +01:00
parent 190107ada7
commit 1fa4d2e516
1 changed files with 16 additions and 7 deletions

View File

@ -316,6 +316,8 @@ def normalized(func):
class PatternBase:
"""Shared logic for inclusion/exclusion patterns.
"""
PREFIX = NotImplemented
def __init__(self, pattern):
self.pattern_orig = pattern
self.match_count = 0
@ -360,6 +362,8 @@ class PathPrefixPattern(PatternBase):
If a directory is specified, all paths that start with that
path match as well. A trailing slash makes no difference.
"""
PREFIX = "pp"
def _prepare(self, pattern):
self.pattern = os.path.normpath(pattern).rstrip(os.path.sep) + os.path.sep
@ -371,6 +375,8 @@ class FnmatchPattern(PatternBase):
"""Shell glob patterns to exclude. A trailing slash means to
exclude the contents of a directory, but not the directory itself.
"""
PREFIX = "fm"
def _prepare(self, pattern):
if pattern.endswith(os.path.sep):
pattern = os.path.normpath(pattern).rstrip(os.path.sep) + os.path.sep + '*' + os.path.sep
@ -390,6 +396,8 @@ class FnmatchPattern(PatternBase):
class RegexPattern(PatternBase):
"""Regular expression to exclude.
"""
PREFIX = "re"
def _prepare(self, pattern):
self.pattern = pattern
self.regex = re.compile(pattern)
@ -402,11 +410,12 @@ class RegexPattern(PatternBase):
return (self.regex.search(path) is not None)
_DEFAULT_PATTERN_STYLE = "fm"
_PATTERN_STYLES = {
"fm": FnmatchPattern,
"re": RegexPattern,
}
_PATTERN_STYLES = set([
FnmatchPattern,
RegexPattern,
])
_PATTERN_STYLE_BY_PREFIX = dict((i.PREFIX, i) for i in _PATTERN_STYLES)
def parse_pattern(pattern):
@ -415,9 +424,9 @@ def parse_pattern(pattern):
if len(pattern) > 2 and pattern[2] == ":" and pattern[:2].isalnum():
(style, pattern) = (pattern[:2], pattern[3:])
else:
style = _DEFAULT_PATTERN_STYLE
style = FnmatchPattern.PREFIX
cls = _PATTERN_STYLES.get(style, None)
cls = _PATTERN_STYLE_BY_PREFIX.get(style, None)
if cls is None:
raise ValueError("Unknown pattern style: {}".format(style))