From aeb67cd762f45108f1dd0289127e4fe1b9f674ac Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Tue, 11 Jun 2019 15:20:46 +0100 Subject: Resolve invalid escape sequences Integrate flake8 along the way which makes picking these up sooo much easier. Someone else can go fix the other violations in the future, if they're so inclined. Signed-off-by: Stephen Finucane --- routes/mapper.py | 6 +++--- routes/route.py | 23 ++++++++++++++++------- routes/util.py | 4 ++-- tox.ini | 10 +++++++++- 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 = '[^\/]+(?>> 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 -- cgit v1.2.1