summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--routes/mapper.py6
-rw-r--r--routes/route.py23
-rw-r--r--routes/util.py4
-rw-r--r--tox.ini10
4 files changed, 30 insertions, 13 deletions
diff --git a/routes/mapper.py b/routes/mapper.py
index eb4060a..cf4dcf1 100644
--- a/routes/mapper.py
+++ b/routes/mapper.py
@@ -511,7 +511,7 @@ class Mapper(SubMapperParent):
m.connect('date/:year/:month/:day', controller="blog",
action="view")
m.connect('archives/:page', controller="blog", action="by_page",
- requirements = { 'page':'\d{1,2}' })
+ requirements = { 'page':'\\d{1,2}' })
m.connect('category_list', 'archives/category/:section',
controller='blog', action='category',
section='home', type='list')
@@ -995,7 +995,7 @@ class Mapper(SubMapperParent):
map.resource('message', 'messages',
path_prefix='{project_id}/',
- requirements={"project_id": R"\d+"})
+ requirements={"project_id": R"\\d+"})
# POST /01234/message
# success, project_id is set to "01234"
# POST /foo/message
@@ -1177,7 +1177,7 @@ class Mapper(SubMapperParent):
**route_options)
self.connect(name_prefix + name, path, **route_options)
- requirements_regexp = '[^\/]+(?<!\\\)'
+ requirements_regexp = '[^\\/]+(?<!\\\\)'
# Add the routes that deal with member methods of a resource
for method, lst in six.iteritems(member_methods):
diff --git a/routes/route.py b/routes/route.py
index c649786..b03e1cf 100644
--- a/routes/route.py
+++ b/routes/route.py
@@ -34,9 +34,9 @@ class Route(object):
>>> newroute = Route(None, 'date/:year/:month/:day',
... controller="blog", action="view")
>>> newroute = Route(None, 'archives/:page', controller="blog",
- ... action="by_page", requirements = { 'page':'\d{1,2}' })
+ ... action="by_page", requirements = { 'page':'\\d{1,2}' })
>>> newroute.reqs
- {'page': '\\\d{1,2}'}
+ {'page': '\\\\d{1,2}'}
.. Note::
Route is generally not called directly, a Mapper instance
@@ -145,13 +145,22 @@ class Route(object):
"""Utility function to walk the route, and pull out the valid
dynamic/wildcard keys."""
collecting = False
+ escaping = False
current = ''
done_on = ''
var_type = ''
just_started = False
routelist = []
for char in routepath:
- if char in [':', '*', '{'] and not collecting and not self.static \
+ if escaping:
+ if char in ['\\', ':', '*', '{', '}']:
+ current += char
+ else:
+ current += '\\' + char
+ escaping = False
+ elif char == '\\':
+ escaping = True
+ elif char in [':', '*', '{'] and not collecting and not self.static \
or char in ['{'] and not collecting:
just_started = True
collecting = True
@@ -324,7 +333,7 @@ class Route(object):
else:
regpart = '(?:%s)' % partmatch
if part['type'] == '.':
- regparts.append('(?:\.%s)??' % regpart)
+ regparts.append(r'(?:\.%s)??' % regpart)
else:
regparts.append(regpart)
else:
@@ -367,7 +376,7 @@ class Route(object):
else:
partreg = '(?:%s)' % self.reqs[var]
if typ == '.':
- partreg = '(?:\.%s)??' % partreg
+ partreg = r'(?:\.%s)??' % partreg
elif var == 'controller':
if include_names:
partreg = '(?P<%s>%s)' % (var, '|'.join(map(re.escape,
@@ -390,7 +399,7 @@ class Route(object):
else:
partreg = '(?:[^%s]+?)' % exclude_chars
if typ == '.':
- partreg = '(?:\.%s)??' % partreg
+ partreg = r'(?:\.%s)??' % partreg
else:
end = ''.join(self.done_chars)
rem = rest
@@ -530,7 +539,7 @@ class Route(object):
if sub_domains and environ and 'HTTP_HOST' in environ:
host = environ['HTTP_HOST'].split(':')[0]
- sub_match = re.compile('^(.+?)\.%s$' % domain_match)
+ sub_match = re.compile(r'^(.+?)\.%s$' % domain_match)
subdomain = re.sub(sub_match, r'\1', host)
if subdomain not in sub_domains_ignore and host != subdomain:
sub_domain = subdomain
diff --git a/routes/util.py b/routes/util.py
index c48445f..54c8951 100644
--- a/routes/util.py
+++ b/routes/util.py
@@ -94,7 +94,7 @@ def _subdomain_check(kargs, mapper, environ):
if len(hostmatch) > 1:
port += ':' + hostmatch[1]
- match = re.match('^(.+?)\.(%s)$' % mapper.domain_match, host)
+ match = re.match(r'^(.+?)\.(%s)$' % mapper.domain_match, host)
host_subdomain, domain = match.groups() if match else (None, host)
subdomain = as_unicode(subdomain, mapper.encoding)
@@ -512,7 +512,7 @@ def controller_scan(directory=None):
for fname in os.listdir(dirname):
filename = os.path.join(dirname, fname)
if os.path.isfile(filename) and \
- re.match('^[^_]{1,1}.*\.py$', fname):
+ re.match(r'^[^_]{1,1}.*\.py$', fname):
controllers.append(prefix + fname[:-3])
elif os.path.isdir(filename):
controllers.extend(find_controllers(filename,
diff --git a/tox.ini b/tox.ini
index f979bbb..4defb14 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist = py{27,35,36},pypy,pypy3
+envlist = py{27,35,36},pypy,pypy3,style
[testenv]
deps=
@@ -12,3 +12,11 @@ commands=
pip install .[middleware]
# webob optional dependency is fulfilled by [middleware] extra requirement
python -c "import webob"
+
+[testenv:style]
+deps = flake8
+commands = flake8 routes
+
+[flake8]
+# These are all ignored until someone decided to go fix them
+ignore = E125,E127,E128,E226,E305,E402,E501,E502,E504,F401,W503,W504