{
    "file_diffs": [
        {
            "old_file_content": "import unittest\nfrom pyramid import testing\nfrom pyramid.compat import (\n    text_,\n    PY3,\n    )\n\nclass TestRoute(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.urldispatch import Route\n        return Route\n\n    def _makeOne(self, *arg):\n        return self._getTargetClass()(*arg)\n\n    def test_provides_IRoute(self):\n        from pyramid.interfaces import IRoute\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoute, self._makeOne('name', 'pattern'))\n\n    def test_ctor(self):\n        import types\n        route = self._makeOne('name', ':path', 'factory')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, 'factory')\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_ctor_defaults(self):\n        import types\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, None)\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_match(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.match('/whatever'), {'path':'whatever'})\n\n    def test_generate(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.generate({'path':'abc'}), '/abc')\n\nclass RoutesMapperTests(unittest.TestCase):\n    def setUp(self):\n        testing.setUp()\n\n    def tearDown(self):\n        testing.tearDown()\n        \n    def _getRequest(self, **kw):\n        from pyramid.threadlocal import get_current_registry\n        environ = {'SERVER_NAME':'localhost',\n                   'wsgi.url_scheme':'http'}\n        environ.update(kw)\n        request = DummyRequest(environ)\n        reg = get_current_registry()\n        request.registry = reg\n        return request\n\n    def _getTargetClass(self):\n        from pyramid.urldispatch import RoutesMapper\n        return RoutesMapper\n\n    def _makeOne(self):\n        klass = self._getTargetClass()\n        return klass()\n\n    def test_provides_IRoutesMapper(self):\n        from pyramid.interfaces import IRoutesMapper\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoutesMapper, self._makeOne())\n\n    def test_no_route_matches(self):\n        mapper = self._makeOne()\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['match'], None)\n        self.assertEqual(result['route'], None)\n\n    def test_connect_name_exists_removes_old(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test_connect_static(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n\n    def test_connect_static_overridden(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test___call__pathinfo_cant_be_decoded(self):\n        from pyramid.exceptions import URLDecodeError\n        mapper = self._makeOne()\n        if PY3: # pragma: no cover\n            path_info = b'\\xff\\xfe\\xe6\\x00'.decode('latin-1')\n        else:\n            path_info = b'\\xff\\xfe\\xe6\\x00'\n        request = self._getRequest(PATH_INFO=path_info)\n        self.assertRaises(URLDecodeError, mapper, request)\n\n    def test___call__route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_matches_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article',\n                       predicates=[lambda *arg: True])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_fails_to_match_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/article1',\n                       predicates=[lambda *arg: True, lambda *arg: False])\n        mapper.connect('bar', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['bar'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__custom_predicate_gets_info(self):\n        mapper = self._makeOne()\n        def pred(info, request):\n            self.assertEqual(info['match'], {'action':'action1'})\n            self.assertEqual(info['route'], mapper.routes['foo'])\n            return True\n        mapper.connect('foo', 'archives/:action/article1', predicates=[pred])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        mapper(request)\n\n    def test_cc_bug(self):\n        # \"unordered\" as reported in IRC by author of\n        # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/\n        mapper = self._makeOne()\n        mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf')\n        mapper.connect('juri',\n                       'licenses/:license_code/:license_version/:jurisdiction')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['rdf'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/usa')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['juri'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n        self.assertEqual(result['match']['jurisdiction'], 'usa')\n\n    def test___call__root_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_matches2(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_empty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_notempty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__no_path_info(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest()\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test_has_routes(self):\n        mapper = self._makeOne()\n        self.assertEqual(mapper.has_routes(), False)\n        mapper.connect('whatever', 'archives/:action/:article')\n        self.assertEqual(mapper.has_routes(), True)\n\n    def test_get_routes(self):\n        from pyramid.urldispatch import Route\n        mapper = self._makeOne()\n        self.assertEqual(mapper.get_routes(), [])\n        mapper.connect('whatever', 'archives/:action/:article')\n        routes = mapper.get_routes()\n        self.assertEqual(len(routes), 1)\n        self.assertEqual(routes[0].__class__, Route)\n\n    def test_get_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('whatever', 'archives/:action/:article')\n        result = mapper.get_route('whatever')\n        self.assertEqual(result.pattern, 'archives/:action/:article')\n\n    def test_get_route_misses(self):\n        mapper = self._makeOne()\n        result = mapper.get_route('whatever')\n        self.assertEqual(result, None)\n\n    def test_generate(self):\n        mapper = self._makeOne()\n        def generator(kw):\n            return 123\n        route = DummyRoute(generator)\n        mapper.routes['abc'] =  route\n        self.assertEqual(mapper.generate('abc', {}), 123)\n\nclass TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\nclass TestCompileRouteFunctional(unittest.TestCase):\n    def matches(self, pattern, path, expected):\n        from pyramid.urldispatch import _compile_route\n        matcher = _compile_route(pattern)[0]\n        result = matcher(path)\n        self.assertEqual(result, expected)\n\n    def generates(self, pattern, dict, result):\n        from pyramid.urldispatch import _compile_route\n        self.assertEqual(_compile_route(pattern)[1](dict), result)\n\n    def test_matcher_functional_notdynamic(self):\n        self.matches('/', '', None)\n        self.matches('', '', None)\n        self.matches('/', '/foo', None)\n        self.matches('/foo/', '/foo', None)\n        self.matches('', '/', {})\n        self.matches('/', '/', {})\n\n    def test_matcher_functional_newstyle(self):\n        self.matches('/{x}', '', None)\n        self.matches('/{x}', '/', None)\n        self.matches('/abc/{def}', '/abc/', None)\n        self.matches('/{x}', '/a', {'x':'a'})\n        self.matches('zzz/{x}', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/{x}*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/{x}*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        self.matches('{x}', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a'), 'x')})\n        self.matches('/foo/{id}.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/{num:[0-9]+}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('/{num:[0-9]*}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('zzz/{_}', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/{_abc}', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/{abc_def}', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_matcher_functional_oldstyle(self):\n        self.matches('/:x', '', None)\n        self.matches('/:x', '/', None)\n        self.matches('/abc/:def', '/abc/', None)\n        self.matches('/:x', '/a', {'x':'a'})\n        self.matches('zzz/:x', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/:x*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        # pattern, path, expected\n        self.matches(':x', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a', 'utf-8'), 'x')})\n        self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/foo/:id_html', '/foo/bar_html', {'id_html':'bar_html'})\n        self.matches('zzz/:_', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/:_abc', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/:abc_def', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_generator_functional_notdynamic(self):\n        self.generates('', {}, '/')\n        self.generates('/', {}, '/')\n\n    def test_generator_functional_newstyle(self):\n        self.generates('/{x}', {'x':''}, '/')\n        self.generates('/{x}', {'x':'a'}, '/a')\n        self.generates('zzz/{x}', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/{x}', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/{x}*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/{id}.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/{_}', {'_':'20'}, '/foo/20')\n        self.generates('/foo/{_abc}', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/{abc_def}', {'abc_def':'20'}, '/foo/20')\n        \n    def test_generator_functional_oldstyle(self):\n        self.generates('/:x', {'x':''}, '/')\n        self.generates('/:x', {'x':'a'}, '/a')\n        self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/:x', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/:x*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/:_', {'_':'20'}, '/foo/20')\n        self.generates('/foo/:_abc', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/:abc_def', {'abc_def':'20'}, '/foo/20')\n\nclass DummyContext(object):\n    \"\"\" \"\"\"\n        \nclass DummyRequest(object):\n    def __init__(self, environ):\n        self.environ = environ\n    \nclass DummyRoute(object):\n    def __init__(self, generator):\n        self.generate = generator\n        \n",
            "new_file_content": "import unittest\nfrom pyramid import testing\nfrom pyramid.compat import (\n    text_,\n    PY3,\n    )\n\nclass TestRoute(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.urldispatch import Route\n        return Route\n\n    def _makeOne(self, *arg):\n        return self._getTargetClass()(*arg)\n\n    def test_provides_IRoute(self):\n        from pyramid.interfaces import IRoute\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoute, self._makeOne('name', 'pattern'))\n\n    def test_ctor(self):\n        import types\n        route = self._makeOne('name', ':path', 'factory')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, 'factory')\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_ctor_defaults(self):\n        import types\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, None)\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_match(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.match('/whatever'), {'path':'whatever'})\n\n    def test_generate(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.generate({'path':'abc'}), '/abc')\n\nclass RoutesMapperTests(unittest.TestCase):\n    def setUp(self):\n        testing.setUp()\n\n    def tearDown(self):\n        testing.tearDown()\n        \n    def _getRequest(self, **kw):\n        from pyramid.threadlocal import get_current_registry\n        environ = {'SERVER_NAME':'localhost',\n                   'wsgi.url_scheme':'http'}\n        environ.update(kw)\n        request = DummyRequest(environ)\n        reg = get_current_registry()\n        request.registry = reg\n        return request\n\n    def _getTargetClass(self):\n        from pyramid.urldispatch import RoutesMapper\n        return RoutesMapper\n\n    def _makeOne(self):\n        klass = self._getTargetClass()\n        return klass()\n\n    def test_provides_IRoutesMapper(self):\n        from pyramid.interfaces import IRoutesMapper\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoutesMapper, self._makeOne())\n\n    def test_no_route_matches(self):\n        mapper = self._makeOne()\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['match'], None)\n        self.assertEqual(result['route'], None)\n\n    def test_connect_name_exists_removes_old(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test_connect_static(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n\n    def test_connect_static_overridden(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test___call__pathinfo_cant_be_decoded(self):\n        from pyramid.exceptions import URLDecodeError\n        mapper = self._makeOne()\n        if PY3: # pragma: no cover\n            path_info = b'\\xff\\xfe\\xe6\\x00'.decode('latin-1')\n        else:\n            path_info = b'\\xff\\xfe\\xe6\\x00'\n        request = self._getRequest(PATH_INFO=path_info)\n        self.assertRaises(URLDecodeError, mapper, request)\n\n    def test___call__route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_matches_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article',\n                       predicates=[lambda *arg: True])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_fails_to_match_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/article1',\n                       predicates=[lambda *arg: True, lambda *arg: False])\n        mapper.connect('bar', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['bar'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__custom_predicate_gets_info(self):\n        mapper = self._makeOne()\n        def pred(info, request):\n            self.assertEqual(info['match'], {'action':'action1'})\n            self.assertEqual(info['route'], mapper.routes['foo'])\n            return True\n        mapper.connect('foo', 'archives/:action/article1', predicates=[pred])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        mapper(request)\n\n    def test_cc_bug(self):\n        # \"unordered\" as reported in IRC by author of\n        # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/\n        mapper = self._makeOne()\n        mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf')\n        mapper.connect('juri',\n                       'licenses/:license_code/:license_version/:jurisdiction')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['rdf'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/usa')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['juri'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n        self.assertEqual(result['match']['jurisdiction'], 'usa')\n\n    def test___call__root_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_matches2(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_empty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_notempty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__no_path_info(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest()\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test_has_routes(self):\n        mapper = self._makeOne()\n        self.assertEqual(mapper.has_routes(), False)\n        mapper.connect('whatever', 'archives/:action/:article')\n        self.assertEqual(mapper.has_routes(), True)\n\n    def test_get_routes(self):\n        from pyramid.urldispatch import Route\n        mapper = self._makeOne()\n        self.assertEqual(mapper.get_routes(), [])\n        mapper.connect('whatever', 'archives/:action/:article')\n        routes = mapper.get_routes()\n        self.assertEqual(len(routes), 1)\n        self.assertEqual(routes[0].__class__, Route)\n\n    def test_get_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('whatever', 'archives/:action/:article')\n        result = mapper.get_route('whatever')\n        self.assertEqual(result.pattern, 'archives/:action/:article')\n\n    def test_get_route_misses(self):\n        mapper = self._makeOne()\n        result = mapper.get_route('whatever')\n        self.assertEqual(result, None)\n\n    def test_generate(self):\n        mapper = self._makeOne()\n        def generator(kw):\n            return 123\n        route = DummyRoute(generator)\n        mapper.routes['abc'] =  route\n        self.assertEqual(mapper.generate('abc', {}), 123)\n\nclass TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\nclass TestCompileRouteFunctional(unittest.TestCase):\n    def matches(self, pattern, path, expected):\n        from pyramid.urldispatch import _compile_route\n        matcher = _compile_route(pattern)[0]\n        result = matcher(path)\n        self.assertEqual(result, expected)\n\n    def generates(self, pattern, dict, result):\n        from pyramid.urldispatch import _compile_route\n        self.assertEqual(_compile_route(pattern)[1](dict), result)\n\n    def test_matcher_functional_notdynamic(self):\n        self.matches('/', '', None)\n        self.matches('', '', None)\n        self.matches('/', '/foo', None)\n        self.matches('/foo/', '/foo', None)\n        self.matches('', '/', {})\n        self.matches('/', '/', {})\n\n    def test_matcher_functional_newstyle(self):\n        self.matches('/{x}', '', None)\n        self.matches('/{x}', '/', None)\n        self.matches('/abc/{def}', '/abc/', None)\n        self.matches('/{x}', '/a', {'x':'a'})\n        self.matches('zzz/{x}', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/{x}*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/{x}*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        self.matches('{x}', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a'), 'x')})\n        self.matches('/foo/{id}.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/{num:[0-9]+}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('/{num:[0-9]*}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('zzz/{_}', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/{_abc}', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/{abc_def}', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_matcher_functional_oldstyle(self):\n        self.matches('/:x', '', None)\n        self.matches('/:x', '/', None)\n        self.matches('/abc/:def', '/abc/', None)\n        self.matches('/:x', '/a', {'x':'a'})\n        self.matches('zzz/:x', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/:x*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        # pattern, path, expected\n        self.matches(':x', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a', 'utf-8'), 'x')})\n        self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/foo/:id_html', '/foo/bar_html', {'id_html':'bar_html'})\n        self.matches('zzz/:_', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/:_abc', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/:abc_def', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_generator_functional_notdynamic(self):\n        self.generates('', {}, '/')\n        self.generates('/', {}, '/')\n\n    def test_generator_functional_newstyle(self):\n        self.generates('/{x}', {'x':''}, '/')\n        self.generates('/{x}', {'x':'a'}, '/a')\n        self.generates('zzz/{x}', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/{x}', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/{x}*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/{id}.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/{_}', {'_':'20'}, '/foo/20')\n        self.generates('/foo/{_abc}', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/{abc_def}', {'abc_def':'20'}, '/foo/20')\n        \n    def test_generator_functional_oldstyle(self):\n        self.generates('/:x', {'x':''}, '/')\n        self.generates('/:x', {'x':'a'}, '/a')\n        self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/:x', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/:x*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/:_', {'_':'20'}, '/foo/20')\n        self.generates('/foo/:_abc', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/:abc_def', {'abc_def':'20'}, '/foo/20')\n\nclass DummyContext(object):\n    \"\"\" \"\"\"\n        \nclass DummyRequest(object):\n    def __init__(self, environ):\n        self.environ = environ\n    \nclass DummyRoute(object):\n    def __init__(self, generator):\n        self.generate = generator\n        \n",
            "header": {
                "file": {
                    "path": "pyramid/tests/test_urldispatch.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "e15242f75",
                "new_commit_hash": "b2164717e",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/tests/test_urldispatch.py"
            },
            "plus_file": {
                "path": "b/pyramid/tests/test_urldispatch.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 311,
                            "length": 6
                        },
                        "new_range": {
                            "start": 311,
                            "length": 14
                        },
                        "section": "class TestCompileRoute(unittest.TestCase):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)",
                                "type": "context"
                            },
                            {
                                "content": "        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),",
                                "type": "context"
                            },
                            {
                                "content": "                         '/foo/1/biz/2.html')",
                                "type": "context"
                            },
                            {
                                "content": "    ",
                                "type": "added"
                            },
                            {
                                "content": "    def test_custom_regex_with_colons(self):",
                                "type": "added"
                            },
                            {
                                "content": "        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),",
                                "type": "added"
                            },
                            {
                                "content": "                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)",
                                "type": "added"
                            },
                            {
                                "content": "        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),",
                                "type": "added"
                            },
                            {
                                "content": "                         '/foo/1/biz/2.html')",
                                "type": "added"
                            },
                            {
                                "content": "",
                                "type": "context"
                            },
                            {
                                "content": "    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):",
                                "type": "context"
                            },
                            {
                                "content": "        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/tests/test_urldispatch.py",
                            "type": "class",
                            "name": "TestCompileRoute",
                            "content": "class TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 265,
                            "end_lineno": 410,
                            "parent": null
                        }
                    ],
                    "added_entities": [
                        {
                            "file_name": "pyramid/tests/test_urldispatch.py",
                            "type": "method",
                            "name": "TestCompileRoute.test_custom_regex_with_colons",
                            "content": "class TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)",
                            "ast_type_str": "ClassDef",
                            "start_lineno": 315,
                            "end_lineno": 321,
                            "parent": {
                                "file_name": "pyramid/tests/test_urldispatch.py",
                                "type": "class",
                                "name": "TestCompileRoute",
                                "content": "class TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)",
                                "ast_type_str": "ClassDef",
                                "start_lineno": 265,
                                "end_lineno": 410,
                                "parent": null
                            }
                        }
                    ],
                    "deleted_entities": []
                }
            ]
        },
        {
            "old_file_content": "import re\nfrom zope.interface import implementer\n\nfrom pyramid.interfaces import (\n    IRoutesMapper,\n    IRoute,\n    )\n\nfrom pyramid.compat import (\n    PY3,\n    native_,\n    text_,\n    text_type,\n    string_types,\n    binary_type,\n    is_nonstr_iter,\n    decode_path_info,\n    )\n\nfrom pyramid.exceptions import URLDecodeError\n\nfrom pyramid.traversal import (\n    quote_path_segment,\n    split_path_info,\n    )\n\n_marker = object()\n\n@implementer(IRoute)\nclass Route(object):\n    def __init__(self, name, pattern, factory=None, predicates=(),\n                 pregenerator=None):\n        self.pattern = pattern\n        self.path = pattern # indefinite b/w compat, not in interface\n        self.match, self.generate = _compile_route(pattern)\n        self.name = name\n        self.factory = factory\n        self.predicates = predicates\n        self.pregenerator = pregenerator\n\n@implementer(IRoutesMapper)\nclass RoutesMapper(object):\n    def __init__(self):\n        self.routelist = []\n        self.routes = {}\n\n    def has_routes(self):\n        return bool(self.routelist)\n\n    def get_routes(self):\n        return self.routelist\n\n    def get_route(self, name):\n        return self.routes.get(name)\n\n    def connect(self, name, pattern, factory=None, predicates=(),\n                pregenerator=None, static=False):\n        if name in self.routes:\n            oldroute = self.routes[name]\n            if oldroute in self.routelist:\n                self.routelist.remove(oldroute)\n        route = Route(name, pattern, factory, predicates, pregenerator)\n        if not static:\n            self.routelist.append(route)\n        self.routes[name] = route\n        return route\n\n    def generate(self, name, kw):\n        return self.routes[name].generate(kw)\n\n    def __call__(self, request):\n        environ = request.environ\n        try:\n            # empty if mounted under a path in mod_wsgi, for example\n            path = decode_path_info(environ['PATH_INFO'] or '/')\n        except KeyError:\n            path = '/'\n        except UnicodeDecodeError as e:\n            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)\n\n        for route in self.routelist:\n            match = route.match(path)\n            if match is not None:\n                preds = route.predicates\n                info = {'match':match, 'route':route}\n                if preds and not all((p(info, request) for p in preds)):\n                    continue\n                return info\n\n        return {'route':None, 'match':None}\n\n# stolen from bobo and modified\nold_route_re = re.compile(r'(\\:[_a-zA-Z]\\w*)')\nstar_at_end = re.compile(r'\\*\\w*$')\n\n# The tortuous nature of the regex named ``route_re`` below is due to the\n# fact that we need to support at least one level of \"inner\" squigglies\n# inside the expr of a {name:expr} pattern.  This regex used to be just\n# (\\{[a-zA-Z][^\\}]*\\}) but that choked when supplied with e.g. {foo:\\d{4}}.\nroute_re = re.compile(r'(\\{[_a-zA-Z][^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\})')\n\ndef update_pattern(matchobj):\n    name = matchobj.group(0)\n    return '{%s}' % name[1:]\n\ndef _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            name, reg = name.split(':')\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator\n",
            "new_file_content": "import re\nfrom zope.interface import implementer\n\nfrom pyramid.interfaces import (\n    IRoutesMapper,\n    IRoute,\n    )\n\nfrom pyramid.compat import (\n    PY3,\n    native_,\n    text_,\n    text_type,\n    string_types,\n    binary_type,\n    is_nonstr_iter,\n    decode_path_info,\n    )\n\nfrom pyramid.exceptions import URLDecodeError\n\nfrom pyramid.traversal import (\n    quote_path_segment,\n    split_path_info,\n    )\n\n_marker = object()\n\n@implementer(IRoute)\nclass Route(object):\n    def __init__(self, name, pattern, factory=None, predicates=(),\n                 pregenerator=None):\n        self.pattern = pattern\n        self.path = pattern # indefinite b/w compat, not in interface\n        self.match, self.generate = _compile_route(pattern)\n        self.name = name\n        self.factory = factory\n        self.predicates = predicates\n        self.pregenerator = pregenerator\n\n@implementer(IRoutesMapper)\nclass RoutesMapper(object):\n    def __init__(self):\n        self.routelist = []\n        self.routes = {}\n\n    def has_routes(self):\n        return bool(self.routelist)\n\n    def get_routes(self):\n        return self.routelist\n\n    def get_route(self, name):\n        return self.routes.get(name)\n\n    def connect(self, name, pattern, factory=None, predicates=(),\n                pregenerator=None, static=False):\n        if name in self.routes:\n            oldroute = self.routes[name]\n            if oldroute in self.routelist:\n                self.routelist.remove(oldroute)\n        route = Route(name, pattern, factory, predicates, pregenerator)\n        if not static:\n            self.routelist.append(route)\n        self.routes[name] = route\n        return route\n\n    def generate(self, name, kw):\n        return self.routes[name].generate(kw)\n\n    def __call__(self, request):\n        environ = request.environ\n        try:\n            # empty if mounted under a path in mod_wsgi, for example\n            path = decode_path_info(environ['PATH_INFO'] or '/')\n        except KeyError:\n            path = '/'\n        except UnicodeDecodeError as e:\n            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)\n\n        for route in self.routelist:\n            match = route.match(path)\n            if match is not None:\n                preds = route.predicates\n                info = {'match':match, 'route':route}\n                if preds and not all((p(info, request) for p in preds)):\n                    continue\n                return info\n\n        return {'route':None, 'match':None}\n\n# stolen from bobo and modified\nold_route_re = re.compile(r'(\\:[_a-zA-Z]\\w*)')\nstar_at_end = re.compile(r'\\*\\w*$')\n\n# The tortuous nature of the regex named ``route_re`` below is due to the\n# fact that we need to support at least one level of \"inner\" squigglies\n# inside the expr of a {name:expr} pattern.  This regex used to be just\n# (\\{[a-zA-Z][^\\}]*\\}) but that choked when supplied with e.g. {foo:\\d{4}}.\nroute_re = re.compile(r'(\\{[_a-zA-Z][^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\})')\n\ndef update_pattern(matchobj):\n    name = matchobj.group(0)\n    return '{%s}' % name[1:]\n\ndef _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            # reg may contain colons as well,\n            # so we must strictly split name into two parts\n            name, reg = name.split(':', 1)\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator\n",
            "header": {
                "file": {
                    "path": "pyramid/urldispatch.py"
                },
                "misc_line": null
            },
            "index_line": {
                "old_commit_hash": "cccff14ba",
                "new_commit_hash": "4182ea665",
                "mode": "100644"
            },
            "is_binary_file": false,
            "binary_line": null,
            "minus_file": {
                "path": "a/pyramid/urldispatch.py"
            },
            "plus_file": {
                "path": "b/pyramid/urldispatch.py"
            },
            "hunks": [
                {
                    "descriptor": {
                        "old_range": {
                            "start": 148,
                            "length": 7
                        },
                        "new_range": {
                            "start": 148,
                            "length": 9
                        },
                        "section": "def _compile_route(route):"
                    },
                    "line_group": {
                        "all_lines": [
                            {
                                "content": "        name = pat.pop() # unicode",
                                "type": "context"
                            },
                            {
                                "content": "        name = name[1:-1]",
                                "type": "context"
                            },
                            {
                                "content": "        if ':' in name:",
                                "type": "context"
                            },
                            {
                                "content": "            name, reg = name.split(':')",
                                "type": "deleted"
                            },
                            {
                                "content": "            # reg may contain colons as well,",
                                "type": "added"
                            },
                            {
                                "content": "            # so we must strictly split name into two parts",
                                "type": "added"
                            },
                            {
                                "content": "            name, reg = name.split(':', 1)",
                                "type": "added"
                            },
                            {
                                "content": "        else:",
                                "type": "context"
                            },
                            {
                                "content": "            reg = '[^/]+'",
                                "type": "context"
                            },
                            {
                                "content": "        gen.append('%%(%s)s' % native_(name)) # native",
                                "type": "context"
                            },
                            {
                                "content": "",
                                "type": "context"
                            }
                        ]
                    },
                    "modified_entities": [
                        {
                            "file_name": "pyramid/urldispatch.py",
                            "type": "function",
                            "name": "_compile_route",
                            "content": "def _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            name, reg = name.split(':')\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator",
                            "ast_type_str": "FunctionDef",
                            "start_lineno": 106,
                            "end_lineno": 231,
                            "parent": null
                        }
                    ],
                    "added_entities": [],
                    "deleted_entities": []
                }
            ]
        }
    ],
    "old_commit_hash": "88bbd46c9a5fab52548f26fe4655a89c00332ad5^",
    "new_commit_hash": "88bbd46c9a5fab52548f26fe4655a89c00332ad5",
    "commit_message": "Replacement markers of url dispatcher can contain regex with colons.",
    "commit_date": "2012-07-10T21:26:34+04:00",
    "metadata": {}
}
{
    "repo_name": "pyramid",
    "new_commit_hash": "88bbd46c9a5fab52548f26fe4655a89c00332ad5",
    "test_file_codes": [
        "import unittest\nfrom pyramid import testing\nfrom pyramid.compat import (\n    text_,\n    PY3,\n    )\n\nclass TestRoute(unittest.TestCase):\n    def _getTargetClass(self):\n        from pyramid.urldispatch import Route\n        return Route\n\n    def _makeOne(self, *arg):\n        return self._getTargetClass()(*arg)\n\n    def test_provides_IRoute(self):\n        from pyramid.interfaces import IRoute\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoute, self._makeOne('name', 'pattern'))\n\n    def test_ctor(self):\n        import types\n        route = self._makeOne('name', ':path', 'factory')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, 'factory')\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_ctor_defaults(self):\n        import types\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.pattern, ':path')\n        self.assertEqual(route.path, ':path')\n        self.assertEqual(route.name, 'name')\n        self.assertEqual(route.factory, None)\n        self.assertTrue(route.generate.__class__ is types.FunctionType)\n        self.assertTrue(route.match.__class__ is types.FunctionType)\n\n    def test_match(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.match('/whatever'), {'path':'whatever'})\n\n    def test_generate(self):\n        route = self._makeOne('name', ':path')\n        self.assertEqual(route.generate({'path':'abc'}), '/abc')\n\nclass RoutesMapperTests(unittest.TestCase):\n    def setUp(self):\n        testing.setUp()\n\n    def tearDown(self):\n        testing.tearDown()\n        \n    def _getRequest(self, **kw):\n        from pyramid.threadlocal import get_current_registry\n        environ = {'SERVER_NAME':'localhost',\n                   'wsgi.url_scheme':'http'}\n        environ.update(kw)\n        request = DummyRequest(environ)\n        reg = get_current_registry()\n        request.registry = reg\n        return request\n\n    def _getTargetClass(self):\n        from pyramid.urldispatch import RoutesMapper\n        return RoutesMapper\n\n    def _makeOne(self):\n        klass = self._getTargetClass()\n        return klass()\n\n    def test_provides_IRoutesMapper(self):\n        from pyramid.interfaces import IRoutesMapper\n        from zope.interface.verify import verifyObject\n        verifyObject(IRoutesMapper, self._makeOne())\n\n    def test_no_route_matches(self):\n        mapper = self._makeOne()\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['match'], None)\n        self.assertEqual(result['route'], None)\n\n    def test_connect_name_exists_removes_old(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test_connect_static(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n\n    def test_connect_static_overridden(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article', static=True)\n        self.assertEqual(len(mapper.routelist), 0)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article')\n        mapper.connect('foo', 'archives/:action/:article2')\n        self.assertEqual(len(mapper.routelist), 1)\n        self.assertEqual(len(mapper.routes), 1)\n        self.assertEqual(mapper.routes['foo'].pattern,\n                         'archives/:action/:article2')\n        self.assertEqual(mapper.routelist[0].pattern,\n                         'archives/:action/:article2')\n\n    def test___call__pathinfo_cant_be_decoded(self):\n        from pyramid.exceptions import URLDecodeError\n        mapper = self._makeOne()\n        if PY3: # pragma: no cover\n            path_info = b'\\xff\\xfe\\xe6\\x00'.decode('latin-1')\n        else:\n            path_info = b'\\xff\\xfe\\xe6\\x00'\n        request = self._getRequest(PATH_INFO=path_info)\n        self.assertRaises(URLDecodeError, mapper, request)\n\n    def test___call__route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_matches_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/:article',\n                       predicates=[lambda *arg: True])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['foo'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__route_fails_to_match_with_predicates(self):\n        mapper = self._makeOne()\n        mapper.connect('foo', 'archives/:action/article1',\n                       predicates=[lambda *arg: True, lambda *arg: False])\n        mapper.connect('bar', 'archives/:action/:article')\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['bar'])\n        self.assertEqual(result['match']['action'], 'action1')\n        self.assertEqual(result['match']['article'], 'article1')\n\n    def test___call__custom_predicate_gets_info(self):\n        mapper = self._makeOne()\n        def pred(info, request):\n            self.assertEqual(info['match'], {'action':'action1'})\n            self.assertEqual(info['route'], mapper.routes['foo'])\n            return True\n        mapper.connect('foo', 'archives/:action/article1', predicates=[pred])\n        request = self._getRequest(PATH_INFO='/archives/action1/article1')\n        mapper(request)\n\n    def test_cc_bug(self):\n        # \"unordered\" as reported in IRC by author of\n        # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/\n        mapper = self._makeOne()\n        mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf')\n        mapper.connect('juri',\n                       'licenses/:license_code/:license_version/:jurisdiction')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['rdf'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n\n        request = self._getRequest(PATH_INFO='/licenses/1/v2/usa')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['juri'])\n        self.assertEqual(result['match']['license_code'], '1')\n        self.assertEqual(result['match']['license_version'], 'v2')\n        self.assertEqual(result['match']['jurisdiction'], 'usa')\n\n    def test___call__root_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_matches2(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_empty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__root_route_when_path_info_notempty(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest(PATH_INFO='/')\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test___call__no_path_info(self):\n        mapper = self._makeOne()\n        mapper.connect('root', '/')\n        request = self._getRequest()\n        result = mapper(request)\n        self.assertEqual(result['route'], mapper.routes['root'])\n        self.assertEqual(result['match'], {})\n\n    def test_has_routes(self):\n        mapper = self._makeOne()\n        self.assertEqual(mapper.has_routes(), False)\n        mapper.connect('whatever', 'archives/:action/:article')\n        self.assertEqual(mapper.has_routes(), True)\n\n    def test_get_routes(self):\n        from pyramid.urldispatch import Route\n        mapper = self._makeOne()\n        self.assertEqual(mapper.get_routes(), [])\n        mapper.connect('whatever', 'archives/:action/:article')\n        routes = mapper.get_routes()\n        self.assertEqual(len(routes), 1)\n        self.assertEqual(routes[0].__class__, Route)\n\n    def test_get_route_matches(self):\n        mapper = self._makeOne()\n        mapper.connect('whatever', 'archives/:action/:article')\n        result = mapper.get_route('whatever')\n        self.assertEqual(result.pattern, 'archives/:action/:article')\n\n    def test_get_route_misses(self):\n        mapper = self._makeOne()\n        result = mapper.get_route('whatever')\n        self.assertEqual(result, None)\n\n    def test_generate(self):\n        mapper = self._makeOne()\n        def generator(kw):\n            return 123\n        route = DummyRoute(generator)\n        mapper.routes['abc'] =  route\n        self.assertEqual(mapper.generate('abc', {}), 123)\n\nclass TestCompileRoute(unittest.TestCase):\n    def _callFUT(self, pattern):\n        from pyramid.urldispatch import _compile_route\n        return _compile_route(pattern)\n\n    def test_no_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_with_star(self):\n        matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'traverse':()})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'traverse':('everything', 'else', 'here')})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'traverse':'/a/b'}), '/foo/1/biz/2/bar/a/b')\n    \n    def test_with_bracket_star(self):\n        matcher, generator = self._callFUT(\n            '/foo/{baz}/biz/{buz}/bar{remainder:.*}')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz', 'remainder':''})\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'),\n                         {'baz':'baz', 'buz':'buz',\n                          'remainder':'/everything/else/here'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator(\n            {'baz':1, 'buz':2, 'remainder':'/a/b'}), '/foo/1/biz/2/bar%2Fa%2Fb')\n\n    def test_no_beginning_slash(self):\n        matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar')\n        self.assertEqual(matcher('/foo/baz/biz/buz/bar'),\n                         {'baz':'baz', 'buz':'buz'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:[^/\\.]+}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n    \n    def test_custom_regex_with_colons(self):\n        matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n        self.assertEqual(matcher('/foo/baz/biz/buz.bar'),\n                         {'baz':'baz', 'buz':'buz', 'bar':'bar'})\n        self.assertEqual(matcher('foo/baz/biz/buz/bar'), None)\n        self.assertEqual(generator({'baz':1, 'buz':2, 'bar': 'html'}),\n                         '/foo/1/biz/2.html')\n\n    def test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle(self):\n        # pattern: '\\\\/foo\\\\/(?P<baz>abc)\\\\/biz\\\\/(?P<buz>[^/]+)\\\\/bar$'\n        # note presence of :abc in pattern (oldstyle match)\n        matcher, generator = self._callFUT('foo/{baz:abc}/biz/{buz}/bar')\n        self.assertEqual(matcher('/foo/abc/biz/buz/bar'),\n                         {'baz':'abc', 'buz':'buz'})\n        self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar')\n\n    def test_custom_regex_with_embedded_squigglies(self):\n        matcher, generator = self._callFUT('/{buz:\\d{4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies2(self):\n        matcher, generator = self._callFUT('/{buz:\\d{3,4}}')\n        self.assertEqual(matcher('/2001'), {'buz':'2001'})\n        self.assertEqual(matcher('/200'), {'buz':'200'})\n        self.assertEqual(matcher('/20'), None)\n        self.assertEqual(generator({'buz':2001}), '/2001')\n\n    def test_custom_regex_with_embedded_squigglies3(self):\n        matcher, generator = self._callFUT(\n            '/{buz:(\\d{2}|\\d{4})-[a-zA-Z]{3,4}-\\d{2}}')\n        self.assertEqual(matcher('/2001-Nov-15'), {'buz':'2001-Nov-15'})\n        self.assertEqual(matcher('/99-June-10'), {'buz':'99-June-10'})\n        self.assertEqual(matcher('/2-Nov-15'), None)\n        self.assertEqual(matcher('/200-Nov-15'), None)\n        self.assertEqual(matcher('/2001-No-15'), None)\n        self.assertEqual(generator({'buz':'2001-Nov-15'}), '/2001-Nov-15')\n        self.assertEqual(generator({'buz':'99-June-10'}), '/99-June-10')\n\n    def test_pattern_with_high_order_literal(self):\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{x}', 'utf-8')\n        matcher, generator = self._callFUT(pattern)\n        self.assertEqual(matcher(text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8')),\n                         {'x':'x'})\n        self.assertEqual(generator({'x':'1'}), '/La%20Pe%C3%B1a/1')\n\n    def test_pattern_generate_with_high_order_dynamic(self):\n        pattern = '/{x}'\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')}),\n            '/La%20Pe%C3%B1a')\n\n    def test_docs_sample_generate(self):\n        # sample from urldispatch.rst\n        pattern = text_(b'/La Pe\\xc3\\xb1a/{city}', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        self.assertEqual(\n            generator({'city':text_(b'Qu\\xc3\\xa9bec', 'utf-8')}),\n            '/La%20Pe%C3%B1a/Qu%C3%A9bec')\n\n    def test_generate_with_mixedtype_values(self):\n        pattern = '/{city}/{state}'\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'city': text_(b'Qu\\xc3\\xa9bec', 'utf-8'),\n             'state': b'La Pe\\xc3\\xb1a'}\n            )\n        self.assertEqual(result, '/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_highorder_pattern_utf8(self):\n        pattern = b'/La Pe\\xc3\\xb1a/{city}'\n        self.assertRaises(ValueError, self._callFUT, pattern)\n\n    def test_generate_with_string_remainder_and_unicode_replacement(self):\n        pattern = text_(b'/abc*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': text_(b'/Qu\\xc3\\xa9bec/La Pe\\xc3\\xb1a', 'utf-8')}\n            )\n        self.assertEqual(result, '/abc/Qu%C3%A9bec/La%20Pe%C3%B1a')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\n    def test_generate_with_string_remainder_and_nonstring_replacement(self):\n        pattern = text_(b'/abc/*remainder', 'utf-8')\n        _, generator = self._callFUT(pattern)\n        result = generator(\n            {'remainder': None}\n            )\n        self.assertEqual(result, '/abc/None')\n        # should be a native string\n        self.assertEqual(type(result), str)\n\nclass TestCompileRouteFunctional(unittest.TestCase):\n    def matches(self, pattern, path, expected):\n        from pyramid.urldispatch import _compile_route\n        matcher = _compile_route(pattern)[0]\n        result = matcher(path)\n        self.assertEqual(result, expected)\n\n    def generates(self, pattern, dict, result):\n        from pyramid.urldispatch import _compile_route\n        self.assertEqual(_compile_route(pattern)[1](dict), result)\n\n    def test_matcher_functional_notdynamic(self):\n        self.matches('/', '', None)\n        self.matches('', '', None)\n        self.matches('/', '/foo', None)\n        self.matches('/foo/', '/foo', None)\n        self.matches('', '/', {})\n        self.matches('/', '/', {})\n\n    def test_matcher_functional_newstyle(self):\n        self.matches('/{x}', '', None)\n        self.matches('/{x}', '/', None)\n        self.matches('/abc/{def}', '/abc/', None)\n        self.matches('/{x}', '/a', {'x':'a'})\n        self.matches('zzz/{x}', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/{x}*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/{x}*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        self.matches('{x}', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a'), 'x')})\n        self.matches('/foo/{id}.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/{num:[0-9]+}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('/{num:[0-9]*}/*traverse', '/555/abc/def',\n                     {'num':'555', 'traverse':('abc', 'def')})\n        self.matches('zzz/{_}', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/{_abc}', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/{abc_def}', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_matcher_functional_oldstyle(self):\n        self.matches('/:x', '', None)\n        self.matches('/:x', '/', None)\n        self.matches('/abc/:def', '/abc/', None)\n        self.matches('/:x', '/a', {'x':'a'})\n        self.matches('zzz/:x', '/zzz/abc', {'x':'abc'})\n        self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()})\n        self.matches('zzz/:x*traverse', '/zzz/abc/def/g',\n                     {'x':'abc', 'traverse':('def', 'g')})\n        self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')})\n        self.matches('*traverse', '/zzz/ abc', {'traverse':('zzz', ' abc')})\n        #'/La%20Pe%C3%B1a'\n        # pattern, path, expected\n        self.matches(':x', text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                     {'x':text_(b'La Pe\\xc3\\xb1a', 'utf-8')})\n        # '/La%20Pe%C3%B1a/x'\n        self.matches('*traverse', text_(b'/La Pe\\xc3\\xb1a/x', 'utf-8'),\n                     {'traverse':(text_(b'La Pe\\xc3\\xb1a', 'utf-8'), 'x')})\n        self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'})\n        self.matches('/foo/:id_html', '/foo/bar_html', {'id_html':'bar_html'})\n        self.matches('zzz/:_', '/zzz/abc', {'_':'abc'})\n        self.matches('zzz/:_abc', '/zzz/abc', {'_abc':'abc'})\n        self.matches('zzz/:abc_def', '/zzz/abc', {'abc_def':'abc'})\n\n    def test_generator_functional_notdynamic(self):\n        self.generates('', {}, '/')\n        self.generates('/', {}, '/')\n\n    def test_generator_functional_newstyle(self):\n        self.generates('/{x}', {'x':''}, '/')\n        self.generates('/{x}', {'x':'a'}, '/a')\n        self.generates('zzz/{x}', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/{x}*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/{x}', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/{x}*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/{id}.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/{_}', {'_':'20'}, '/foo/20')\n        self.generates('/foo/{_abc}', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/{abc_def}', {'abc_def':'20'}, '/foo/20')\n        \n    def test_generator_functional_oldstyle(self):\n        self.generates('/:x', {'x':''}, '/')\n        self.generates('/:x', {'x':'a'}, '/a')\n        self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''},\n                       '/zzz/abc')\n        self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'},\n                       '/zzz/abc/def/g')\n        self.generates('/:x', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8')},\n                       '/%2FLa%20Pe%C3%B1a')\n        self.generates('/:x*y', {'x':text_(b'/La Pe\\xc3\\xb1a', 'utf-8'),\n                                 'y':'/rest/of/path'},\n                       '/%2FLa%20Pe%C3%B1a/rest/of/path')\n        self.generates('*traverse', {'traverse':('a', text_(b'La Pe\\xf1a'))},\n                       '/a/La%20Pe%C3%B1a')\n        self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html')\n        self.generates('/foo/:_', {'_':'20'}, '/foo/20')\n        self.generates('/foo/:_abc', {'_abc':'20'}, '/foo/20')\n        self.generates('/foo/:abc_def', {'abc_def':'20'}, '/foo/20')\n\nclass DummyContext(object):\n    \"\"\" \"\"\"\n        \nclass DummyRequest(object):\n    def __init__(self, environ):\n        self.environ = environ\n    \nclass DummyRoute(object):\n    def __init__(self, generator):\n        self.generate = generator\n        \n"
    ],
    "test_file_names": [
        "test_1.py"
    ],
    "setup_res_code": 0,
    "setup_res_stdout": "",
    "setup_res_stderr": "Using CPython 3.8.20\nCreating virtual environment at: .venv\nActivate with: source .venv/bin/activate\nResolved 15 packages in 588ms\nPrepared 1 package in 700ms\nInstalled 15 packages in 14ms\n + chameleon==4.4.4\n + importlib-metadata==8.5.0\n + importlib-resources==6.4.5\n + mako==1.3.8\n + markupsafe==2.1.5\n + pastedeploy==3.1.0\n + pyramid==1.4.dev0 (from file:///home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5)\n + repoze-lru==0.7\n + setuptools==75.3.0\n + translationstring==1.4\n + venusian==3.1.1\n + webob==1.8.9\n + zipp==3.20.2\n + zope-deprecation==5.0\n + zope-interface==7.2\nResolved 25 packages in 19ms\nInstalled 10 packages in 11ms\n + beautifulsoup4==4.12.3\n + coverage==7.6.1\n + distlib==0.3.9\n + filelock==3.16.1\n + nose==1.3.7\n + platformdirs==4.3.6\n + soupsieve==2.6\n + virtualenv==20.29.0\n + waitress==3.0.0\n + webtest==3.0.1\nResolved 16 packages in 5ms\nInstalled 12 packages in 8ms\n + cachetools==5.5.0\n + chardet==5.2.0\n + colorama==0.4.6\n + exceptiongroup==1.2.2\n + iniconfig==2.0.0\n + packaging==24.2\n + pluggy==1.5.0\n + pyproject-api==1.8.0\n + pytest==8.3.4\n + tomli==2.2.1\n + tox==4.23.2\n + typing-extensions==4.12.2\n",
    "new_commit_res_code": 1,
    "new_commit_res_stdout": "============================= test session starts ==============================\nplatform linux -- Python 3.8.20, pytest-8.3.4, pluggy-1.5.0\nrootdir: /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5\ncollected 772 items\n\nr2e_tests/test_1.py .................................................    [  6%]\nr2e_tests/test_config/test_adapters.py .FF.........F..                   [  8%]\nr2e_tests/test_config/test_assets.py ...........FF.....................F [ 12%]\n....................                                                     [ 15%]\nr2e_tests/test_config/test_factories.py .............                    [ 17%]\nr2e_tests/test_config/test_i18n.py FFF.FF....                            [ 18%]\nr2e_tests/test_config/test_init.py ..................................... [ 23%]\nF..F....................F...........F................................... [ 32%]\nFF...................                                                    [ 35%]\nr2e_tests/test_config/test_rendering.py ....                             [ 35%]\nr2e_tests/test_config/test_routes.py ........................            [ 38%]\nr2e_tests/test_config/test_security.py .........                         [ 40%]\nr2e_tests/test_config/test_settings.py ......................            [ 42%]\nr2e_tests/test_config/test_testing.py ..........                         [ 44%]\nr2e_tests/test_config/test_tweens.py ..................................  [ 48%]\nr2e_tests/test_config/test_util.py .....................                 [ 51%]\nr2e_tests/test_config/test_views.py .......F............................ [ 55%]\n..........................................................FF............ [ 65%]\n........................................................................ [ 74%]\n.............FF.......F..F....F......................................... [ 83%]\n....................F                                                    [ 86%]\nr2e_tests/test_scripts/test_common.py .                                  [ 86%]\nr2e_tests/test_scripts/test_pcreate.py .........                         [ 87%]\nr2e_tests/test_scripts/test_prequest.py F.FFFFF.F.FF.                    [ 89%]\nr2e_tests/test_scripts/test_proutes.py .........                         [ 90%]\nr2e_tests/test_scripts/test_pserve.py ..........................         [ 94%]\nr2e_tests/test_scripts/test_pshell.py .................                  [ 96%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n__ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names ___\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_dotted_names>\n\n    def test_add_resource_url_adapter_dotted_names(self):\n        from pyramid.interfaces import IResourceURL\n        config = self._makeOne(autocommit=True)\n        config.add_resource_url_adapter(\n            'pyramid.tests.test_config.test_adapters.DummyResourceURL',\n            'pyramid.tests.test_config.test_adapters.DummyIface',\n            )\n        iface = DummyIface()\n>       adapter = config.registry.getMultiAdapter((iface, iface),\n                                                    IResourceURL)\n\nr2e_tests/test_config/test_adapters.py:165: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x738511dae700>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x738511dae700>)\ninterface = <InterfaceClass pyramid.interfaces.IResourceURL>, name = ''\n\n    def getMultiAdapter(self, objects, interface, name=''):\n        adapter = self.adapters.queryMultiAdapter(objects, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(objects, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: ((<r2e_tests.test_config.test_adapters.DummyIface object at 0x738511dae700>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x738511dae700>), <InterfaceClass pyramid.interfaces.IResourceURL>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:379: ComponentLookupError\n_ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables _\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_introspectables>\n\n    def test_add_resource_url_adapter_introspectables(self):\n        config = self._makeOne()\n        config.add_resource_url_adapter(DummyResourceURL, DummyIface)\n        actions = config.action_state.actions\n        self.assertEqual(len(actions), 1)\n        intrs  = actions[0]['introspectables']\n        self.assertEqual(len(intrs), 1)\n        intr = intrs[0]\n        self.assertEqual(intr.type_name, 'resource url adapter')\n        self.assertEqual(intr.discriminator,\n                         ('resource url adapter', DummyIface))\n        self.assertEqual(intr.category_name, 'resource url adapters')\n>       self.assertEqual(\n            intr.title,\n            \"resource url adapter for resource iface \"\n            \"<class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\n            )\nE       AssertionError: \"reso[34 chars]e <class 'r2e_tests.test_config.test_adapters.DummyIface'>\" != \"reso[34 chars]e <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\nE       - resource url adapter for resource iface <class 'r2e_tests.test_config.test_adapters.DummyIface'>\nE       ?                                                  ^^^\nE       + resource url adapter for resource iface <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\nE       ?                                                 ++ ^^^^^\n\nr2e_tests/test_config/test_adapters.py:211: AssertionError\n________ AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names ________\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_traverser_dotted_names>\n\n    def test_add_traverser_dotted_names(self):\n        from pyramid.interfaces import ITraverser\n        config = self._makeOne(autocommit=True)\n        config.add_traverser(\n            'pyramid.tests.test_config.test_adapters.DummyTraverser',\n            'pyramid.tests.test_config.test_adapters.DummyIface')\n        iface = DummyIface()\n>       traverser = config.registry.getAdapter(iface, ITraverser)\n\nr2e_tests/test_config/test_adapters.py:122: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobject = <r2e_tests.test_config.test_adapters.DummyIface object at 0x7385118b1850>\ninterface = <InterfaceClass pyramid.interfaces.ITraverser>, name = ''\n\n    def getAdapter(self, object, interface, name=''):\n        adapter = self.adapters.queryAdapter(object, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(object, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: (<r2e_tests.test_config.test_adapters.DummyIface object at 0x7385118b1850>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:158: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:212: AssertionError\n____________________ TestPackageOverrides.test_get_filename ____________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageOverrides testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        import os\n        overrides = [ DummyOverride(None), DummyOverride(\n            ('pyramid.tests.test_config', 'test_assets.py'))]\n        package = DummyPackage('package')\n        po = self._makeOne(package)\n        po.overrides= overrides\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, 'test_assets.py')\n>       self.assertEqual(po.get_filename('whatever'), expected)\nE       AssertionError: '/hom[73 chars]f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:401: AssertionError\n_________ TestI18NConfiguratorMixin.test_add_translation_dirs_abspath __________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_abspath>\n\n    def test_add_translation_dirs_abspath(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n>       config.add_translation_dirs(locale)\n\nr2e_tests/test_config/test_i18n.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/util.py:58: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x7385125a1370>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\npackage_name = None\n\n    @action_method\n    def add_translation_dirs(self, *specs):\n        \"\"\" Add one or more :term:`translation directory` paths to the\n        current configuration state.  The ``specs`` argument is a\n        sequence that may contain absolute directory paths\n        (e.g. ``/usr/share/locale``) or :term:`asset specification`\n        names naming a directory path (e.g. ``some.package:locale``)\n        or a combination of the two.\n    \n        Example:\n    \n        .. code-block:: python\n    \n           config.add_translation_dirs('/usr/share/locale',\n                                       'some.package:locale')\n    \n        Later calls to ``add_translation_dir`` insert directories into the\n        beginning of the list of translation directories created by earlier\n        calls.  This means that the same translation found in a directory\n        added later in the configuration process will be found before one\n        added earlier in the configuration process.  However, if multiple\n        specs are provided in a single call to ``add_translation_dirs``, the\n        directories will be inserted into the beginning of the directory list\n        in the order they're provided in the ``*specs`` list argument (items\n        earlier in the list trump ones later in the list).\n        \"\"\"\n        directories = []\n        introspectables = []\n    \n        for spec in specs[::-1]: # reversed\n            package_name, filename = self._split_spec(spec)\n            if package_name is None: # absolute filename\n                directory = filename\n            else:\n                __import__(package_name)\n                package = sys.modules[package_name]\n                directory = os.path.join(package_path(package), filename)\n    \n            if not os.path.isdir(os.path.realpath(directory)):\n>               raise ConfigurationError('\"%s\" is not a directory' %\n                                         directory)\nE               pyramid.exceptions.ConfigurationError: \"/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:92: ConfigurationError\n________ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec ________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec>\n\n    def test_add_translation_dirs_asset_spec(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale])\nE       AssertionError: Lists differ: ['/ho[70 chars]2548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]2548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:57: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec_existing_translation_dirs>\n\n    def test_add_translation_dirs_asset_spec_existing_translation_dirs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        directories = ['abc']\n        config.registry.registerUtility(directories, ITranslationDirectories)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        result = config.registry.getUtility(ITranslationDirectories)\n>       self.assertEqual(result, [locale, 'abc'])\nE       AssertionError: Lists differ: ['/ho[77 chars]fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:67: AssertionError\n______ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs ______\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs>\n\n    def test_add_translation_dirs_multiple_specs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]2ad5/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]2ad5/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\nE       \nE       Diff is 1002 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:74: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs_multiple_calls>\n\n    def test_add_translation_dirs_multiple_specs_multiple_calls(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale3')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale3, locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]2ad5/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]2ad5/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]2548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]2548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale3'\nE       \nE       Diff is 1504 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:83: AssertionError\n___________________ ConfiguratorTests.test_ctor_no_registry ____________________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_no_registry>\n\n    def test_ctor_no_registry(self):\n        import sys\n        from pyramid.interfaces import ISettings\n        from pyramid.config import Configurator\n        from pyramid.interfaces import IRendererFactory\n        config = Configurator()\n        this_pkg = sys.modules['pyramid.tests.test_config']\n        self.assertTrue(config.registry.getUtility(ISettings))\n>       self.assertEqual(config.package, this_pkg)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:68: AssertionError\n_________ ConfiguratorTests.test_ctor_noreg_debug_logger_None_default __________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_noreg_debug_logger_None_default>\n\n    def test_ctor_noreg_debug_logger_None_default(self):\n        from pyramid.interfaces import IDebugLogger\n        config = self._makeOne()\n        logger = config.registry.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:129: AssertionError\n_______________ ConfiguratorTests.test_scan_integration_conflict _______________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n>           c.commit()\n\nr2e_tests/test_config/test_init.py:1014: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:594: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1030: in execute_actions\n    for action in resolveConflicts(self.actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = []\n\n    def resolveConflicts(actions):\n        \"\"\"Resolve conflicting actions\n    \n        Given an actions list, identify and try to resolve conflicting actions.\n        Actions conflict if they have the same non-None discriminator.\n        Conflicting actions can be resolved if the include path of one of\n        the actions is a prefix of the includepaths of the other\n        conflicting actions and is unequal to the include paths in the\n        other conflicting actions.\n        \"\"\"\n    \n        # organize actions by discriminators\n        unique = {}\n        output = []\n        for i, action in enumerate(actions):\n            if not isinstance(action, dict):\n                # old-style tuple action\n                action = expand_action(*action)\n    \n            # \"order\" is an integer grouping. Actions in a lower order will be\n            # executed before actions in a higher order.  Within an order,\n            # actions are executed sequentially based on original action ordering\n            # (\"i\").\n            order = action['order'] or 0\n            discriminator = action['discriminator']\n    \n            # \"ainfo\" is a tuple of (order, i, action) where \"order\" is a\n            # user-supplied grouping, \"i\" is an integer expressing the relative\n            # position of this action in the action list being resolved, and\n            # \"action\" is an action dictionary.  The purpose of an ainfo is to\n            # associate an \"order\" and an \"i\" with a particular action; \"order\"\n            # and \"i\" exist for sorting purposes after conflict resolution.\n            ainfo = (order, i, action)\n    \n            if discriminator is None:\n                # The discriminator is None, so this action can never conflict.\n                # We can add it directly to the result.\n                output.append(ainfo)\n                continue\n    \n            L = unique.setdefault(discriminator, [])\n            L.append(ainfo)\n    \n        # Check for conflicts\n        conflicts = {}\n    \n        for discriminator, ainfos in unique.items():\n    \n            # We use (includepath, order, i) as a sort key because we need to\n            # sort the actions by the paths so that the shortest path with a\n            # given prefix comes first.  The \"first\" action is the one with the\n            # shortest include path.  We break sorting ties using \"order\", then\n            # \"i\".\n            def bypath(ainfo):\n                path, order, i = ainfo[2]['includepath'], ainfo[0], ainfo[1]\n                return path, order, i\n    \n            ainfos.sort(key=bypath)\n            ainfo, rest = ainfos[0], ainfos[1:]\n            output.append(ainfo)\n            _, _, action = ainfo\n            basepath, baseinfo, discriminator = (action['includepath'],\n                                                 action['info'],\n                                                 action['discriminator'])\n    \n            for _, _, action in rest:\n                includepath = action['includepath']\n                # Test whether path is a prefix of opath\n                if (includepath[:len(basepath)] != basepath # not a prefix\n                    or includepath == basepath):\n                    L = conflicts.setdefault(discriminator, [baseinfo])\n                    L.append(action['info'])\n    \n        if conflicts:\n>           raise ConfigurationConflictError(conflicts)\nE           pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE             For: ('view', None, '', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE             For: ('view', None, 'two', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\n\npyramid/config/__init__.py:1136: ConfigurationConflictError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n            c.commit()\n        except ConfigurationConflictError as why:\n            def scanconflicts(e):\n                conflicts = e._conflicts.values()\n                for conflict in conflicts:\n                    for confinst in conflict:\n                        yield confinst.src\n            which = list(scanconflicts(why))\n            self.assertEqual(len(which), 4)\n>           self.assertTrue(\"@view_config(renderer='string')\" in which)\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_init.py:1023: AssertionError\n_______ ConfiguratorTests.test_setup_registry_debug_logger_None_default ________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_setup_registry_debug_logger_None_default>\n\n    def test_setup_registry_debug_logger_None_default(self):\n        from pyramid.registry import Registry\n        from pyramid.interfaces import IDebugLogger\n        reg = Registry()\n        config = self._makeOne(reg)\n        config.setup_registry()\n        logger = reg.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:415: AssertionError\n_________ TestConfigurator_add_directive.test_extend_with_dotted_name __________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_dotted_name>\n\n    def test_extend_with_dotted_name(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', 'pyramid.tests.test_config.dummy_extend')\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1415: AssertionError\n_______ TestConfigurator_add_directive.test_extend_with_python_callable ________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_python_callable>\n\n    def test_extend_with_python_callable(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', dummy_extend)\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1428: AssertionError\n____ TestViewsConfigurationMixin.test_add_static_view_package_here_relative ____\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_static_view_package_here_relative>\n\n    def test_add_static_view_package_here_relative(self):\n        from pyramid.interfaces import IStaticURLInfo\n        info = DummyStaticURLInfo()\n        config = self._makeOne(autocommit=True)\n        config.registry.registerUtility(info, IStaticURLInfo)\n        config.add_static_view('static', 'files')\n>       self.assertEqual(\n            info.added,\n            [(config, 'static', 'pyramid.tests.test_config:files', {})])\nE       AssertionError: Lists differ: [(<py[39 chars]38511cf3760>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]38511cf3760>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]738511cf3760>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]738511cf3760>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x738511cf3760>,\nE           'static',\nE       -   'r2e_tests.test_config:files',\nE       ?     ^^^\nE       \nE       +   'pyramid.tests.test_config:files',\nE       ?    ++ ^^^^^\nE       \nE           {})]\n\nr2e_tests/test_config/test_views.py:1670: AssertionError\n_______ TestViewsConfigurationMixin.test_add_view_with_template_renderer _______\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer>\n\n    def test_add_view_with_template_renderer(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        class view(object):\n            def __init__(self, context, request):\n                self.request = request\n                self.context = context\n    \n            def __call__(self):\n                return {'a':'1'}\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=view, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:998: AssertionError\n_ TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable _\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer_no_callable>\n\n    def test_add_view_with_template_renderer_no_callable(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=None, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:1038: AssertionError\n_____________ TestViewDeriver.test_function_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2310: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable function '\n                'pyramid.tests.test_config.test_views.view into a response '\n                'object. The value returned was None. You may have forgotten '\n                'to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[52 chars]tion r2e_tests.test_config.test_views.view int[110 chars]ble.' != 'Coul[52 chars]tion pyramid.tests.test_config.test_views.view[114 chars]ble.'\nE           Diff is 663 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2312: AssertionError\n___________ TestViewDeriver.test_function_returns_non_adaptable_dict ___________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2329: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was {'a': 1}. You may have forgotten to define a renderer in the view configuration.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                \"Could not convert return value of the view callable function \"\n                \"pyramid.tests.test_config.test_views.view into a response \"\n                \"object. The value returned was {'a': 1}. You may have \"\n                \"forgotten to define a renderer in the view configuration.\"\n                )\nE           AssertionError: \"Coul[52 chars]tion r2e_tests.test_config.test_views.view int[120 chars]ion.\" != \"Coul[52 chars]tion pyramid.tests.test_config.test_views.view[124 chars]ion.\"\nE           Diff is 683 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2331: AssertionError\n_____________ TestViewDeriver.test_instance_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2350: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable object <r2e_tests.test_config.test_views.TestViewDeriver.test_instance_returns_non_adaptable.<locals>.AView object at 0x738511c89f70> into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n            msg = e.args[0]\n>           self.assertTrue(msg.startswith(\n                'Could not convert return value of the view callable object '\n                '<pyramid.tests.test_config.test_views.'))\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_views.py:2353: AssertionError\n____ TestViewDeriver.test_requestonly_default_method_returns_non_adaptable _____\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2373: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x738511ef3b20>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method __call__ of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method __call__ of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[68 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[68 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 649 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2375: AssertionError\n___ TestViewDeriver.test_requestonly_nondefault_method_returns_non_adaptable ___\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2397: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x738511ea9550>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method theviewmethod of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method theviewmethod of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[73 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[73 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 669 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2399: AssertionError\n___________________ Test_view_description.test_without_text ____________________\n\nself = <r2e_tests.test_config.test_views.Test_view_description testMethod=test_without_text>\n\n    def test_without_text(self):\n        def view(): pass\n        result = self._callFUT(view)\n>       self.assertEqual(result,\n                         'function pyramid.tests.test_config.test_views.view')\nE       AssertionError: 'function r2e_tests.test_config.test_views.view' != 'function pyramid.tests.test_config.test_views.view'\nE       - function r2e_tests.test_config.test_views.view\nE       ?           ^^^\nE       + function pyramid.tests.test_config.test_views.view\nE       ?          ++ ^^^^^\n\nr2e_tests/test_config/test_views.py:3831: AssertionError\n_______________ TestPRequestCommand.test_command_display_headers _______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_display_headers>\n\n    def test_command_display_headers(self):\n        command = self._makeOne(\n            ['', '--display-headers', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(\n            self._out,\n            ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc'])\nE       AssertionError: Lists differ: ['200 OK', b'abc'] != ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\nE       \nE       First differing element 1:\nE       b'abc'\nE       'Content-Type: text/html; charset=UTF-8'\nE       \nE       Second list contains 1 additional elements.\nE       First extra element 2:\nE       'abc'\nE       \nE       - ['200 OK', b'abc']\nE       + ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\n\nr2e_tests/test_scripts/test_prequest.py:131: AssertionError\n_________ TestPRequestCommand.test_command_has_content_type_header_var _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_content_type_header_var>\n\n    def test_command_has_content_type_header_var(self):\n        command = self._makeOne(\n            ['', '--header=content-type:app/foo','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['CONTENT_TYPE'], 'app/foo')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:77: AssertionError\n_____________ TestPRequestCommand.test_command_has_good_header_var _____________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_good_header_var>\n\n    def test_command_has_good_header_var(self):\n        command = self._makeOne(\n            ['', '--header=name:value','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:67: AssertionError\n__________ TestPRequestCommand.test_command_has_multiple_header_vars ___________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_multiple_header_vars>\n\n    def test_command_has_multiple_header_vars(self):\n        command = self._makeOne(\n            ['',\n             '--header=name:value',\n             '--header=name2:value2',\n             'development.ini',\n             '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._environ['HTTP_NAME2'], 'value2')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:92: AssertionError\n_________________ TestPRequestCommand.test_command_method_get __________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_get>\n\n    def test_command_method_get(self):\n        command = self._makeOne(['', '--method=GET', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:100: AssertionError\n_________________ TestPRequestCommand.test_command_method_post _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_post>\n\n    def test_command_method_post(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=POST', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')\n        self.assertEqual(self._environ['wsgi.input'], stdin)\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:113: AssertionError\n________ TestPRequestCommand.test_command_path_doesnt_start_with_slash _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_path_doesnt_start_with_slash>\n\n    def test_command_path_doesnt_start_with_slash(self):\n        command = self._makeOne(['', 'development.ini', 'abc'])\n        command.run()\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:48: AssertionError\n__________________ TestPRequestCommand.test_command_two_args ___________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_two_args>\n\n    def test_command_two_args(self):\n        command = self._makeOne(['', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:40: AssertionError\n______________ TestPRequestCommand.test_command_with_query_string ______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_with_query_string>\n\n    def test_command_with_query_string(self):\n        command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c'])\n        command.run()\n        self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c')\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:122: AssertionError\n_____ TestPViewsCommand.test_views_command_single_view_function_traversal ______\n\nself = <r2e_tests.test_scripts.test_pviews.TestPViewsCommand testMethod=test_views_command_single_view_function_traversal>\n\n    def test_views_command_single_view_function_traversal(self):\n        from pyramid.registry import Registry\n        registry = Registry()\n        command = self._makeOne(registry=registry)\n        L = []\n        command.out = L.append\n        def view(): pass\n        view.__request_attrs__ = {'context': 'context', 'view_name': 'a'}\n        command._find_view = lambda arg1, arg2: view\n        command.args = ('/foo/bar/myapp.ini#myapp', '/a')\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(L[1], 'URL = /a')\n        self.assertEqual(L[3], '    context: context')\n        self.assertEqual(L[4], '    view name: a')\n>       self.assertEqual(L[8],\n                         '    pyramid.tests.test_scripts.test_pviews.view')\nE       AssertionError: '    r2e_tests.test_scripts.test_pviews.view' != '    pyramid.tests.test_scripts.test_pviews.view'\nE       -     r2e_tests.test_scripts.test_pviews.view\nE       ?      ^^^\nE       +     pyramid.tests.test_scripts.test_pviews.view\nE       ?     ++ ^^^^^\n\nr2e_tests/test_scripts/test_pviews.py:283: AssertionError\n==================================== PASSES ====================================\n=========================== short test summary info ============================\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor_defaults\nPASSED r2e_tests/test_1.py::TestRoute::test_generate\nPASSED r2e_tests/test_1.py::TestRoute::test_match\nPASSED r2e_tests/test_1.py::TestRoute::test_provides_IRoute\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__custom_predicate_gets_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__no_path_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__pathinfo_cant_be_decoded\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches2\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_empty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_notempty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_fails_to_match_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_cc_bug\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_name_exists_removes_old\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static_overridden\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_generate\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_misses\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_has_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_no_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_provides_IRoutesMapper\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_colons\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies2\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies3\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_docs_sample_generate\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_mixedtype_values\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_nonstring_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_unicode_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_highorder_pattern_utf8\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_beginning_slash\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_generate_with_high_order_dynamic\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_with_high_order_literal\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_bracket_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_star\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_oldstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_oldstyle\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_object_event_subscriber\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_default_resource_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_nodefault_resource_iface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_self\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_iface_specified\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_default_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_introspectables\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_nondefault_iface\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_already_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_not_yet_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_different_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_same_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_registers_loader_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_local_state\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_directory\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_emptystring\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_file\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_search_path\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_subscriber\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_as_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory_dottedname\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_missing_dir\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_no_specs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_registers_chameleon_translate\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches_no_action_wrap\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_dont_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_has_listeners\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_notify\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_queryAdapterOrSelf\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_registerSelfAdapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_already_absolute\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_notastring\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_relative\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_not_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_without_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_nonautocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_autocommit_no_conflicts\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_with_request\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_include\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_two_includes_and_local\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_simple\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_with_two_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_forbidden_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_notfound_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_view_mapper\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_custom\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_httpexception_view_default\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_session_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_introspection\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_package_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_end\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_hook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_dotted_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_missing_source_file\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme_missing\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_nested_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_python_callable\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_introspector_decorator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_make_wsgi_app\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_notstring_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_fail\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_dottedname_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_extra_kw\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_ignore\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_onerror\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_calls_fix_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_dottedname_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_explicit_notfound_trumps_iexceptionresponse\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes_spaces\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_no_default_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_exceptionresponse_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_webob_iresponse_adapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_tweens\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_unhook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_module\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_package\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_for_\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_attr\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_context\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_exception\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_for\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_conflict_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_directive_persists_across_configurator_creations\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_action_method_successful\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_same_name_doesnt_conflict\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_simple\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath_and_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_order\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_dicts\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_tuples\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectable_no_callable\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_it\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_processSpec\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_conflict\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_dicts\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_tuples\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_with_actions_grouped_by_order\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries_empty\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer_dottedname_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_defaults\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_discriminator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_path_no_pattern\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_pattern_with_path\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_attr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_context\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_permission\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_renderer\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_accept\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_custom_predicates\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_header\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_highorder\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_regex\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_pregenerator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_method\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_param\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_route_prefix\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_static\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_xhr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_already_registered\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_not_yet_registered\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_default_permission\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_None\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_dictwithvalues\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_already_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_not_yet_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_nosettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_withsettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_authorization\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_notfound\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_routematch\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_templates\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_default_locale_name\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_fail\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_raises_attribute_error\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_success\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_noargs\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_originals_kept\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_http_cache\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_assets\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_resources\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_templates\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_explicitrenderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_twice\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_dottedname\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_multiple\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_single\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_template\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_resources\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_dottedname\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_instance\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_unsuitable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_conflict\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_distinct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_over_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_under_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_underover\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_1\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_2\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_3\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_4\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_5\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_direct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_indirect\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_and_under_partials\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_missing_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_multiple_matching_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_partial_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestCyclicDependencyError::test___str__\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_custom_predicates_can_affect_traversal\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_different_custom_predicates_with_same_hash\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_hashable\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_and_number\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_number_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_xhr_and_request_method_trump_only_containment\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_predicate_text_is_correct\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_ordering_hashes_same\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_sequence\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test___str__\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_class_conforms\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_ctor\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_instance_conforms\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_absolute\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_here_no_utility_registered\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_relative\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_trumps_for\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_more_preds_first_bests_fewer_preds_last\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_predicate_bests_standard_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_mulview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for__as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview___discriminator__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_call_ordering\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_context_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_exception_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_no_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name_unicode\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_no_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_nonexistant_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_get_implies_head\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_and_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_noniface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name_exception\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_conflicts\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_doesnt_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_kwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_wrapped_view_is_decorated\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_views_with_accept_multiview_replaces_existing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_function\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_no_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_with_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper_dottedname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_false\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_true\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_nocall\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_method_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_firstname_request_with_secondname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException_subinterface\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_class\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_instance\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__intermediate_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__raise_not_found_isnt_interpreted_as_pred_mismatch\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_no_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_miss\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call_permissive__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash_override_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_class_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_best_match_returns_None\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_no_self_accepts\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_request_has_no_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_instance_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_fails\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_succeeds\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_multiple_with_functions_as_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_match_with__permitted__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_views\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_context_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_nondefault_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_without_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied2\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_overridden\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted_no_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_prevent_http_cache_in_settings\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_bad_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_integer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_prevent_auto_set\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_timedelta\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple_seconds_None\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_has_view\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_override\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_authpol\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_all\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_checker\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_notall\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_config_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_default_mapper_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_view_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname_notfound\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test__view_as_function_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request_and_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different_with_existing_original_view\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_same\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_view_is_None\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_already_exists\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_withendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_for_\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_route_prefix\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_attr\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_context\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_for\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_missing\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_quoting\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_miss\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_no_registry_on_request\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_quoted_remote\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_unquoted_local\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyClass\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyObject\nPASSED r2e_tests/test_config/test_views.py::Test_view_description::test_with_text\nPASSED r2e_tests/test_scripts/test_common.py::Test_logging_file_config::test_it\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_absolute_path\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_multiple_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_single_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_no_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_bad_config_header\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_not_enough_args\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_response_has_no_charset\nPASSED r2e_tests/test_scripts/test_prequest.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test__get_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_written_pid\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_stale_pid_write_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_unlink_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_no_args\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_bad_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_invalid_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_no_such_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_flush\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_open\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_write\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_writeline\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__fail\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__succeed\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_10\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_11\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_10_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_11_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ipython_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_dotted_name\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_python_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_here_relative\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer_no_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable_dict\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_instance_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_default_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_nondefault_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::Test_view_description::test_without_text\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_display_headers\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_content_type_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_good_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_multiple_header_vars\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_get\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_path_doesnt_start_with_slash\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_two_args\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 36 failed, 736 passed in 4.25s ========================\n",
    "new_commit_res_stderr": "",
    "old_commit_res_code": 1,
    "old_commit_res_stdout": "============================= test session starts ==============================\nplatform linux -- Python 3.8.20, pytest-8.3.4, pluggy-1.5.0\nrootdir: /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5\ncollected 772 items\n\nr2e_tests/test_1.py ...........................F.....................    [  6%]\nr2e_tests/test_config/test_adapters.py .FF.........F..                   [  8%]\nr2e_tests/test_config/test_assets.py ...........FF.....................F [ 12%]\n....................                                                     [ 15%]\nr2e_tests/test_config/test_factories.py .............                    [ 17%]\nr2e_tests/test_config/test_i18n.py FFF.FF....                            [ 18%]\nr2e_tests/test_config/test_init.py ..................................... [ 23%]\nF..F....................F...........F................................... [ 32%]\nFF...................                                                    [ 35%]\nr2e_tests/test_config/test_rendering.py ....                             [ 35%]\nr2e_tests/test_config/test_routes.py ........................            [ 38%]\nr2e_tests/test_config/test_security.py .........                         [ 40%]\nr2e_tests/test_config/test_settings.py ......................            [ 42%]\nr2e_tests/test_config/test_testing.py ..........                         [ 44%]\nr2e_tests/test_config/test_tweens.py ..................................  [ 48%]\nr2e_tests/test_config/test_util.py .....................                 [ 51%]\nr2e_tests/test_config/test_views.py .......F............................ [ 55%]\n..........................................................FF............ [ 65%]\n........................................................................ [ 74%]\n.............FF.......F..F....F......................................... [ 83%]\n....................F                                                    [ 86%]\nr2e_tests/test_scripts/test_common.py .                                  [ 86%]\nr2e_tests/test_scripts/test_pcreate.py .........                         [ 87%]\nr2e_tests/test_scripts/test_prequest.py F.FFFFF.F.FF.                    [ 89%]\nr2e_tests/test_scripts/test_proutes.py .........                         [ 90%]\nr2e_tests/test_scripts/test_pserve.py ..........................         [ 94%]\nr2e_tests/test_scripts/test_pshell.py .................                  [ 96%]\nr2e_tests/test_scripts/test_ptweens.py .....                             [ 97%]\nr2e_tests/test_scripts/test_pviews.py ................F......            [100%]\n\n=================================== FAILURES ===================================\n________________ TestCompileRoute.test_custom_regex_with_colons ________________\n\nself = <r2e_tests.test_1.TestCompileRoute testMethod=test_custom_regex_with_colons>\n\n    def test_custom_regex_with_colons(self):\n>       matcher, generator = self._callFUT('foo/{baz}/biz/{buz:(?:[^/\\.]+)}.{bar}')\n\nr2e_tests/test_1.py:316: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \nr2e_tests/test_1.py:268: in _callFUT\n    return _compile_route(pattern)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nroute = '/foo/{baz}/biz/{buz:(?:[^/\\\\.]+)}.{bar}'\n\n    def _compile_route(route):\n        # This function really wants to consume Unicode patterns natively, but if\n        # someone passes us a bytestring, we allow it by converting it to Unicode\n        # using the ASCII decoding.  We decode it using ASCII because we don't\n        # want to accept bytestrings with high-order characters in them here as\n        # we have no idea what the encoding represents.\n        if route.__class__ is not text_type:\n            try:\n                route = text_(route, 'ascii')\n            except UnicodeDecodeError:\n                raise ValueError(\n                    'The pattern value passed to add_route must be '\n                    'either a Unicode string or a plain string without '\n                    'any non-ASCII characters (you provided %r).' % route)\n    \n        if old_route_re.search(route) and not route_re.search(route):\n            route = old_route_re.sub(update_pattern, route)\n    \n        if not route.startswith('/'):\n            route = '/' + route\n    \n        remainder = None\n        if star_at_end.search(route):\n            route, remainder = route.rsplit('*', 1)\n    \n        pat = route_re.split(route)\n    \n        # every element in \"pat\" will be Unicode (regardless of whether the\n        # route_re regex pattern is itself Unicode or str)\n        pat.reverse()\n        rpat = []\n        gen = []\n        prefix = pat.pop() # invar: always at least one element (route='/'+route)\n    \n        # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n        # careful not to quote any embedded slashes.  We have to replace '%' with\n        # '%%' afterwards, as the strings that go into \"gen\" are used as string\n        # replacement targets.\n        gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n        rpat.append(re.escape(prefix)) # unicode\n    \n        while pat:\n            name = pat.pop() # unicode\n            name = name[1:-1]\n            if ':' in name:\n>               name, reg = name.split(':')\nE               ValueError: too many values to unpack (expected 2)\n\npyramid/urldispatch.py:151: ValueError\n__ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names ___\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_dotted_names>\n\n    def test_add_resource_url_adapter_dotted_names(self):\n        from pyramid.interfaces import IResourceURL\n        config = self._makeOne(autocommit=True)\n        config.add_resource_url_adapter(\n            'pyramid.tests.test_config.test_adapters.DummyResourceURL',\n            'pyramid.tests.test_config.test_adapters.DummyIface',\n            )\n        iface = DummyIface()\n>       adapter = config.registry.getMultiAdapter((iface, iface),\n                                                    IResourceURL)\n\nr2e_tests/test_config/test_adapters.py:165: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobjects = (<r2e_tests.test_config.test_adapters.DummyIface object at 0x74d1395834c0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74d1395834c0>)\ninterface = <InterfaceClass pyramid.interfaces.IResourceURL>, name = ''\n\n    def getMultiAdapter(self, objects, interface, name=''):\n        adapter = self.adapters.queryMultiAdapter(objects, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(objects, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: ((<r2e_tests.test_config.test_adapters.DummyIface object at 0x74d1395834c0>, <r2e_tests.test_config.test_adapters.DummyIface object at 0x74d1395834c0>), <InterfaceClass pyramid.interfaces.IResourceURL>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:379: ComponentLookupError\n_ AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables _\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_resource_url_adapter_introspectables>\n\n    def test_add_resource_url_adapter_introspectables(self):\n        config = self._makeOne()\n        config.add_resource_url_adapter(DummyResourceURL, DummyIface)\n        actions = config.action_state.actions\n        self.assertEqual(len(actions), 1)\n        intrs  = actions[0]['introspectables']\n        self.assertEqual(len(intrs), 1)\n        intr = intrs[0]\n        self.assertEqual(intr.type_name, 'resource url adapter')\n        self.assertEqual(intr.discriminator,\n                         ('resource url adapter', DummyIface))\n        self.assertEqual(intr.category_name, 'resource url adapters')\n>       self.assertEqual(\n            intr.title,\n            \"resource url adapter for resource iface \"\n            \"<class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\n            )\nE       AssertionError: \"reso[34 chars]e <class 'r2e_tests.test_config.test_adapters.DummyIface'>\" != \"reso[34 chars]e <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\"\nE       - resource url adapter for resource iface <class 'r2e_tests.test_config.test_adapters.DummyIface'>\nE       ?                                                  ^^^\nE       + resource url adapter for resource iface <class 'pyramid.tests.test_config.test_adapters.DummyIface'>\nE       ?                                                 ++ ^^^^^\n\nr2e_tests/test_config/test_adapters.py:211: AssertionError\n________ AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names ________\n\nself = <r2e_tests.test_config.test_adapters.AdaptersConfiguratorMixinTests testMethod=test_add_traverser_dotted_names>\n\n    def test_add_traverser_dotted_names(self):\n        from pyramid.interfaces import ITraverser\n        config = self._makeOne(autocommit=True)\n        config.add_traverser(\n            'pyramid.tests.test_config.test_adapters.DummyTraverser',\n            'pyramid.tests.test_config.test_adapters.DummyIface')\n        iface = DummyIface()\n>       traverser = config.registry.getAdapter(iface, ITraverser)\n\nr2e_tests/test_config/test_adapters.py:122: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <Registry r2e_tests.test_config>\nobject = <r2e_tests.test_config.test_adapters.DummyIface object at 0x74d139492d60>\ninterface = <InterfaceClass pyramid.interfaces.ITraverser>, name = ''\n\n    def getAdapter(self, object, interface, name=''):\n        adapter = self.adapters.queryAdapter(object, interface, name)\n        if adapter is None:\n>           raise ComponentLookupError(object, interface, name)\nE           zope.interface.interfaces.ComponentLookupError: (<r2e_tests.test_config.test_adapters.DummyIface object at 0x74d139492d60>, <InterfaceClass pyramid.interfaces.ITraverser>, '')\n\n.venv/lib/python3.8/site-packages/zope/interface/registry.py:368: ComponentLookupError\n_________ TestOverrideProvider.test_get_resource_filename_no_overrides _________\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_no_overrides>\n\n    def test_get_resource_filename_no_overrides(self):\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:158: AssertionError\n____ TestOverrideProvider.test_get_resource_filename_override_returns_None _____\n\nself = <r2e_tests.test_config.test_assets.TestOverrideProvider testMethod=test_get_resource_filename_override_returns_None>\n\n    def test_get_resource_filename_override_returns_None(self):\n        overrides = DummyOverrides(None)\n        self._registerOverrides(overrides)\n        import os\n        resource_name = 'test_assets.py'\n        import pyramid.tests.test_config\n        provider = self._makeOne(pyramid.tests.test_config)\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, resource_name)\n        result = provider.get_resource_filename(None, resource_name)\n>       self.assertEqual(result, expected)\nE       AssertionError: '/hom[73 chars]f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:212: AssertionError\n____________________ TestPackageOverrides.test_get_filename ____________________\n\nself = <r2e_tests.test_config.test_assets.TestPackageOverrides testMethod=test_get_filename>\n\n    def test_get_filename(self):\n        import os\n        overrides = [ DummyOverride(None), DummyOverride(\n            ('pyramid.tests.test_config', 'test_assets.py'))]\n        package = DummyPackage('package')\n        po = self._makeOne(package)\n        po.overrides= overrides\n        here = os.path.dirname(os.path.abspath(__file__))\n        expected = os.path.join(here, 'test_assets.py')\n>       self.assertEqual(po.get_filename('whatever'), expected)\nE       AssertionError: '/hom[73 chars]f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py' != '/hom[73 chars]f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py'\nE       - /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/test_assets.py\nE       ?                                                                                                    -- ^^^^^\nE       + /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/test_config/test_assets.py\nE       ?                                                                                                     ^^^\n\nr2e_tests/test_config/test_assets.py:401: AssertionError\n_________ TestI18NConfiguratorMixin.test_add_translation_dirs_abspath __________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_abspath>\n\n    def test_add_translation_dirs_abspath(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n>       config.add_translation_dirs(locale)\n\nr2e_tests/test_config/test_i18n.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/util.py:58: in wrapper\n    result = wrapped(self, *arg, **kw)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <pyramid.config.Configurator object at 0x74d1396142b0>\nspecs = ('/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale',)\nintrospectables = []\nspec = '/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\npackage_name = None\n\n    @action_method\n    def add_translation_dirs(self, *specs):\n        \"\"\" Add one or more :term:`translation directory` paths to the\n        current configuration state.  The ``specs`` argument is a\n        sequence that may contain absolute directory paths\n        (e.g. ``/usr/share/locale``) or :term:`asset specification`\n        names naming a directory path (e.g. ``some.package:locale``)\n        or a combination of the two.\n    \n        Example:\n    \n        .. code-block:: python\n    \n           config.add_translation_dirs('/usr/share/locale',\n                                       'some.package:locale')\n    \n        Later calls to ``add_translation_dir`` insert directories into the\n        beginning of the list of translation directories created by earlier\n        calls.  This means that the same translation found in a directory\n        added later in the configuration process will be found before one\n        added earlier in the configuration process.  However, if multiple\n        specs are provided in a single call to ``add_translation_dirs``, the\n        directories will be inserted into the beginning of the directory list\n        in the order they're provided in the ``*specs`` list argument (items\n        earlier in the list trump ones later in the list).\n        \"\"\"\n        directories = []\n        introspectables = []\n    \n        for spec in specs[::-1]: # reversed\n            package_name, filename = self._split_spec(spec)\n            if package_name is None: # absolute filename\n                directory = filename\n            else:\n                __import__(package_name)\n                package = sys.modules[package_name]\n                directory = os.path.join(package_path(package), filename)\n    \n            if not os.path.isdir(os.path.realpath(directory)):\n>               raise ConfigurationError('\"%s\" is not a directory' %\n                                         directory)\nE               pyramid.exceptions.ConfigurationError: \"/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale\" is not a directory\n\npyramid/config/i18n.py:92: ConfigurationError\n________ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec ________\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec>\n\n    def test_add_translation_dirs_asset_spec(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale])\nE       AssertionError: Lists differ: ['/ho[70 chars]2548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'] != ['/ho[70 chars]2548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale']\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale']\nE       ?                                                                                                       ^^^\n\nr2e_tests/test_config/test_i18n.py:57: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_asset_spec_existing_translation_dirs>\n\n    def test_add_translation_dirs_asset_spec_existing_translation_dirs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        directories = ['abc']\n        config.registry.registerUtility(directories, ITranslationDirectories)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale')\n        result = config.registry.getUtility(ITranslationDirectories)\n>       self.assertEqual(result, [locale, 'abc'])\nE       AssertionError: Lists differ: ['/ho[77 chars]fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale', 'abc'] != ['/ho[77 chars]fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale', 'abc']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\nE       \nE       - ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale',\nE       ?                                                                                                      -- ^^^^^\nE       \nE       + ['/home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale',\nE       ?                                                                                                       ^^^\nE       \nE          'abc']\n\nr2e_tests/test_config/test_i18n.py:67: AssertionError\n______ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs ______\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs>\n\n    def test_add_translation_dirs_multiple_specs(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]2ad5/pyramid/tests/pkgs/localeapp/locale', '/h[130 chars]le2'] != ['/ho[91 chars]2ad5/r2e_tests/pkgs/localeapp/locale', '/home/[122 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale'\nE       '/hom[68 chars]52548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale'\nE       \nE       Diff is 1002 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:74: AssertionError\n_ TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls _\n\nself = <r2e_tests.test_config.test_i18n.TestI18NConfiguratorMixin testMethod=test_add_translation_dirs_multiple_specs_multiple_calls>\n\n    def test_add_translation_dirs_multiple_specs_multiple_calls(self):\n        from pyramid.interfaces import ITranslationDirectories\n        config = self._makeOne(autocommit=True)\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale',\n                                    'pyramid.tests.pkgs.localeapp:locale2')\n        config.add_translation_dirs('pyramid.tests.pkgs.localeapp:locale3')\n>       self.assertEqual(config.registry.getUtility(ITranslationDirectories),\n                         [locale3, locale, locale2])\nE       AssertionError: Lists differ: ['/ho[91 chars]2ad5/pyramid/tests/pkgs/localeapp/locale3', '/[269 chars]le2'] != ['/ho[91 chars]2ad5/r2e_tests/pkgs/localeapp/locale3', '/home[257 chars]le2']\nE       \nE       First differing element 0:\nE       '/hom[69 chars]2548f26fe4655a89c00332ad5/pyramid/tests/pkgs/localeapp/locale3'\nE       '/hom[69 chars]2548f26fe4655a89c00332ad5/r2e_tests/pkgs/localeapp/locale3'\nE       \nE       Diff is 1504 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_i18n.py:83: AssertionError\n___________________ ConfiguratorTests.test_ctor_no_registry ____________________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_no_registry>\n\n    def test_ctor_no_registry(self):\n        import sys\n        from pyramid.interfaces import ISettings\n        from pyramid.config import Configurator\n        from pyramid.interfaces import IRendererFactory\n        config = Configurator()\n        this_pkg = sys.modules['pyramid.tests.test_config']\n        self.assertTrue(config.registry.getUtility(ISettings))\n>       self.assertEqual(config.package, this_pkg)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:68: AssertionError\n_________ ConfiguratorTests.test_ctor_noreg_debug_logger_None_default __________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_ctor_noreg_debug_logger_None_default>\n\n    def test_ctor_noreg_debug_logger_None_default(self):\n        from pyramid.interfaces import IDebugLogger\n        config = self._makeOne()\n        logger = config.registry.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:129: AssertionError\n_______________ ConfiguratorTests.test_scan_integration_conflict _______________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n>           c.commit()\n\nr2e_tests/test_config/test_init.py:1014: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \npyramid/config/__init__.py:594: in commit\n    self.action_state.execute_actions(introspector=self.introspector)\npyramid/config/__init__.py:1030: in execute_actions\n    for action in resolveConflicts(self.actions):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nactions = []\n\n    def resolveConflicts(actions):\n        \"\"\"Resolve conflicting actions\n    \n        Given an actions list, identify and try to resolve conflicting actions.\n        Actions conflict if they have the same non-None discriminator.\n        Conflicting actions can be resolved if the include path of one of\n        the actions is a prefix of the includepaths of the other\n        conflicting actions and is unequal to the include paths in the\n        other conflicting actions.\n        \"\"\"\n    \n        # organize actions by discriminators\n        unique = {}\n        output = []\n        for i, action in enumerate(actions):\n            if not isinstance(action, dict):\n                # old-style tuple action\n                action = expand_action(*action)\n    \n            # \"order\" is an integer grouping. Actions in a lower order will be\n            # executed before actions in a higher order.  Within an order,\n            # actions are executed sequentially based on original action ordering\n            # (\"i\").\n            order = action['order'] or 0\n            discriminator = action['discriminator']\n    \n            # \"ainfo\" is a tuple of (order, i, action) where \"order\" is a\n            # user-supplied grouping, \"i\" is an integer expressing the relative\n            # position of this action in the action list being resolved, and\n            # \"action\" is an action dictionary.  The purpose of an ainfo is to\n            # associate an \"order\" and an \"i\" with a particular action; \"order\"\n            # and \"i\" exist for sorting purposes after conflict resolution.\n            ainfo = (order, i, action)\n    \n            if discriminator is None:\n                # The discriminator is None, so this action can never conflict.\n                # We can add it directly to the result.\n                output.append(ainfo)\n                continue\n    \n            L = unique.setdefault(discriminator, [])\n            L.append(ainfo)\n    \n        # Check for conflicts\n        conflicts = {}\n    \n        for discriminator, ainfos in unique.items():\n    \n            # We use (includepath, order, i) as a sort key because we need to\n            # sort the actions by the paths so that the shortest path with a\n            # given prefix comes first.  The \"first\" action is the one with the\n            # shortest include path.  We break sorting ties using \"order\", then\n            # \"i\".\n            def bypath(ainfo):\n                path, order, i = ainfo[2]['includepath'], ainfo[0], ainfo[1]\n                return path, order, i\n    \n            ainfos.sort(key=bypath)\n            ainfo, rest = ainfos[0], ainfos[1:]\n            output.append(ainfo)\n            _, _, action = ainfo\n            basepath, baseinfo, discriminator = (action['includepath'],\n                                                 action['info'],\n                                                 action['discriminator'])\n    \n            for _, _, action in rest:\n                includepath = action['includepath']\n                # Test whether path is a prefix of opath\n                if (includepath[:len(basepath)] != basepath # not a prefix\n                    or includepath == basepath):\n                    L = conflicts.setdefault(discriminator, [baseinfo])\n                    L.append(action['info'])\n    \n        if conflicts:\n>           raise ConfigurationConflictError(conflicts)\nE           pyramid.exceptions.ConfigurationConflictError: Conflicting configuration actions\nE             For: ('view', None, '', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/__init__.py:\nE                   def abc(request):\nE             For: ('view', None, 'two', None, <InterfaceClass pyramid.interfaces.IView>, None, None, None, None, None, False, None, None, None, None)\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\nE               Line 4 of file /home/gcpuser/buckets/local_repoeval_bucket/repos/pyramid_88bbd46c9a5fab52548f26fe4655a89c00332ad5/pyramid/tests/test_config/pkgs/selfscan/another.py:\nE                   def two(request):\n\npyramid/config/__init__.py:1136: ConfigurationConflictError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_scan_integration_conflict>\n\n    def test_scan_integration_conflict(self):\n        from pyramid.tests.test_config.pkgs import selfscan\n        from pyramid.config import Configurator\n        c = Configurator()\n        c.scan(selfscan)\n        c.scan(selfscan)\n        try:\n            c.commit()\n        except ConfigurationConflictError as why:\n            def scanconflicts(e):\n                conflicts = e._conflicts.values()\n                for conflict in conflicts:\n                    for confinst in conflict:\n                        yield confinst.src\n            which = list(scanconflicts(why))\n            self.assertEqual(len(which), 4)\n>           self.assertTrue(\"@view_config(renderer='string')\" in which)\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_init.py:1023: AssertionError\n_______ ConfiguratorTests.test_setup_registry_debug_logger_None_default ________\n\nself = <r2e_tests.test_config.test_init.ConfiguratorTests testMethod=test_setup_registry_debug_logger_None_default>\n\n    def test_setup_registry_debug_logger_None_default(self):\n        from pyramid.registry import Registry\n        from pyramid.interfaces import IDebugLogger\n        reg = Registry()\n        config = self._makeOne(reg)\n        config.setup_registry()\n        logger = reg.getUtility(IDebugLogger)\n>       self.assertEqual(logger.name, 'pyramid.tests.test_config')\nE       AssertionError: 'r2e_tests.test_config' != 'pyramid.tests.test_config'\nE       - r2e_tests.test_config\nE       ?  ^^^\nE       + pyramid.tests.test_config\nE       ? ++ ^^^^^\n\nr2e_tests/test_config/test_init.py:415: AssertionError\n_________ TestConfigurator_add_directive.test_extend_with_dotted_name __________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_dotted_name>\n\n    def test_extend_with_dotted_name(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', 'pyramid.tests.test_config.dummy_extend')\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1415: AssertionError\n_______ TestConfigurator_add_directive.test_extend_with_python_callable ________\n\nself = <r2e_tests.test_config.test_init.TestConfigurator_add_directive testMethod=test_extend_with_python_callable>\n\n    def test_extend_with_python_callable(self):\n        from pyramid.tests import test_config\n        config = self.config\n        config.add_directive(\n            'dummy_extend', dummy_extend)\n        self.assertTrue(hasattr(config, 'dummy_extend'))\n        config.dummy_extend('discrim')\n        after = config.action_state\n        action = after.actions[-1]\n        self.assertEqual(action['discriminator'], 'discrim')\n        self.assertEqual(action['callable'], None)\n>       self.assertEqual(action['args'], test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_init.py:1428: AssertionError\n____ TestViewsConfigurationMixin.test_add_static_view_package_here_relative ____\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_static_view_package_here_relative>\n\n    def test_add_static_view_package_here_relative(self):\n        from pyramid.interfaces import IStaticURLInfo\n        info = DummyStaticURLInfo()\n        config = self._makeOne(autocommit=True)\n        config.registry.registerUtility(info, IStaticURLInfo)\n        config.add_static_view('static', 'files')\n>       self.assertEqual(\n            info.added,\n            [(config, 'static', 'pyramid.tests.test_config:files', {})])\nE       AssertionError: Lists differ: [(<py[39 chars]4d1394901f0>, 'static', 'r2e_tests.test_config:files', {})] != [(<py[39 chars]4d1394901f0>, 'static', 'pyramid.tests.test_config:files', {})]\nE       \nE       First differing element 0:\nE       (<pyr[37 chars]74d1394901f0>, 'static', 'r2e_tests.test_config:files', {})\nE       (<pyr[37 chars]74d1394901f0>, 'static', 'pyramid.tests.test_config:files', {})\nE       \nE         [(<pyramid.config.Configurator object at 0x74d1394901f0>,\nE           'static',\nE       -   'r2e_tests.test_config:files',\nE       ?     ^^^\nE       \nE       +   'pyramid.tests.test_config:files',\nE       ?    ++ ^^^^^\nE       \nE           {})]\n\nr2e_tests/test_config/test_views.py:1670: AssertionError\n_______ TestViewsConfigurationMixin.test_add_view_with_template_renderer _______\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer>\n\n    def test_add_view_with_template_renderer(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        class view(object):\n            def __init__(self, context, request):\n                self.request = request\n                self.context = context\n    \n            def __call__(self):\n                return {'a':'1'}\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=view, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:998: AssertionError\n_ TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable _\n\nself = <r2e_tests.test_config.test_views.TestViewsConfigurationMixin testMethod=test_add_view_with_template_renderer_no_callable>\n\n    def test_add_view_with_template_renderer_no_callable(self):\n        from pyramid.tests import test_config\n        from pyramid.interfaces import ISettings\n        config = self._makeOne(autocommit=True)\n        renderer = self._registerRenderer(config)\n        fixture = 'pyramid.tests.test_config:files/minimal.txt'\n        config.add_view(view=None, renderer=fixture)\n        wrapper = self._getViewCallable(config)\n        request = self._makeRequest(config)\n        result = wrapper(None, request)\n        self.assertEqual(result.body, b'Hello!')\n        settings = config.registry.queryUtility(ISettings)\n        result = renderer.info\n        self.assertEqual(result.registry, config.registry)\n        self.assertEqual(result.type, '.txt')\n>       self.assertEqual(result.package, test_config)\nE       AssertionError: <module 'r2e_tests.test_config' from '/home/gcpuse[117 chars].py'> != <module 'pyramid.tests.test_config' from '/home/gc[125 chars].py'>\n\nr2e_tests/test_config/test_views.py:1038: AssertionError\n_____________ TestViewDeriver.test_function_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2310: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable>\n\n    def test_function_returns_non_adaptable(self):\n        def view(request):\n            return None\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable function '\n                'pyramid.tests.test_config.test_views.view into a response '\n                'object. The value returned was None. You may have forgotten '\n                'to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[52 chars]tion r2e_tests.test_config.test_views.view int[110 chars]ble.' != 'Coul[52 chars]tion pyramid.tests.test_config.test_views.view[114 chars]ble.'\nE           Diff is 663 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2312: AssertionError\n___________ TestViewDeriver.test_function_returns_non_adaptable_dict ___________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2329: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable function r2e_tests.test_config.test_views.view into a response object. The value returned was {'a': 1}. You may have forgotten to define a renderer in the view configuration.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_function_returns_non_adaptable_dict>\n\n    def test_function_returns_non_adaptable_dict(self):\n        def view(request):\n            return {'a':1}\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                \"Could not convert return value of the view callable function \"\n                \"pyramid.tests.test_config.test_views.view into a response \"\n                \"object. The value returned was {'a': 1}. You may have \"\n                \"forgotten to define a renderer in the view configuration.\"\n                )\nE           AssertionError: \"Coul[52 chars]tion r2e_tests.test_config.test_views.view int[120 chars]ion.\" != \"Coul[52 chars]tion pyramid.tests.test_config.test_views.view[124 chars]ion.\"\nE           Diff is 683 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2331: AssertionError\n_____________ TestViewDeriver.test_instance_returns_non_adaptable ______________\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n>           result(None, None)\n\nr2e_tests/test_config/test_views.py:2350: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None, request = None\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable object <r2e_tests.test_config.test_views.TestViewDeriver.test_instance_returns_non_adaptable.<locals>.AView object at 0x74d1394b5d90> into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_instance_returns_non_adaptable>\n\n    def test_instance_returns_non_adaptable(self):\n        class AView(object):\n            def __call__(self, request):\n                return None\n        view = AView()\n        deriver = self._makeOne()\n        result = deriver(view)\n        self.assertFalse(result is view)\n        try:\n            result(None, None)\n        except ValueError as e:\n            msg = e.args[0]\n>           self.assertTrue(msg.startswith(\n                'Could not convert return value of the view callable object '\n                '<pyramid.tests.test_config.test_views.'))\nE           AssertionError: False is not true\n\nr2e_tests/test_config/test_views.py:2353: AssertionError\n____ TestViewDeriver.test_requestonly_default_method_returns_non_adaptable _____\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2373: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x74d1394572b0>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method __call__ of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_default_method_returns_non_adaptable>\n\n    def test_requestonly_default_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def __call__(self):\n                return None\n        deriver = self._makeOne()\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method __call__ of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[68 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[68 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 649 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2375: AssertionError\n___ TestViewDeriver.test_requestonly_nondefault_method_returns_non_adaptable ___\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n>           result(None, request)\n\nr2e_tests/test_config/test_views.py:2397: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ncontext = None\nrequest = <r2e_tests.test_config.test_views.DummyRequest object at 0x74d1391bd880>\n\n    def viewresult_to_response(context, request):\n        result = view(context, request)\n        response = registry.queryAdapterOrSelf(result, IResponse)\n        if response is None:\n            if result is None:\n                append = (' You may have forgotten to return a value from '\n                          'the view callable.')\n            elif isinstance(result, dict):\n                append = (' You may have forgotten to define a renderer in '\n                          'the view configuration.')\n            else:\n                append = ''\n            msg = ('Could not convert return value of the view callable %s '\n                  'into a response object. '\n                  'The value returned was %r.' + append)\n    \n>           raise ValueError(msg % (view_description(view), result))\nE           ValueError: Could not convert return value of the view callable method theviewmethod of class r2e_tests.test_config.test_views.AView into a response object. The value returned was None. You may have forgotten to return a value from the view callable.\n\npyramid/config/views.py:375: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <r2e_tests.test_config.test_views.TestViewDeriver testMethod=test_requestonly_nondefault_method_returns_non_adaptable>\n\n    def test_requestonly_nondefault_method_returns_non_adaptable(self):\n        request = DummyRequest()\n        class AView(object):\n            def __init__(self, request):\n                pass\n            def theviewmethod(self):\n                return None\n        deriver = self._makeOne(attr='theviewmethod')\n        result = deriver(AView)\n        self.assertFalse(result is AView)\n        try:\n            result(None, request)\n        except ValueError as e:\n>           self.assertEqual(\n                e.args[0],\n                'Could not convert return value of the view callable '\n                'method theviewmethod of '\n                'class pyramid.tests.test_config.test_views.AView into a '\n                'response object. The value returned was None. You may have '\n                'forgotten to return a value from the view callable.'\n                )\nE           AssertionError: 'Coul[73 chars]lass r2e_tests.test_config.test_views.AView in[111 chars]ble.' != 'Coul[73 chars]lass pyramid.tests.test_config.test_views.AVie[115 chars]ble.'\nE           Diff is 669 characters long. Set self.maxDiff to None to see it.\n\nr2e_tests/test_config/test_views.py:2399: AssertionError\n___________________ Test_view_description.test_without_text ____________________\n\nself = <r2e_tests.test_config.test_views.Test_view_description testMethod=test_without_text>\n\n    def test_without_text(self):\n        def view(): pass\n        result = self._callFUT(view)\n>       self.assertEqual(result,\n                         'function pyramid.tests.test_config.test_views.view')\nE       AssertionError: 'function r2e_tests.test_config.test_views.view' != 'function pyramid.tests.test_config.test_views.view'\nE       - function r2e_tests.test_config.test_views.view\nE       ?           ^^^\nE       + function pyramid.tests.test_config.test_views.view\nE       ?          ++ ^^^^^\n\nr2e_tests/test_config/test_views.py:3831: AssertionError\n_______________ TestPRequestCommand.test_command_display_headers _______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_display_headers>\n\n    def test_command_display_headers(self):\n        command = self._makeOne(\n            ['', '--display-headers', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(\n            self._out,\n            ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc'])\nE       AssertionError: Lists differ: ['200 OK', b'abc'] != ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\nE       \nE       First differing element 1:\nE       b'abc'\nE       'Content-Type: text/html; charset=UTF-8'\nE       \nE       Second list contains 1 additional elements.\nE       First extra element 2:\nE       'abc'\nE       \nE       - ['200 OK', b'abc']\nE       + ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc']\n\nr2e_tests/test_scripts/test_prequest.py:131: AssertionError\n_________ TestPRequestCommand.test_command_has_content_type_header_var _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_content_type_header_var>\n\n    def test_command_has_content_type_header_var(self):\n        command = self._makeOne(\n            ['', '--header=content-type:app/foo','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['CONTENT_TYPE'], 'app/foo')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:77: AssertionError\n_____________ TestPRequestCommand.test_command_has_good_header_var _____________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_good_header_var>\n\n    def test_command_has_good_header_var(self):\n        command = self._makeOne(\n            ['', '--header=name:value','development.ini', '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:67: AssertionError\n__________ TestPRequestCommand.test_command_has_multiple_header_vars ___________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_has_multiple_header_vars>\n\n    def test_command_has_multiple_header_vars(self):\n        command = self._makeOne(\n            ['',\n             '--header=name:value',\n             '--header=name2:value2',\n             'development.ini',\n             '/'])\n        command.run()\n        self.assertEqual(self._environ['HTTP_NAME'], 'value')\n        self.assertEqual(self._environ['HTTP_NAME2'], 'value2')\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:92: AssertionError\n_________________ TestPRequestCommand.test_command_method_get __________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_get>\n\n    def test_command_method_get(self):\n        command = self._makeOne(['', '--method=GET', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:100: AssertionError\n_________________ TestPRequestCommand.test_command_method_post _________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_method_post>\n\n    def test_command_method_post(self):\n        from pyramid.compat import NativeIO\n        command = self._makeOne(['', '--method=POST', 'development.ini', '/'])\n        stdin = NativeIO()\n        command.stdin = stdin\n        command.run()\n        self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')\n        self.assertEqual(self._environ['wsgi.input'], stdin)\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:113: AssertionError\n________ TestPRequestCommand.test_command_path_doesnt_start_with_slash _________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_path_doesnt_start_with_slash>\n\n    def test_command_path_doesnt_start_with_slash(self):\n        command = self._makeOne(['', 'development.ini', 'abc'])\n        command.run()\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:48: AssertionError\n__________________ TestPRequestCommand.test_command_two_args ___________________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_two_args>\n\n    def test_command_two_args(self):\n        command = self._makeOne(['', 'development.ini', '/'])\n        command.run()\n        self.assertEqual(self._path_info, '/')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:40: AssertionError\n______________ TestPRequestCommand.test_command_with_query_string ______________\n\nself = <r2e_tests.test_scripts.test_prequest.TestPRequestCommand testMethod=test_command_with_query_string>\n\n    def test_command_with_query_string(self):\n        command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c'])\n        command.run()\n        self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c')\n        self.assertEqual(self._path_info, '/abc')\n        self.assertEqual(self._spec, 'development.ini')\n        self.assertEqual(self._app_name, None)\n>       self.assertEqual(self._out, ['abc'])\nE       AssertionError: Lists differ: [b'abc'] != ['abc']\nE       \nE       First differing element 0:\nE       b'abc'\nE       'abc'\nE       \nE       - [b'abc']\nE       ?  -\nE       \nE       + ['abc']\n\nr2e_tests/test_scripts/test_prequest.py:122: AssertionError\n_____ TestPViewsCommand.test_views_command_single_view_function_traversal ______\n\nself = <r2e_tests.test_scripts.test_pviews.TestPViewsCommand testMethod=test_views_command_single_view_function_traversal>\n\n    def test_views_command_single_view_function_traversal(self):\n        from pyramid.registry import Registry\n        registry = Registry()\n        command = self._makeOne(registry=registry)\n        L = []\n        command.out = L.append\n        def view(): pass\n        view.__request_attrs__ = {'context': 'context', 'view_name': 'a'}\n        command._find_view = lambda arg1, arg2: view\n        command.args = ('/foo/bar/myapp.ini#myapp', '/a')\n        result = command.run()\n        self.assertEqual(result, 0)\n        self.assertEqual(L[1], 'URL = /a')\n        self.assertEqual(L[3], '    context: context')\n        self.assertEqual(L[4], '    view name: a')\n>       self.assertEqual(L[8],\n                         '    pyramid.tests.test_scripts.test_pviews.view')\nE       AssertionError: '    r2e_tests.test_scripts.test_pviews.view' != '    pyramid.tests.test_scripts.test_pviews.view'\nE       -     r2e_tests.test_scripts.test_pviews.view\nE       ?      ^^^\nE       +     pyramid.tests.test_scripts.test_pviews.view\nE       ?     ++ ^^^^^\n\nr2e_tests/test_scripts/test_pviews.py:283: AssertionError\n==================================== PASSES ====================================\n=========================== short test summary info ============================\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor\nPASSED r2e_tests/test_1.py::TestRoute::test_ctor_defaults\nPASSED r2e_tests/test_1.py::TestRoute::test_generate\nPASSED r2e_tests/test_1.py::TestRoute::test_match\nPASSED r2e_tests/test_1.py::TestRoute::test_provides_IRoute\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__custom_predicate_gets_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__no_path_info\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__pathinfo_cant_be_decoded\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_matches2\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_empty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__root_route_when_path_info_notempty\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_fails_to_match_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test___call__route_matches_with_predicates\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_cc_bug\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_name_exists_removes_old\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_connect_static_overridden\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_generate\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_route_misses\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_get_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_has_routes\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_no_route_matches\nPASSED r2e_tests/test_1.py::RoutesMapperTests::test_provides_IRoutesMapper\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies2\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_embedded_squigglies3\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_docs_sample_generate\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_mixedtype_values\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_nonstring_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_generate_with_string_remainder_and_unicode_replacement\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_highorder_pattern_utf8\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_beginning_slash\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_no_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_generate_with_high_order_dynamic\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_pattern_with_high_order_literal\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_bracket_star\nPASSED r2e_tests/test_1.py::TestCompileRoute::test_with_star\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_generator_functional_oldstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_newstyle\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_notdynamic\nPASSED r2e_tests/test_1.py::TestCompileRouteFunctional::test_matcher_functional_oldstyle\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_object_event_subscriber\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_default_resource_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_nodefault_resource_iface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_response_adapter_self\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_dottednames\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_subscriber_iface_specified\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_default_iface_means_Interface\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_introspectables\nPASSED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_nondefault_iface\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_already_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test__override_not_yet_registered\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_directory_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_file\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_file_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_directory\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_package_with_package\nPASSED r2e_tests/test_config/test_assets.py::TestAssetsConfiguratorMixin::test_override_asset_samename\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_stream_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_string_override_returns_value\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_has_resource_override_returns_True\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_False\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_isdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_no_overrides\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_None\nPASSED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_resource_listdir_override_returns_values\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_different_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_package_already_has_loader_of_same_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_registers_loader_type\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_loader\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_ctor_sets_local_state\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_stream_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_string_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_has_resource_file_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_directory\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_emptystring\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_insert_file\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_false\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_isdir_true\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_listdir_doesnt_exist\nPASSED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_search_path\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestDirectoryOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_match\nPASSED r2e_tests/test_config/test_assets.py::TestFileOverride::test_it_no_match\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_multiple_request_properties_conflict\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_subscriber\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_property\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_request_property_with_unnamed_callable\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_as_None\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_root_factory_dottedname\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory\nPASSED r2e_tests/test_config/test_factories.py::TestFactoriesMixin::test_set_session_factory_dottedname\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_missing_dir\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_no_specs\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_registers_chameleon_translate\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator\nPASSED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_set_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__matches_no_action_wrap\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_dont_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test___getattr__missing_when_directives_exist\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_has_listeners\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_notify\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_queryAdapterOrSelf\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test__fix_registry_registerSelfAdapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_already_absolute\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_notastring\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_absolute_asset_spec_relative\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_autocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_kw_is_not_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_branching_nonautocommit_without_config_info\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_action_nonautocommit_with_introspectables_introspection_off\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_autocommit_no_conflicts\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_begin_with_request\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_include\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_resolved_with_two_includes_and_local\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_simple\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_commit_conflict_with_two_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_forbidden_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_conflict_set_notfound_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_default_view_mapper\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_exceptionresponse_view_custom\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_httpexception_view_default\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_session_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_introspection\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_package_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_with_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_end\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_hook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_dotted_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_missing_source_file\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_module_defaults_to_includeme_missing\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_nested_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_python_callable\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_include_with_route_prefix\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_introspector_decorator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_make_wsgi_app\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_notstring_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_fail\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_maybe_dotted_string_success\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_dottedname_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_extra_kw\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_ignore\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_with_onerror\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_alternate_renderers\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authentication_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_authorization_policy_only\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_calls_fix_registry\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_custom_settings\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_name\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_non_None\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_default_permission\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_dottedname_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_explicit_notfound_trumps_iexceptionresponse\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_includes_spaces\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_locale_negotiator_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_no_default_root_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_exceptionresponse_view\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_registers_default_webob_iresponse_adapter\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_request_factory_dottedname\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_tweens\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_unhook_zca\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_module\nPASSED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_with_package_package\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_for_\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_attr\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_context\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_exception\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_for\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_permission_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_add_route_with_view_renderer_alias\nPASSED r2e_tests/test_config/test_init.py::TestConfiguratorDeprecatedFeatures::test_conflict_route_with_view\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_directive_persists_across_configurator_creations\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_action_method_successful\nPASSED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_same_name_doesnt_conflict\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_simple\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_includepath_and_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_info\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_action_with_order\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_dicts\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_error\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_tuples\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectable_no_callable\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_execute_actions_with_introspectables\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_it\nPASSED r2e_tests/test_config/test_init.py::TestActionState::test_processSpec\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_conflict\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_dicts\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_success_tuples\nPASSED r2e_tests/test_config/test_init.py::Test_resolveConflicts::test_it_with_actions_grouped_by_order\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries\nPASSED r2e_tests/test_config/test_init.py::TestGlobalRegistriesIntegration::test_global_registries_empty\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_add_renderer_dottedname_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory\nPASSED r2e_tests/test_config/test_rendering.py::TestRenderingConfiguratorMixin::test_set_renderer_globals_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_defaults\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_discriminator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_path_no_pattern\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_pattern_with_path\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_attr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_context\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_permission\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_no_view_with_view_renderer\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_accept\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_custom_predicates\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_factory_dottedname\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_header\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_highorder\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_path_info_regex\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_pregenerator\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_method\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_request_param\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_route_prefix\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_static\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_add_route_with_xhr\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_already_registered\nPASSED r2e_tests/test_config/test_routes.py::RoutesConfiguratorMixinTests::test_get_routes_mapper_not_yet_registered\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_no_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authentication_policy_with_authz_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_no_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_authorization_policy_with_authn_policy_autocommit\nPASSED r2e_tests/test_config/test_security.py::ConfiguratorSecurityMethodsTests::test_set_default_permission\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_None\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test__set_settings_as_dictwithvalues\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_already_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_add_settings_settings_not_yet_registered\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_nosettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettingsConfiguratorMixin::test_get_settings_withsettings\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_authorization\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_notfound\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_routematch\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_debug_templates\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_default_locale_name\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_fail\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_raises_attribute_error\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_getattr_success\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_noargs\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_originals_kept\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_prevent_http_cache\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_all\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_assets\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_resources\nPASSED r2e_tests/test_config/test_settings.py::TestSettings::test_reload_templates\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_explicitrenderer\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_renderer_twice\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_defaults\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_dottedname\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_multiple\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_subscriber_single\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_add_template\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_resources\nPASSED r2e_tests/test_config/test_testing.py::TestingConfiguratorMixinTests::test_testing_securitypolicy\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_dottedname\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_instance\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_name_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_over_ingress_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_under_main_iterable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tween_unsuitable\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_conflict\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_distinct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_over_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_under_nonstringoriter\nPASSED r2e_tests/test_config/test_tweens.py::TestTweensConfiguratorMixin::test_add_tweens_names_with_underover\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test___call___implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_explicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_add_implicit\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_1\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_2\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_3\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_4\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_5\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_direct\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_conflict_indirect\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_and_under_partials\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_over_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_missing_under_partial_with_fallback\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_missing_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_multiple_matching_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestTweens::test_implicit_ordering_with_partial_fallbacks\nPASSED r2e_tests/test_config/test_tweens.py::TestCyclicDependencyError::test___str__\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_custom_predicates_can_affect_traversal\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_different_custom_predicates_with_same_hash\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_dict_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_from_string_fails\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_match_param_hashable\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_and_number\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_importance_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_number_of_predicates\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_ordering_xhr_and_request_method_trump_only_containment\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_predicate_text_is_correct\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_ordering_hashes_same\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_request_method_sequence\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_has_remainder_already\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches\nPASSED r2e_tests/test_config/test_util.py::Test__make_predicates::test_traverse_matches_with_highorder_chars\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test___str__\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_class_conforms\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_ctor\nPASSED r2e_tests/test_config/test_util.py::TestActionInfo::test_instance_conforms\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_forbidden_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_append_slash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_notfound_view_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_absolute\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_here_no_utility_registered\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_relative\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_instancemethod_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_context_trumps_for\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_more_preds_first_bests_fewer_preds_last\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_custom_predicate_bests_standard_predicate\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_default_phash_overrides_no_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_mulview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exc_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_exception_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for__as_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_class\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_for_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview___discriminator__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_call_ordering\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_context_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_exception_superclass_then_subclass\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_securedview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_existing_view_with___accept__\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_multiview_replaces_multiview\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_register_secured_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_phash_overrides_existing_single_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_same_predicates\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_no_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_None_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_view_callable_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_multiview_replaces_existing_view\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_accept_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_containment_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_custom_predicates_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_decorator\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_default_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_function_callable_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_noval_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_missing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_header_val_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_http_cache\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_name_unicode\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_no_default_permission_no_explicit_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_nonexistant_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_badregex\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_match\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_path_info_nomatch\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_get_implies_head\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_sequence_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_method_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_noval_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_param_val_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_and_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_iface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_request_type_as_noniface\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_route_name_exception\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_conflicts\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_config_and_view_defaults_doesnt_conflict\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_kwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_false\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_xhr_true\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_wrapped_view_is_decorated\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_views_with_accept_multiview_replaces_existing\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_dottedname\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_function\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_no_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_derive_view_with_default_renderer_with_explicit_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper\nPASSED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_set_view_mapper_dottedname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_false\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_function_with_attr_true\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_defaultargs_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_nocall\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_instance_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_method_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_firstname_request_with_secondname\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_newstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_not_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_defaultargs_firstname_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_noargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_onearg_named_somethingelse\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_oldstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_onearg_named_request\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_init_toomanyargs\nPASSED r2e_tests/test_config/test_views.py::Test_requestonly::test_requestonly_newstyle_class_no_init\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_IException_subinterface\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_class\nPASSED r2e_tests/test_config/test_views.py::Test_isexception::test_is_exception_instance\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__intermediate_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call__raise_not_found_isnt_interpreted_as_pred_mismatch\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test___call_permissive_has_no_call_permissive\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_match\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call__with_accept_miss\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test__call_permissive__not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_add_with_phash_override_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_class_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_best_match_returns_None\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_no_self_accepts\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_get_views_request_has_no_accept\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_instance_implements_ISecuredView\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_not_found\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_fails\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_match_predicate_succeeds\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_multiple_with_functions_as_views\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_match_with__permitted__\nPASSED r2e_tests/test_config/test_views.py::TestMultiView::test_permitted_no_views\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_instance_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_context_and_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_newstyle_class_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_context_request_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_as_oldstyle_cls_requestonly_attr_and_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_default_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_attr_wrapped_view_branching_nondefault_phash\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_class_without_attr\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_denied2\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_overridden\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_debug_auth_permission_authpol_permitted_no_request\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_prevent_http_cache_in_settings\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_bad_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_integer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_prevent_auto_set\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_timedelta\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_http_cached_view_tuple_seconds_None\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_predicate_mismatch_view_has_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_has_view\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_function_with_renderer_request_override\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_no_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_secured_view_raises_forbidden_with_name\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authn_policy_no_authz_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_authz_policy_no_authn_policy\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_authpol\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_debug_authorization_no_permission\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_all\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_checker\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_predicates_notall\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_config_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_default_mapper_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_view_mapper_view_specified\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname\nPASSED r2e_tests/test_config/test_views.py::TestViewDeriver::test_with_wrapper_viewname_notfound\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test__view_as_function_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_function_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_context_and_request_and_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_instance_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_newstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_context_and_request_with_attr\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly\nPASSED r2e_tests/test_config/test_views.py::TestDefaultViewMapper::test_view_as_oldstyle_class_requestonly_with_attr\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_different_with_existing_original_view\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_same\nPASSED r2e_tests/test_config/test_views.py::Test_preserve_view_attrs::test_it_view_is_None\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_already_exists\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_noendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_url_withendslash\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_for_\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_route_prefix\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_attr\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_context\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_for\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_permission\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_add_viewname_with_view_renderer\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_missing\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_quoting\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_miss\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_registration_no_registry_on_request\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_route_url\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name1\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_slash_in_name2\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_quoted_remote\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_generate_url_unquoted_local\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyClass\nPASSED r2e_tests/test_config/test_views.py::TestStaticURLInfo::test_verifyObject\nPASSED r2e_tests/test_config/test_views.py::Test_view_description::test_with_text\nPASSED r2e_tests/test_scripts/test_common.py::Test_logging_file_config::test_it\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_absolute_path\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_multiple_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_known_scaffold_single_rendered\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_no_project_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_no_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_run_show_scaffolds_none_exist\nPASSED r2e_tests/test_scripts/test_pcreate.py::TestPCreateCommand::test_unknown_scaffold_name\nPASSED r2e_tests/test_scripts/test_pcreate.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_bad_config_header\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_not_enough_args\nPASSED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_response_has_no_charset\nPASSED r2e_tests/test_scripts/test_prequest.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test__get_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_mapper\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_no_routes\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_route_with_no_slash_prefix\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_route_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_no_views_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered\nPASSED r2e_tests/test_scripts/test_proutes.py::TestPRoutesCommand::test_single_route_one_view_registered_with_factory\nPASSED r2e_tests/test_scripts/test_proutes.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_bad\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_parse_vars_good\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_record_pid_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_current_pid_is_not_written_pid\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_not_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_stale_pid_write_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_unlink_exception\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_file_verbose\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_remove_pid_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_no_args\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_bad_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_invalid_pid_in_file\nPASSED r2e_tests/test_scripts/test_pserve.py::TestPServeCommand::test_run_stop_daemon_no_such_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_no_pid_file\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_read_pidfile::test_read_pidfile_not_a_number\nPASSED r2e_tests/test_scripts/test_pserve.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_flush\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_open\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_write\nPASSED r2e_tests/test_scripts/test_pserve.py::TestLazyWriter::test_writeline\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__fail\nPASSED r2e_tests/test_scripts/test_pserve.py::Test__methodwrapper::test___call__succeed\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_custom_section_override\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_check_variable_override_order\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_custom_items\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_default_shell_with_unknown_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_10\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_ipython_v0_11\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_loads_setup_from_options\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_command_setup\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_bpython_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_default_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_10_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_make_ipython_v0_11_shell\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ipython_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::TestPShellCommand::test_shell_ordering\nPASSED r2e_tests/test_scripts/test_pshell.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test__get_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_and_explicit_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_implicit_tweens_only\nPASSED r2e_tests/test_scripts/test_ptweens.py::TestPTweensCommand::test_command_no_tweens\nPASSED r2e_tests/test_scripts/test_ptweens.py::Test_main::test_it\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_all_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_none_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_multi_routes_some_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_no_match_multiview_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_multiview_no_view_registered\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_route_no_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test__find_view_traversal_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multi_view_nested\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_multiview_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_not_found_url_starts_without_slash\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_route_with_route_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_permission\nPASSED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_traversal_with_predicates\nPASSED r2e_tests/test_scripts/test_pviews.py::Test_main::test_it\nFAILED r2e_tests/test_1.py::TestCompileRoute::test_custom_regex_with_colons\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_dotted_names\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_resource_url_adapter_introspectables\nFAILED r2e_tests/test_config/test_adapters.py::AdaptersConfiguratorMixinTests::test_add_traverser_dotted_names\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_no_overrides\nFAILED r2e_tests/test_config/test_assets.py::TestOverrideProvider::test_get_resource_filename_override_returns_None\nFAILED r2e_tests/test_config/test_assets.py::TestPackageOverrides::test_get_filename\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_abspath\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_asset_spec_existing_translation_dirs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs\nFAILED r2e_tests/test_config/test_i18n.py::TestI18NConfiguratorMixin::test_add_translation_dirs_multiple_specs_multiple_calls\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_no_registry\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_ctor_noreg_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_scan_integration_conflict\nFAILED r2e_tests/test_config/test_init.py::ConfiguratorTests::test_setup_registry_debug_logger_None_default\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_dotted_name\nFAILED r2e_tests/test_config/test_init.py::TestConfigurator_add_directive::test_extend_with_python_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_static_view_package_here_relative\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer\nFAILED r2e_tests/test_config/test_views.py::TestViewsConfigurationMixin::test_add_view_with_template_renderer_no_callable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_function_returns_non_adaptable_dict\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_instance_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_default_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::TestViewDeriver::test_requestonly_nondefault_method_returns_non_adaptable\nFAILED r2e_tests/test_config/test_views.py::Test_view_description::test_without_text\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_display_headers\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_content_type_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_good_header_var\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_has_multiple_header_vars\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_get\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_method_post\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_path_doesnt_start_with_slash\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_two_args\nFAILED r2e_tests/test_scripts/test_prequest.py::TestPRequestCommand::test_command_with_query_string\nFAILED r2e_tests/test_scripts/test_pviews.py::TestPViewsCommand::test_views_command_single_view_function_traversal\n======================== 37 failed, 735 passed in 3.46s ========================\n",
    "old_commit_res_stderr": ""
}
pyramid/tests/test_urldispatch.py pyramid/urldispatch.py
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[ISSUE]

**Title:** Error When Route Patterns Include Regex with Colons

**Description:**
When defining a route with replacement markers that contain regex patterns with colons, compiling the route results in a `ValueError`. This occurs because the route compiler incorrectly splits the replacement marker on every colon, leading to too many values to unpack.

**Example Code:**
```python
from pyramid.urldispatch import _compile_route

pattern = 'foo/{baz}/biz/{buz:(?:[^/\.]+)}.{bar}'
matcher, generator = _compile_route(pattern)
```

**Expected Behavior:**
The route should compile successfully, correctly handling regex patterns that include colons within the replacement markers.

**Actual Behavior:**
A `ValueError` is raised with the message "too many values to unpack (expected 2)" because the split operation does not limit the number of splits, causing it to fail when regex contains additional colons.

[/ISSUE]
--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.

--- BEGIN FILE ---
```
### pyramid/urldispatch.py
import re
from zope.interface import implementer

from pyramid.interfaces import (
    IRoutesMapper,
    IRoute,
    )

from pyramid.compat import (
    PY3,
    native_,
    text_,
    text_type,
    string_types,
    binary_type,
    is_nonstr_iter,
    decode_path_info,
    )

from pyramid.exceptions import URLDecodeError

from pyramid.traversal import (
    quote_path_segment,
    split_path_info,
    )

_marker = object()

@implementer(IRoute)
class Route(object):
    def __init__(self, name, pattern, factory=None, predicates=(),
                 pregenerator=None):
        self.pattern = pattern
        self.path = pattern # indefinite b/w compat, not in interface
        self.match, self.generate = _compile_route(pattern)
        self.name = name
        self.factory = factory
        self.predicates = predicates
        self.pregenerator = pregenerator

@implementer(IRoutesMapper)
class RoutesMapper(object):
    def __init__(self):
        self.routelist = []
        self.routes = {}

    def has_routes(self):
        return bool(self.routelist)

    def get_routes(self):
        return self.routelist

    def get_route(self, name):
        return self.routes.get(name)

    def connect(self, name, pattern, factory=None, predicates=(),
                pregenerator=None, static=False):
        if name in self.routes:
            oldroute = self.routes[name]
            if oldroute in self.routelist:
                self.routelist.remove(oldroute)
        route = Route(name, pattern, factory, predicates, pregenerator)
        if not static:
            self.routelist.append(route)
        self.routes[name] = route
        return route

    def generate(self, name, kw):
        return self.routes[name].generate(kw)

    def __call__(self, request):
        environ = request.environ
        try:
            # empty if mounted under a path in mod_wsgi, for example
            path = decode_path_info(environ['PATH_INFO'] or '/')
        except KeyError:
            path = '/'
        except UnicodeDecodeError as e:
            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)

        for route in self.routelist:
            match = route.match(path)
            if match is not None:
                preds = route.predicates
                info = {'match':match, 'route':route}
                if preds and not all((p(info, request) for p in preds)):
                    continue
                return info

        return {'route':None, 'match':None}

# stolen from bobo and modified
old_route_re = re.compile(r'(\:[_a-zA-Z]\w*)')
star_at_end = re.compile(r'\*\w*$')

# The tortuous nature of the regex named ``route_re`` below is due to the
# fact that we need to support at least one level of "inner" squigglies
# inside the expr of a {name:expr} pattern.  This regex used to be just
# (\{[a-zA-Z][^\}]*\}) but that choked when supplied with e.g. {foo:\d{4}}.
route_re = re.compile(r'(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})')

def update_pattern(matchobj):
    name = matchobj.group(0)
    return '{%s}' % name[1:]

def _compile_route(route):
    # This function really wants to consume Unicode patterns natively, but if
    # someone passes us a bytestring, we allow it by converting it to Unicode
    # using the ASCII decoding.  We decode it using ASCII because we don't
    # want to accept bytestrings with high-order characters in them here as
    # we have no idea what the encoding represents.
    if route.__class__ is not text_type:
        try:
            route = text_(route, 'ascii')
        except UnicodeDecodeError:
            raise ValueError(
                'The pattern value passed to add_route must be '
                'either a Unicode string or a plain string without '
                'any non-ASCII characters (you provided %r).' % route)

    if old_route_re.search(route) and not route_re.search(route):
        route = old_route_re.sub(update_pattern, route)

    if not route.startswith('/'):
        route = '/' + route

    remainder = None
    if star_at_end.search(route):
        route, remainder = route.rsplit('*', 1)

    pat = route_re.split(route)

    # every element in "pat" will be Unicode (regardless of whether the
    # route_re regex pattern is itself Unicode or str)
    pat.reverse()
    rpat = []
    gen = []
    prefix = pat.pop() # invar: always at least one element (route='/'+route)

    # We want to generate URL-encoded URLs, so we url-quote the prefix, being
    # careful not to quote any embedded slashes.  We have to replace '%' with
    # '%%' afterwards, as the strings that go into "gen" are used as string
    # replacement targets.
    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native
    rpat.append(re.escape(prefix)) # unicode

    while pat:
        name = pat.pop() # unicode
        name = name[1:-1]
        if ':' in name:
            name, reg = name.split(':')
        else:
            reg = '[^/]+'
        gen.append('%%(%s)s' % native_(name)) # native
        name = '(?P<%s>%s)' % (name, reg) # unicode
        rpat.append(name)
        s = pat.pop() # unicode
        if s:
            rpat.append(re.escape(s)) # unicode
            # We want to generate URL-encoded URLs, so we url-quote this
            # literal in the pattern, being careful not to quote the embedded
            # slashes.  We have to replace '%' with '%%' afterwards, as the
            # strings that go into "gen" are used as string replacement
            # targets.  What is appended to gen is a native string.
            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))

    if remainder:
        rpat.append('(?P<%s>.*?)' % remainder) # unicode
        gen.append('%%(%s)s' % native_(remainder)) # native

    pattern = ''.join(rpat) + '$' # unicode

    match = re.compile(pattern).match
    def matcher(path):
        # This function really wants to consume Unicode patterns natively,
        # but if someone passes us a bytestring, we allow it by converting it
        # to Unicode using the ASCII decoding.  We decode it using ASCII
        # because we don't want to accept bytestrings with high-order
        # characters in them here as we have no idea what the encoding
        # represents.
        if path.__class__ is not text_type:
            path = text_(path, 'ascii')
        m = match(path)
        if m is None:
            return None
        d = {}
        for k, v in m.groupdict().items():
            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode
            # kwargs as **kw, so we explicitly cast the keys to native
            # strings in case someone wants to pass the result as **kw
            nk = native_(k, 'ascii')
            if k == remainder:
                d[nk] = split_path_info(v)
            else:
                d[nk] = v
        return d

    gen = ''.join(gen)
    def generator(dict):
        newdict = {}
        for k, v in dict.items():
            if PY3: # pragma: no cover
                if v.__class__ is binary_type:
                    # url_quote below needs a native string, not bytes on Py3
                    v = v.decode('utf-8')
            else:
                if v.__class__ is text_type:
                    # url_quote below needs bytes, not unicode on Py2
                    v = v.encode('utf-8')

            if k == remainder:
                # a stararg argument
                if is_nonstr_iter(v):
                    v = '/'.join([quote_path_segment(x) for x in v]) # native
                else:
                    if v.__class__ not in string_types:
                        v = str(v)
                    v = quote_path_segment(v, safe='/')
            else:
                if v.__class__ not in string_types:
                    v = str(v)
                # v may be bytes (py2) or native string (py3)
                v = quote_path_segment(v)

            # at this point, the value will be a native string
            newdict[k] = v

        result = gen % newdict # native string result
        return result

    return matcher, generator

```
--- END FILE ---

Please first localize the bug based on the issue statement, and then generate *SEARCH/REPLACE* edits to fix the issue.

Every *SEARCH/REPLACE* edit must use this format:
1. The file path
2. The start of search block: <<<<<<< SEARCH
3. A contiguous chunk of lines to search for in the existing source code
4. The dividing line: =======
5. The lines to replace into the source code
6. The end of the replace block: >>>>>>> REPLACE

Here is an example:

```python
### mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```
</solution>

Please note that the *SEARCH/REPLACE* edit REQUIRES PROPER INDENTATION. If you would like to add the line '        print(x)', you must fully write that out, with all those spaces before the code!
Wrap each *SEARCH/REPLACE* edit in a code block as shown in the example above. If you have multiple *SEARCH/REPLACE* edits, use a separate code block for each one.
[ISSUE]

**Title:** Error When Route Patterns Include Regex with Colons

**Description:**
When defining a route with replacement markers that contain regex patterns with colons, compiling the route results in a `ValueError`. This occurs because the route compiler incorrectly splits the replacement marker on every colon, leading to too many values to unpack.

**Example Code:**
```python
from pyramid.urldispatch import _compile_route

pattern = 'foo/{baz}/biz/{buz:(?:[^/\.]+)}.{bar}'
matcher, generator = _compile_route(pattern)
```

**Expected Behavior:**
The route should compile successfully, correctly handling regex patterns that include colons within the replacement markers.

**Actual Behavior:**
A `ValueError` is raised with the message "too many values to unpack (expected 2)" because the split operation does not limit the number of splits, causing it to fail when regex contains additional colons.

[/ISSUE]
{
    "TestRoute.test_ctor": "PASSED",
    "TestRoute.test_ctor_defaults": "PASSED",
    "TestRoute.test_generate": "PASSED",
    "TestRoute.test_match": "PASSED",
    "TestRoute.test_provides_IRoute": "PASSED",
    "RoutesMapperTests.test___call__custom_predicate_gets_info": "PASSED",
    "RoutesMapperTests.test___call__no_path_info": "PASSED",
    "RoutesMapperTests.test___call__pathinfo_cant_be_decoded": "PASSED",
    "RoutesMapperTests.test___call__root_route_matches": "PASSED",
    "RoutesMapperTests.test___call__root_route_matches2": "PASSED",
    "RoutesMapperTests.test___call__root_route_when_path_info_empty": "PASSED",
    "RoutesMapperTests.test___call__root_route_when_path_info_notempty": "PASSED",
    "RoutesMapperTests.test___call__route_fails_to_match_with_predicates": "PASSED",
    "RoutesMapperTests.test___call__route_matches": "PASSED",
    "RoutesMapperTests.test___call__route_matches_with_predicates": "PASSED",
    "RoutesMapperTests.test_cc_bug": "PASSED",
    "RoutesMapperTests.test_connect_name_exists_removes_old": "PASSED",
    "RoutesMapperTests.test_connect_static": "PASSED",
    "RoutesMapperTests.test_connect_static_overridden": "PASSED",
    "RoutesMapperTests.test_generate": "PASSED",
    "RoutesMapperTests.test_get_route_matches": "PASSED",
    "RoutesMapperTests.test_get_route_misses": "PASSED",
    "RoutesMapperTests.test_get_routes": "PASSED",
    "RoutesMapperTests.test_has_routes": "PASSED",
    "RoutesMapperTests.test_no_route_matches": "PASSED",
    "RoutesMapperTests.test_provides_IRoutesMapper": "PASSED",
    "TestCompileRoute.test_custom_regex": "PASSED",
    "TestCompileRoute.test_custom_regex_with_colons": "PASSED",
    "TestCompileRoute.test_custom_regex_with_embedded_squigglies": "PASSED",
    "TestCompileRoute.test_custom_regex_with_embedded_squigglies2": "PASSED",
    "TestCompileRoute.test_custom_regex_with_embedded_squigglies3": "PASSED",
    "TestCompileRoute.test_docs_sample_generate": "PASSED",
    "TestCompileRoute.test_generate_with_mixedtype_values": "PASSED",
    "TestCompileRoute.test_generate_with_string_remainder_and_nonstring_replacement": "PASSED",
    "TestCompileRoute.test_generate_with_string_remainder_and_unicode_replacement": "PASSED",
    "TestCompileRoute.test_highorder_pattern_utf8": "PASSED",
    "TestCompileRoute.test_mixed_newstyle_oldstyle_pattern_defaults_to_newstyle": "PASSED",
    "TestCompileRoute.test_no_beginning_slash": "PASSED",
    "TestCompileRoute.test_no_star": "PASSED",
    "TestCompileRoute.test_pattern_generate_with_high_order_dynamic": "PASSED",
    "TestCompileRoute.test_pattern_with_high_order_literal": "PASSED",
    "TestCompileRoute.test_with_bracket_star": "PASSED",
    "TestCompileRoute.test_with_star": "PASSED",
    "TestCompileRouteFunctional.test_generator_functional_newstyle": "PASSED",
    "TestCompileRouteFunctional.test_generator_functional_notdynamic": "PASSED",
    "TestCompileRouteFunctional.test_generator_functional_oldstyle": "PASSED",
    "TestCompileRouteFunctional.test_matcher_functional_newstyle": "PASSED",
    "TestCompileRouteFunctional.test_matcher_functional_notdynamic": "PASSED",
    "TestCompileRouteFunctional.test_matcher_functional_oldstyle": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_object_event_subscriber": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_default_resource_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_nodefault_resource_iface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter_dottednames": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_response_adapter_self": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_defaults": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_dottednames": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_subscriber_iface_specified": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_default_iface_means_Interface": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_introspectables": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_nondefault_iface": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_already_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test__override_not_yet_registered": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_directory_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_file": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_file_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_directory": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_package_with_package": "PASSED",
    "TestAssetsConfiguratorMixin.test_override_asset_samename": "PASSED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_stream_override_returns_value": "PASSED",
    "TestOverrideProvider.test_get_resource_string_no_overrides": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_None": "PASSED",
    "TestOverrideProvider.test_get_resource_string_override_returns_value": "PASSED",
    "TestOverrideProvider.test_has_resource_no_overrides": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_None": "PASSED",
    "TestOverrideProvider.test_has_resource_override_returns_True": "PASSED",
    "TestOverrideProvider.test_resource_isdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_False": "PASSED",
    "TestOverrideProvider.test_resource_isdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_no_overrides": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_None": "PASSED",
    "TestOverrideProvider.test_resource_listdir_override_returns_values": "PASSED",
    "TestPackageOverrides.test_ctor_package_already_has_loader_of_different_type": "PASSED",
    "TestPackageOverrides.test_ctor_package_already_has_loader_of_same_type": "PASSED",
    "TestPackageOverrides.test_ctor_registers_loader_type": "PASSED",
    "TestPackageOverrides.test_ctor_sets_loader": "PASSED",
    "TestPackageOverrides.test_ctor_sets_local_state": "PASSED",
    "TestPackageOverrides.test_get_filename_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_stream": "PASSED",
    "TestPackageOverrides.test_get_stream_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_get_string": "PASSED",
    "TestPackageOverrides.test_get_string_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_has_resource": "PASSED",
    "TestPackageOverrides.test_has_resource_file_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_insert_directory": "PASSED",
    "TestPackageOverrides.test_insert_emptystring": "PASSED",
    "TestPackageOverrides.test_insert_file": "PASSED",
    "TestPackageOverrides.test_isdir_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_isdir_false": "PASSED",
    "TestPackageOverrides.test_isdir_true": "PASSED",
    "TestPackageOverrides.test_listdir": "PASSED",
    "TestPackageOverrides.test_listdir_doesnt_exist": "PASSED",
    "TestPackageOverrides.test_search_path": "PASSED",
    "TestDirectoryOverride.test_it_match": "PASSED",
    "TestDirectoryOverride.test_it_no_match": "PASSED",
    "TestFileOverride.test_it_match": "PASSED",
    "TestFileOverride.test_it_no_match": "PASSED",
    "TestFactoriesMixin.test_set_multiple_request_properties": "PASSED",
    "TestFactoriesMixin.test_set_multiple_request_properties_conflict": "PASSED",
    "TestFactoriesMixin.test_set_request_factory": "PASSED",
    "TestFactoriesMixin.test_set_request_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_request_property_subscriber": "PASSED",
    "TestFactoriesMixin.test_set_request_property_with_callable": "PASSED",
    "TestFactoriesMixin.test_set_request_property_with_property": "PASSED",
    "TestFactoriesMixin.test_set_request_property_with_unnamed_callable": "PASSED",
    "TestFactoriesMixin.test_set_root_factory": "PASSED",
    "TestFactoriesMixin.test_set_root_factory_as_None": "PASSED",
    "TestFactoriesMixin.test_set_root_factory_dottedname": "PASSED",
    "TestFactoriesMixin.test_set_session_factory": "PASSED",
    "TestFactoriesMixin.test_set_session_factory_dottedname": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_missing_dir": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_no_specs": "PASSED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_registers_chameleon_translate": "PASSED",
    "TestI18NConfiguratorMixin.test_set_locale_negotiator": "PASSED",
    "TestI18NConfiguratorMixin.test_set_locale_negotiator_dottedname": "PASSED",
    "ConfiguratorTests.test___getattr__matches": "PASSED",
    "ConfiguratorTests.test___getattr__matches_no_action_wrap": "PASSED",
    "ConfiguratorTests.test___getattr__missing_when_directives_dont_exist": "PASSED",
    "ConfiguratorTests.test___getattr__missing_when_directives_exist": "PASSED",
    "ConfiguratorTests.test__fix_registry_has_listeners": "PASSED",
    "ConfiguratorTests.test__fix_registry_notify": "PASSED",
    "ConfiguratorTests.test__fix_registry_queryAdapterOrSelf": "PASSED",
    "ConfiguratorTests.test__fix_registry_registerSelfAdapter": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_already_absolute": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_notastring": "PASSED",
    "ConfiguratorTests.test_absolute_asset_spec_relative": "PASSED",
    "ConfiguratorTests.test_action_autocommit_with_introspectables": "PASSED",
    "ConfiguratorTests.test_action_autocommit_with_introspectables_introspection_off": "PASSED",
    "ConfiguratorTests.test_action_branching_kw_is_None": "PASSED",
    "ConfiguratorTests.test_action_branching_kw_is_not_None": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_with_config_info": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_with_introspectables": "PASSED",
    "ConfiguratorTests.test_action_branching_nonautocommit_without_config_info": "PASSED",
    "ConfiguratorTests.test_action_nonautocommit_with_introspectables_introspection_off": "PASSED",
    "ConfiguratorTests.test_autocommit_no_conflicts": "PASSED",
    "ConfiguratorTests.test_begin": "PASSED",
    "ConfiguratorTests.test_begin_with_request": "PASSED",
    "ConfiguratorTests.test_commit_conflict_resolved_with_include": "PASSED",
    "ConfiguratorTests.test_commit_conflict_resolved_with_two_includes_and_local": "PASSED",
    "ConfiguratorTests.test_commit_conflict_simple": "PASSED",
    "ConfiguratorTests.test_commit_conflict_with_two_includes": "PASSED",
    "ConfiguratorTests.test_conflict_set_forbidden_view": "PASSED",
    "ConfiguratorTests.test_conflict_set_notfound_view": "PASSED",
    "ConfiguratorTests.test_ctor_alternate_renderers": "PASSED",
    "ConfiguratorTests.test_ctor_authentication_policy": "PASSED",
    "ConfiguratorTests.test_ctor_authorization_policy_only": "PASSED",
    "ConfiguratorTests.test_ctor_default_permission": "PASSED",
    "ConfiguratorTests.test_ctor_default_renderers": "PASSED",
    "ConfiguratorTests.test_ctor_default_view_mapper": "PASSED",
    "ConfiguratorTests.test_ctor_exceptionresponse_view_None": "PASSED",
    "ConfiguratorTests.test_ctor_exceptionresponse_view_custom": "PASSED",
    "ConfiguratorTests.test_ctor_httpexception_view_default": "PASSED",
    "ConfiguratorTests.test_ctor_no_root_factory": "PASSED",
    "ConfiguratorTests.test_ctor_noreg_custom_settings": "PASSED",
    "ConfiguratorTests.test_ctor_noreg_debug_logger_non_None": "PASSED",
    "ConfiguratorTests.test_ctor_session_factory": "PASSED",
    "ConfiguratorTests.test_ctor_with_introspection": "PASSED",
    "ConfiguratorTests.test_ctor_with_package_registry": "PASSED",
    "ConfiguratorTests.test_ctor_with_root_factory": "PASSED",
    "ConfiguratorTests.test_end": "PASSED",
    "ConfiguratorTests.test_hook_zca": "PASSED",
    "ConfiguratorTests.test_include_with_dotted_name": "PASSED",
    "ConfiguratorTests.test_include_with_missing_source_file": "PASSED",
    "ConfiguratorTests.test_include_with_module_defaults_to_includeme": "PASSED",
    "ConfiguratorTests.test_include_with_module_defaults_to_includeme_missing": "PASSED",
    "ConfiguratorTests.test_include_with_nested_route_prefix": "PASSED",
    "ConfiguratorTests.test_include_with_python_callable": "PASSED",
    "ConfiguratorTests.test_include_with_route_prefix": "PASSED",
    "ConfiguratorTests.test_introspector_decorator": "PASSED",
    "ConfiguratorTests.test_make_wsgi_app": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_notstring_success": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_string_fail": "PASSED",
    "ConfiguratorTests.test_maybe_dotted_string_success": "PASSED",
    "ConfiguratorTests.test_scan_integration": "PASSED",
    "ConfiguratorTests.test_scan_integration_dottedname_package": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_extra_kw": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_ignore": "PASSED",
    "ConfiguratorTests.test_scan_integration_with_onerror": "PASSED",
    "ConfiguratorTests.test_setup_registry_alternate_renderers": "PASSED",
    "ConfiguratorTests.test_setup_registry_authentication_policy": "PASSED",
    "ConfiguratorTests.test_setup_registry_authentication_policy_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_authorization_policy_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_authorization_policy_only": "PASSED",
    "ConfiguratorTests.test_setup_registry_calls_fix_registry": "PASSED",
    "ConfiguratorTests.test_setup_registry_custom_settings": "PASSED",
    "ConfiguratorTests.test_setup_registry_debug_logger_name": "PASSED",
    "ConfiguratorTests.test_setup_registry_debug_logger_non_None": "PASSED",
    "ConfiguratorTests.test_setup_registry_default_permission": "PASSED",
    "ConfiguratorTests.test_setup_registry_dottedname_root_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_explicit_notfound_trumps_iexceptionresponse": "PASSED",
    "ConfiguratorTests.test_setup_registry_includes": "PASSED",
    "ConfiguratorTests.test_setup_registry_includes_spaces": "PASSED",
    "ConfiguratorTests.test_setup_registry_locale_negotiator": "PASSED",
    "ConfiguratorTests.test_setup_registry_locale_negotiator_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_no_default_root_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_exceptionresponse_view": "PASSED",
    "ConfiguratorTests.test_setup_registry_registers_default_webob_iresponse_adapter": "PASSED",
    "ConfiguratorTests.test_setup_registry_renderer_globals_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_renderer_globals_factory_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory": "PASSED",
    "ConfiguratorTests.test_setup_registry_request_factory_dottedname": "PASSED",
    "ConfiguratorTests.test_setup_registry_tweens": "PASSED",
    "ConfiguratorTests.test_unhook_zca": "PASSED",
    "ConfiguratorTests.test_with_package": "PASSED",
    "ConfiguratorTests.test_with_package_module": "PASSED",
    "ConfiguratorTests.test_with_package_package": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_for_": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_attr": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_context": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_exception": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_for": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_permission": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_permission_alias": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_renderer": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_add_route_with_view_renderer_alias": "PASSED",
    "TestConfiguratorDeprecatedFeatures.test_conflict_route_with_view": "PASSED",
    "TestConfigurator_add_directive.test_directive_persists_across_configurator_creations": "PASSED",
    "TestConfigurator_add_directive.test_extend_action_method_successful": "PASSED",
    "TestConfigurator_add_directive.test_extend_same_name_doesnt_conflict": "PASSED",
    "TestActionState.test_action_simple": "PASSED",
    "TestActionState.test_action_with_includepath": "PASSED",
    "TestActionState.test_action_with_includepath_and_info": "PASSED",
    "TestActionState.test_action_with_info": "PASSED",
    "TestActionState.test_action_with_introspectables": "PASSED",
    "TestActionState.test_action_with_order": "PASSED",
    "TestActionState.test_execute_actions_dicts": "PASSED",
    "TestActionState.test_execute_actions_error": "PASSED",
    "TestActionState.test_execute_actions_tuples": "PASSED",
    "TestActionState.test_execute_actions_with_introspectable_no_callable": "PASSED",
    "TestActionState.test_execute_actions_with_introspectables": "PASSED",
    "TestActionState.test_it": "PASSED",
    "TestActionState.test_processSpec": "PASSED",
    "Test_resolveConflicts.test_it_conflict": "PASSED",
    "Test_resolveConflicts.test_it_success_dicts": "PASSED",
    "Test_resolveConflicts.test_it_success_tuples": "PASSED",
    "Test_resolveConflicts.test_it_with_actions_grouped_by_order": "PASSED",
    "TestGlobalRegistriesIntegration.test_global_registries": "PASSED",
    "TestGlobalRegistriesIntegration.test_global_registries_empty": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_renderer": "PASSED",
    "TestRenderingConfiguratorMixin.test_add_renderer_dottedname_factory": "PASSED",
    "TestRenderingConfiguratorMixin.test_set_renderer_globals_factory": "PASSED",
    "TestRenderingConfiguratorMixin.test_set_renderer_globals_factory_dottedname": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_defaults": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_discriminator": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_path_no_pattern": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_pattern_with_path": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_attr": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_context": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_permission": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_no_view_with_view_renderer": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_accept": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_custom_predicates": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_factory": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_factory_dottedname": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_header": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_path_info": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_path_info_highorder": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_path_info_regex": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_pregenerator": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_request_method": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_request_param": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_route_prefix": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_static": "PASSED",
    "RoutesConfiguratorMixinTests.test_add_route_with_xhr": "PASSED",
    "RoutesConfiguratorMixinTests.test_get_routes_mapper_already_registered": "PASSED",
    "RoutesConfiguratorMixinTests.test_get_routes_mapper_not_yet_registered": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_no_authz_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_no_authz_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_with_authz_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authentication_policy_with_authz_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_no_authn_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_no_authn_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_with_authn_policy": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_authorization_policy_with_authn_policy_autocommit": "PASSED",
    "ConfiguratorSecurityMethodsTests.test_set_default_permission": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_as_None": "PASSED",
    "TestSettingsConfiguratorMixin.test__set_settings_as_dictwithvalues": "PASSED",
    "TestSettingsConfiguratorMixin.test_add_settings_settings_already_registered": "PASSED",
    "TestSettingsConfiguratorMixin.test_add_settings_settings_not_yet_registered": "PASSED",
    "TestSettingsConfiguratorMixin.test_get_settings_nosettings": "PASSED",
    "TestSettingsConfiguratorMixin.test_get_settings_withsettings": "PASSED",
    "TestSettings.test_debug_all": "PASSED",
    "TestSettings.test_debug_authorization": "PASSED",
    "TestSettings.test_debug_notfound": "PASSED",
    "TestSettings.test_debug_routematch": "PASSED",
    "TestSettings.test_debug_templates": "PASSED",
    "TestSettings.test_default_locale_name": "PASSED",
    "TestSettings.test_getattr_fail": "PASSED",
    "TestSettings.test_getattr_raises_attribute_error": "PASSED",
    "TestSettings.test_getattr_success": "PASSED",
    "TestSettings.test_noargs": "PASSED",
    "TestSettings.test_originals_kept": "PASSED",
    "TestSettings.test_prevent_http_cache": "PASSED",
    "TestSettings.test_reload_all": "PASSED",
    "TestSettings.test_reload_assets": "PASSED",
    "TestSettings.test_reload_resources": "PASSED",
    "TestSettings.test_reload_templates": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer_explicitrenderer": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_renderer_twice": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_defaults": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_dottedname": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_multiple": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_subscriber_single": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_add_template": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_resources": "PASSED",
    "TestingConfiguratorMixinTests.test_testing_securitypolicy": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_dottedname": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_instance": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_name_ingress": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_name_main": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_over_ingress": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_over_ingress_iterable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_under_main": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_under_main_iterable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tween_unsuitable": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_conflict": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_distinct": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_over_nonstringoriter": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_under_nonstringoriter": "PASSED",
    "TestTweensConfiguratorMixin.test_add_tweens_names_with_underover": "PASSED",
    "TestTweens.test___call___explicit": "PASSED",
    "TestTweens.test___call___implicit": "PASSED",
    "TestTweens.test_add_explicit": "PASSED",
    "TestTweens.test_add_implicit": "PASSED",
    "TestTweens.test_implicit_ordering_1": "PASSED",
    "TestTweens.test_implicit_ordering_2": "PASSED",
    "TestTweens.test_implicit_ordering_3": "PASSED",
    "TestTweens.test_implicit_ordering_4": "PASSED",
    "TestTweens.test_implicit_ordering_5": "PASSED",
    "TestTweens.test_implicit_ordering_conflict_direct": "PASSED",
    "TestTweens.test_implicit_ordering_conflict_indirect": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_and_under_partials": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_partial": "PASSED",
    "TestTweens.test_implicit_ordering_missing_over_partial_with_fallback": "PASSED",
    "TestTweens.test_implicit_ordering_missing_under_partial": "PASSED",
    "TestTweens.test_implicit_ordering_missing_under_partial_with_fallback": "PASSED",
    "TestTweens.test_implicit_ordering_with_missing_fallbacks": "PASSED",
    "TestTweens.test_implicit_ordering_with_multiple_matching_fallbacks": "PASSED",
    "TestTweens.test_implicit_ordering_with_partial_fallbacks": "PASSED",
    "TestCyclicDependencyError.test___str__": "PASSED",
    "Test__make_predicates.test_custom_predicates_can_affect_traversal": "PASSED",
    "Test__make_predicates.test_different_custom_predicates_with_same_hash": "PASSED",
    "Test__make_predicates.test_match_param_from_dict": "PASSED",
    "Test__make_predicates.test_match_param_from_dict_fails": "PASSED",
    "Test__make_predicates.test_match_param_from_string": "PASSED",
    "Test__make_predicates.test_match_param_from_string_fails": "PASSED",
    "Test__make_predicates.test_match_param_hashable": "PASSED",
    "Test__make_predicates.test_ordering_importance_and_number": "PASSED",
    "Test__make_predicates.test_ordering_importance_of_predicates": "PASSED",
    "Test__make_predicates.test_ordering_number_of_predicates": "PASSED",
    "Test__make_predicates.test_ordering_xhr_and_request_method_trump_only_containment": "PASSED",
    "Test__make_predicates.test_predicate_text_is_correct": "PASSED",
    "Test__make_predicates.test_request_method_ordering_hashes_same": "PASSED",
    "Test__make_predicates.test_request_method_sequence": "PASSED",
    "Test__make_predicates.test_traverse_has_remainder_already": "PASSED",
    "Test__make_predicates.test_traverse_matches": "PASSED",
    "Test__make_predicates.test_traverse_matches_with_highorder_chars": "PASSED",
    "TestActionInfo.test___str__": "PASSED",
    "TestActionInfo.test_class_conforms": "PASSED",
    "TestActionInfo.test_ctor": "PASSED",
    "TestActionInfo.test_instance_conforms": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_forbidden_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_append_slash": "PASSED",
    "TestViewsConfigurationMixin.test_add_notfound_view_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_absolute": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_here_no_utility_registered": "PASSED",
    "TestViewsConfigurationMixin.test_add_static_view_package_relative": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instance": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instance_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instancemethod": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_instancemethod_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_oldstyle_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_as_oldstyle_class_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_context_trumps_for": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_custom_more_preds_first_bests_fewer_preds_last": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_custom_predicate_bests_standard_predicate": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_default_phash_overrides_default_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_default_phash_overrides_no_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_default_phash_overrides_default_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_default_phash_overrides_no_phash": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_existing_securedview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_multiview_replaces_multiview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_mulview_replaces_existing_view_with___accept__": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_same_phash_overrides_existing_single_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exc_with_accept_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_exception_register_secured_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_for__as_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_for_as_class": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_for_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview___discriminator__": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_call_ordering": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_context_superclass_then_subclass": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_exception_superclass_then_subclass": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_existing_securedview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_existing_view_with___accept__": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_multiview_replaces_multiview": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_register_secured_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_same_phash_overrides_existing_single_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_same_predicates": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_view_callable_None_no_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_view_callable_None_with_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_view_callable_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_accept_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_accept_multiview_replaces_existing_view": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_accept_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_containment_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_containment_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_containment_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_custom_predicates_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_decorator": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_default_permission_no_explicit_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_default_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_function_callable": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_function_callable_requestonly": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_badregex": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_noval_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_noval_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_missing": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_header_val_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_http_cache": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_mapper": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_name_unicode": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_no_default_permission_no_explicit_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_nonexistant_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_badregex": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_match": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_path_info_nomatch": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_permission": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_get_implies_head": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_conflict": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_sequence_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_method_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_noval_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_noval_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_val_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_param_val_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_and_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_as_iface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_request_type_as_noniface": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_route_name": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_route_name_exception": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_config_and_view_defaults_conflicts": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_config_and_view_defaults_doesnt_conflict": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults_viewname_is_dottedname_kwarg": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_view_defaults_viewname_is_dottedname_nonkwarg": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_xhr_false": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_with_xhr_true": "PASSED",
    "TestViewsConfigurationMixin.test_add_view_wrapped_view_is_decorated": "PASSED",
    "TestViewsConfigurationMixin.test_add_views_with_accept_multiview_replaces_existing": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_dottedname": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_function": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_with_default_renderer_no_explicit_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_derive_view_with_default_renderer_with_explicit_renderer": "PASSED",
    "TestViewsConfigurationMixin.test_set_view_mapper": "PASSED",
    "TestViewsConfigurationMixin.test_set_view_mapper_dottedname": "PASSED",
    "Test_requestonly.test_function_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_function_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_function_noargs": "PASSED",
    "Test_requestonly.test_function_onearg_named_request": "PASSED",
    "Test_requestonly.test_function_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_function_toomanyargs": "PASSED",
    "Test_requestonly.test_function_with_attr_false": "PASSED",
    "Test_requestonly.test_function_with_attr_true": "PASSED",
    "Test_requestonly.test_instance_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_instance_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_instance_defaultargs_onearg_named_request": "PASSED",
    "Test_requestonly.test_instance_defaultargs_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_instance_nocall": "PASSED",
    "Test_requestonly.test_instance_toomanyargs": "PASSED",
    "Test_requestonly.test_method_onearg_named_request": "PASSED",
    "Test_requestonly.test_newstyle_class_init_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_newstyle_class_init_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_newstyle_class_init_firstname_request_with_secondname": "PASSED",
    "Test_requestonly.test_newstyle_class_init_noargs": "PASSED",
    "Test_requestonly.test_newstyle_class_init_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_defaultargs_firstname_not_request": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_defaultargs_firstname_request": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_noargs": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_onearg_named_request": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_onearg_named_somethingelse": "PASSED",
    "Test_requestonly.test_oldstyle_class_init_toomanyargs": "PASSED",
    "Test_requestonly.test_oldstyle_class_no_init": "PASSED",
    "Test_requestonly.test_requestonly_newstyle_class_init_onearg_named_request": "PASSED",
    "Test_requestonly.test_requestonly_newstyle_class_init_toomanyargs": "PASSED",
    "Test_requestonly.test_requestonly_newstyle_class_no_init": "PASSED",
    "Test_isexception.test_is_IException": "PASSED",
    "Test_isexception.test_is_IException_subinterface": "PASSED",
    "Test_isexception.test_is_exception_class": "PASSED",
    "Test_isexception.test_is_exception_instance": "PASSED",
    "TestMultiView.test___call__": "PASSED",
    "TestMultiView.test___call__intermediate_not_found": "PASSED",
    "TestMultiView.test___call__raise_not_found_isnt_interpreted_as_pred_mismatch": "PASSED",
    "TestMultiView.test___call_permissive_has_call_permissive": "PASSED",
    "TestMultiView.test___call_permissive_has_no_call_permissive": "PASSED",
    "TestMultiView.test__call__not_found": "PASSED",
    "TestMultiView.test__call__with_accept_match": "PASSED",
    "TestMultiView.test__call__with_accept_miss": "PASSED",
    "TestMultiView.test__call_permissive__not_found": "PASSED",
    "TestMultiView.test_add": "PASSED",
    "TestMultiView.test_add_with_phash": "PASSED",
    "TestMultiView.test_add_with_phash_override_accept": "PASSED",
    "TestMultiView.test_class_implements_ISecuredView": "PASSED",
    "TestMultiView.test_get_views": "PASSED",
    "TestMultiView.test_get_views_best_match_returns_None": "PASSED",
    "TestMultiView.test_get_views_no_self_accepts": "PASSED",
    "TestMultiView.test_get_views_request_has_no_accept": "PASSED",
    "TestMultiView.test_instance_implements_ISecuredView": "PASSED",
    "TestMultiView.test_match_not_found": "PASSED",
    "TestMultiView.test_match_predicate_fails": "PASSED",
    "TestMultiView.test_match_predicate_succeeds": "PASSED",
    "TestMultiView.test_multiple_with_functions_as_views": "PASSED",
    "TestMultiView.test_permitted": "PASSED",
    "TestMultiView.test_permitted_no_match_with__permitted__": "PASSED",
    "TestMultiView.test_permitted_no_views": "PASSED",
    "TestViewDeriver.test_as_function_context_and_request": "PASSED",
    "TestViewDeriver.test_as_function_requestonly": "PASSED",
    "TestViewDeriver.test_as_instance_context_and_request": "PASSED",
    "TestViewDeriver.test_as_instance_context_and_request_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_instance_requestonly": "PASSED",
    "TestViewDeriver.test_as_instance_requestonly_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_context_and_request": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_context_and_request_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_requestonly": "PASSED",
    "TestViewDeriver.test_as_newstyle_class_requestonly_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_oldstyle_class_context_and_request": "PASSED",
    "TestViewDeriver.test_as_oldstyle_class_requestonly": "PASSED",
    "TestViewDeriver.test_as_oldstyle_cls_context_request_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_as_oldstyle_cls_requestonly_attr_and_renderer": "PASSED",
    "TestViewDeriver.test_attr_wrapped_view_branching_default_phash": "PASSED",
    "TestViewDeriver.test_attr_wrapped_view_branching_nondefault_phash": "PASSED",
    "TestViewDeriver.test_class_with_attr": "PASSED",
    "TestViewDeriver.test_class_without_attr": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_denied": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_denied2": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_overridden": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_permitted": "PASSED",
    "TestViewDeriver.test_debug_auth_permission_authpol_permitted_no_request": "PASSED",
    "TestViewDeriver.test_http_cached_prevent_http_cache_in_settings": "PASSED",
    "TestViewDeriver.test_http_cached_view_bad_tuple": "PASSED",
    "TestViewDeriver.test_http_cached_view_integer": "PASSED",
    "TestViewDeriver.test_http_cached_view_prevent_auto_set": "PASSED",
    "TestViewDeriver.test_http_cached_view_timedelta": "PASSED",
    "TestViewDeriver.test_http_cached_view_tuple": "PASSED",
    "TestViewDeriver.test_http_cached_view_tuple_seconds_None": "PASSED",
    "TestViewDeriver.test_predicate_mismatch_view_has_name": "PASSED",
    "TestViewDeriver.test_predicate_mismatch_view_has_no_name": "PASSED",
    "TestViewDeriver.test_requestonly_function": "PASSED",
    "TestViewDeriver.test_requestonly_function_with_renderer": "PASSED",
    "TestViewDeriver.test_requestonly_function_with_renderer_request_has_view": "PASSED",
    "TestViewDeriver.test_requestonly_function_with_renderer_request_override": "PASSED",
    "TestViewDeriver.test_secured_view_authn_policy_no_authz_policy": "PASSED",
    "TestViewDeriver.test_secured_view_authz_policy_no_authn_policy": "PASSED",
    "TestViewDeriver.test_secured_view_raises_forbidden_no_name": "PASSED",
    "TestViewDeriver.test_secured_view_raises_forbidden_with_name": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_authn_policy_no_authz_policy": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_authz_policy_no_authn_policy": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_no_authpol": "PASSED",
    "TestViewDeriver.test_with_debug_authorization_no_permission": "PASSED",
    "TestViewDeriver.test_with_predicates_all": "PASSED",
    "TestViewDeriver.test_with_predicates_checker": "PASSED",
    "TestViewDeriver.test_with_predicates_notall": "PASSED",
    "TestViewDeriver.test_with_view_mapper_config_specified": "PASSED",
    "TestViewDeriver.test_with_view_mapper_default_mapper_specified": "PASSED",
    "TestViewDeriver.test_with_view_mapper_view_specified": "PASSED",
    "TestViewDeriver.test_with_wrapper_viewname": "PASSED",
    "TestViewDeriver.test_with_wrapper_viewname_notfound": "PASSED",
    "TestDefaultViewMapper.test__view_as_function_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_function_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_context_and_request_and_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_instance_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_context_and_request_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_newstyle_class_requestonly_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_context_and_request": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_context_and_request_with_attr": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_requestonly": "PASSED",
    "TestDefaultViewMapper.test_view_as_oldstyle_class_requestonly_with_attr": "PASSED",
    "Test_preserve_view_attrs.test_it_different": "PASSED",
    "Test_preserve_view_attrs.test_it_different_with_existing_original_view": "PASSED",
    "Test_preserve_view_attrs.test_it_same": "PASSED",
    "Test_preserve_view_attrs.test_it_view_is_None": "PASSED",
    "TestStaticURLInfo.test_add_already_exists": "PASSED",
    "TestStaticURLInfo.test_add_url_noendslash": "PASSED",
    "TestStaticURLInfo.test_add_url_withendslash": "PASSED",
    "TestStaticURLInfo.test_add_viewname": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_for_": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_permission": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_renderer": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_route_prefix": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_attr": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_context": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_for": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_permission": "PASSED",
    "TestStaticURLInfo.test_add_viewname_with_view_renderer": "PASSED",
    "TestStaticURLInfo.test_generate_missing": "PASSED",
    "TestStaticURLInfo.test_generate_quoting": "PASSED",
    "TestStaticURLInfo.test_generate_registration_miss": "PASSED",
    "TestStaticURLInfo.test_generate_registration_no_registry_on_request": "PASSED",
    "TestStaticURLInfo.test_generate_route_url": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name1": "PASSED",
    "TestStaticURLInfo.test_generate_slash_in_name2": "PASSED",
    "TestStaticURLInfo.test_generate_url_quoted_remote": "PASSED",
    "TestStaticURLInfo.test_generate_url_unquoted_local": "PASSED",
    "TestStaticURLInfo.test_verifyClass": "PASSED",
    "TestStaticURLInfo.test_verifyObject": "PASSED",
    "Test_view_description.test_with_text": "PASSED",
    "Test_logging_file_config.test_it": "PASSED",
    "TestPCreateCommand.test_known_scaffold_absolute_path": "PASSED",
    "TestPCreateCommand.test_known_scaffold_multiple_rendered": "PASSED",
    "TestPCreateCommand.test_known_scaffold_single_rendered": "PASSED",
    "TestPCreateCommand.test_no_project_name": "PASSED",
    "TestPCreateCommand.test_run_no_scaffold_name": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_exist": "PASSED",
    "TestPCreateCommand.test_run_show_scaffolds_none_exist": "PASSED",
    "TestPCreateCommand.test_unknown_scaffold_name": "PASSED",
    "Test_main.test_it": "PASSED",
    "TestPRequestCommand.test_command_has_bad_config_header": "PASSED",
    "TestPRequestCommand.test_command_not_enough_args": "PASSED",
    "TestPRequestCommand.test_command_response_has_no_charset": "PASSED",
    "TestPRoutesCommand.test__get_mapper": "PASSED",
    "TestPRoutesCommand.test_no_mapper": "PASSED",
    "TestPRoutesCommand.test_no_routes": "PASSED",
    "TestPRoutesCommand.test_route_with_no_slash_prefix": "PASSED",
    "TestPRoutesCommand.test_single_route_no_route_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_no_views_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered": "PASSED",
    "TestPRoutesCommand.test_single_route_one_view_registered_with_factory": "PASSED",
    "TestPServeCommand.test_parse_vars_bad": "PASSED",
    "TestPServeCommand.test_parse_vars_good": "PASSED",
    "TestPServeCommand.test_record_pid_not_verbose": "PASSED",
    "TestPServeCommand.test_record_pid_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_current_pid_is_not_pid_in_file": "PASSED",
    "TestPServeCommand.test_remove_pid_current_pid_is_not_written_pid": "PASSED",
    "TestPServeCommand.test_remove_pid_file_not_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_file_stale_pid_write_exception": "PASSED",
    "TestPServeCommand.test_remove_pid_file_unlink_exception": "PASSED",
    "TestPServeCommand.test_remove_pid_file_verbose": "PASSED",
    "TestPServeCommand.test_remove_pid_no_pid_file": "PASSED",
    "TestPServeCommand.test_remove_pid_not_a_number": "PASSED",
    "TestPServeCommand.test_run_no_args": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_bad_pid_file": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_invalid_pid_in_file": "PASSED",
    "TestPServeCommand.test_run_stop_daemon_no_such_pid_file": "PASSED",
    "Test_read_pidfile.test_read_pidfile": "PASSED",
    "Test_read_pidfile.test_read_pidfile_no_pid_file": "PASSED",
    "Test_read_pidfile.test_read_pidfile_not_a_number": "PASSED",
    "TestLazyWriter.test_flush": "PASSED",
    "TestLazyWriter.test_open": "PASSED",
    "TestLazyWriter.test_write": "PASSED",
    "TestLazyWriter.test_writeline": "PASSED",
    "Test__methodwrapper.test___call__fail": "PASSED",
    "Test__methodwrapper.test___call__succeed": "PASSED",
    "TestPShellCommand.test_command_custom_section_override": "PASSED",
    "TestPShellCommand.test_command_loads_bpython_shell": "PASSED",
    "TestPShellCommand.test_command_loads_check_variable_override_order": "PASSED",
    "TestPShellCommand.test_command_loads_custom_items": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell": "PASSED",
    "TestPShellCommand.test_command_loads_default_shell_with_unknown_shell": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v0_10": "PASSED",
    "TestPShellCommand.test_command_loads_ipython_v0_11": "PASSED",
    "TestPShellCommand.test_command_loads_setup_from_options": "PASSED",
    "TestPShellCommand.test_command_setup": "PASSED",
    "TestPShellCommand.test_make_bpython_shell": "PASSED",
    "TestPShellCommand.test_make_default_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v0_10_shell": "PASSED",
    "TestPShellCommand.test_make_ipython_v0_11_shell": "PASSED",
    "TestPShellCommand.test_shell_ipython_ordering": "PASSED",
    "TestPShellCommand.test_shell_ordering": "PASSED",
    "TestPTweensCommand.test__get_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_and_explicit_tweens": "PASSED",
    "TestPTweensCommand.test_command_implicit_tweens_only": "PASSED",
    "TestPTweensCommand.test_command_no_tweens": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_all_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_none_match": "PASSED",
    "TestPViewsCommand.test__find_multi_routes_some_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match": "PASSED",
    "TestPViewsCommand.test__find_view_no_match_multiview_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_route_multiview_no_view_registered": "PASSED",
    "TestPViewsCommand.test__find_view_route_no_multiview": "PASSED",
    "TestPViewsCommand.test__find_view_traversal": "PASSED",
    "TestPViewsCommand.test__find_view_traversal_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multi_view_nested": "PASSED",
    "TestPViewsCommand.test_views_command_multiview": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_multiview_with_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_not_found": "PASSED",
    "TestPViewsCommand.test_views_command_not_found_url_starts_without_slash": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_route_with_route_predicates": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_permission": "PASSED",
    "TestPViewsCommand.test_views_command_single_view_traversal_with_predicates": "PASSED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_dotted_names": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_resource_url_adapter_introspectables": "FAILED",
    "AdaptersConfiguratorMixinTests.test_add_traverser_dotted_names": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_no_overrides": "FAILED",
    "TestOverrideProvider.test_get_resource_filename_override_returns_None": "FAILED",
    "TestPackageOverrides.test_get_filename": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_abspath": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_asset_spec_existing_translation_dirs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs": "FAILED",
    "TestI18NConfiguratorMixin.test_add_translation_dirs_multiple_specs_multiple_calls": "FAILED",
    "ConfiguratorTests.test_ctor_no_registry": "FAILED",
    "ConfiguratorTests.test_ctor_noreg_debug_logger_None_default": "FAILED",
    "ConfiguratorTests.test_scan_integration_conflict": "FAILED",
    "ConfiguratorTests.test_setup_registry_debug_logger_None_default": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_dotted_name": "FAILED",
    "TestConfigurator_add_directive.test_extend_with_python_callable": "FAILED",
    "TestViewsConfigurationMixin.test_add_static_view_package_here_relative": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_template_renderer": "FAILED",
    "TestViewsConfigurationMixin.test_add_view_with_template_renderer_no_callable": "FAILED",
    "TestViewDeriver.test_function_returns_non_adaptable": "FAILED",
    "TestViewDeriver.test_function_returns_non_adaptable_dict": "FAILED",
    "TestViewDeriver.test_instance_returns_non_adaptable": "FAILED",
    "TestViewDeriver.test_requestonly_default_method_returns_non_adaptable": "FAILED",
    "TestViewDeriver.test_requestonly_nondefault_method_returns_non_adaptable": "FAILED",
    "Test_view_description.test_without_text": "FAILED",
    "TestPRequestCommand.test_command_display_headers": "FAILED",
    "TestPRequestCommand.test_command_has_content_type_header_var": "FAILED",
    "TestPRequestCommand.test_command_has_good_header_var": "FAILED",
    "TestPRequestCommand.test_command_has_multiple_header_vars": "FAILED",
    "TestPRequestCommand.test_command_method_get": "FAILED",
    "TestPRequestCommand.test_command_method_post": "FAILED",
    "TestPRequestCommand.test_command_path_doesnt_start_with_slash": "FAILED",
    "TestPRequestCommand.test_command_two_args": "FAILED",
    "TestPRequestCommand.test_command_with_query_string": "FAILED",
    "TestPViewsCommand.test_views_command_single_view_function_traversal": "FAILED"
}
diff --git a/pyramid/urldispatch.py b/pyramid/urldispatch.py
index cccff14ba..4182ea665 100644
--- a/pyramid/urldispatch.py
+++ b/pyramid/urldispatch.py
@@ -148,7 +148,9 @@ def _compile_route(route):
         name = pat.pop() # unicode
         name = name[1:-1]
         if ':' in name:
-            name, reg = name.split(':')
+            # reg may contain colons as well,
+            # so we must strictly split name into two parts
+            name, reg = name.split(':', 1)
         else:
             reg = '[^/]+'
         gen.append('%%(%s)s' % native_(name)) # native
 

{"pyramid/urldispatch.py": "import re\nfrom zope.interface import implementer\n\nfrom pyramid.interfaces import (\n    IRoutesMapper,\n    IRoute,\n    )\n\nfrom pyramid.compat import (\n    PY3,\n    native_,\n    text_,\n    text_type,\n    string_types,\n    binary_type,\n    is_nonstr_iter,\n    decode_path_info,\n    )\n\nfrom pyramid.exceptions import URLDecodeError\n\nfrom pyramid.traversal import (\n    quote_path_segment,\n    split_path_info,\n    )\n\n_marker = object()\n\n@implementer(IRoute)\nclass Route(object):\n    def __init__(self, name, pattern, factory=None, predicates=(),\n                 pregenerator=None):\n        self.pattern = pattern\n        self.path = pattern # indefinite b/w compat, not in interface\n        self.match, self.generate = _compile_route(pattern)\n        self.name = name\n        self.factory = factory\n        self.predicates = predicates\n        self.pregenerator = pregenerator\n\n@implementer(IRoutesMapper)\nclass RoutesMapper(object):\n    def __init__(self):\n        self.routelist = []\n        self.routes = {}\n\n    def has_routes(self):\n        return bool(self.routelist)\n\n    def get_routes(self):\n        return self.routelist\n\n    def get_route(self, name):\n        return self.routes.get(name)\n\n    def connect(self, name, pattern, factory=None, predicates=(),\n                pregenerator=None, static=False):\n        if name in self.routes:\n            oldroute = self.routes[name]\n            if oldroute in self.routelist:\n                self.routelist.remove(oldroute)\n        route = Route(name, pattern, factory, predicates, pregenerator)\n        if not static:\n            self.routelist.append(route)\n        self.routes[name] = route\n        return route\n\n    def generate(self, name, kw):\n        return self.routes[name].generate(kw)\n\n    def __call__(self, request):\n        environ = request.environ\n        try:\n            # empty if mounted under a path in mod_wsgi, for example\n            path = decode_path_info(environ['PATH_INFO'] or '/')\n        except KeyError:\n            path = '/'\n        except UnicodeDecodeError as e:\n            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)\n\n        for route in self.routelist:\n            match = route.match(path)\n            if match is not None:\n                preds = route.predicates\n                info = {'match':match, 'route':route}\n                if preds and not all((p(info, request) for p in preds)):\n                    continue\n                return info\n\n        return {'route':None, 'match':None}\n\n# stolen from bobo and modified\nold_route_re = re.compile(r'(\\:[_a-zA-Z]\\w*)')\nstar_at_end = re.compile(r'\\*\\w*$')\n\n# The tortuous nature of the regex named ``route_re`` below is due to the\n# fact that we need to support at least one level of \"inner\" squigglies\n# inside the expr of a {name:expr} pattern.  This regex used to be just\n# (\\{[a-zA-Z][^\\}]*\\}) but that choked when supplied with e.g. {foo:\\d{4}}.\nroute_re = re.compile(r'(\\{[_a-zA-Z][^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\})')\n\ndef update_pattern(matchobj):\n    name = matchobj.group(0)\n    return '{%s}' % name[1:]\n\ndef _compile_route(route):\n    # This function really wants to consume Unicode patterns natively, but if\n    # someone passes us a bytestring, we allow it by converting it to Unicode\n    # using the ASCII decoding.  We decode it using ASCII because we don't\n    # want to accept bytestrings with high-order characters in them here as\n    # we have no idea what the encoding represents.\n    if route.__class__ is not text_type:\n        try:\n            route = text_(route, 'ascii')\n        except UnicodeDecodeError:\n            raise ValueError(\n                'The pattern value passed to add_route must be '\n                'either a Unicode string or a plain string without '\n                'any non-ASCII characters (you provided %r).' % route)\n\n    if old_route_re.search(route) and not route_re.search(route):\n        route = old_route_re.sub(update_pattern, route)\n\n    if not route.startswith('/'):\n        route = '/' + route\n\n    remainder = None\n    if star_at_end.search(route):\n        route, remainder = route.rsplit('*', 1)\n\n    pat = route_re.split(route)\n\n    # every element in \"pat\" will be Unicode (regardless of whether the\n    # route_re regex pattern is itself Unicode or str)\n    pat.reverse()\n    rpat = []\n    gen = []\n    prefix = pat.pop() # invar: always at least one element (route='/'+route)\n\n    # We want to generate URL-encoded URLs, so we url-quote the prefix, being\n    # careful not to quote any embedded slashes.  We have to replace '%' with\n    # '%%' afterwards, as the strings that go into \"gen\" are used as string\n    # replacement targets.\n    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native\n    rpat.append(re.escape(prefix)) # unicode\n\n    while pat:\n        name = pat.pop() # unicode\n        name = name[1:-1]\n        if ':' in name:\n            name, reg = name.split(':')\n        else:\n            reg = '[^/]+'\n        gen.append('%%(%s)s' % native_(name)) # native\n        name = '(?P<%s>%s)' % (name, reg) # unicode\n        rpat.append(name)\n        s = pat.pop() # unicode\n        if s:\n            rpat.append(re.escape(s)) # unicode\n            # We want to generate URL-encoded URLs, so we url-quote this\n            # literal in the pattern, being careful not to quote the embedded\n            # slashes.  We have to replace '%' with '%%' afterwards, as the\n            # strings that go into \"gen\" are used as string replacement\n            # targets.  What is appended to gen is a native string.\n            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))\n\n    if remainder:\n        rpat.append('(?P<%s>.*?)' % remainder) # unicode\n        gen.append('%%(%s)s' % native_(remainder)) # native\n\n    pattern = ''.join(rpat) + '$' # unicode\n\n    match = re.compile(pattern).match\n    def matcher(path):\n        # This function really wants to consume Unicode patterns natively,\n        # but if someone passes us a bytestring, we allow it by converting it\n        # to Unicode using the ASCII decoding.  We decode it using ASCII\n        # because we don't want to accept bytestrings with high-order\n        # characters in them here as we have no idea what the encoding\n        # represents.\n        if path.__class__ is not text_type:\n            path = text_(path, 'ascii')\n        m = match(path)\n        if m is None:\n            return None\n        d = {}\n        for k, v in m.groupdict().items():\n            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode\n            # kwargs as **kw, so we explicitly cast the keys to native\n            # strings in case someone wants to pass the result as **kw\n            nk = native_(k, 'ascii')\n            if k == remainder:\n                d[nk] = split_path_info(v)\n            else:\n                d[nk] = v\n        return d\n\n    gen = ''.join(gen)\n    def generator(dict):\n        newdict = {}\n        for k, v in dict.items():\n            if PY3: # pragma: no cover\n                if v.__class__ is binary_type:\n                    # url_quote below needs a native string, not bytes on Py3\n                    v = v.decode('utf-8')\n            else:\n                if v.__class__ is text_type:\n                    # url_quote below needs bytes, not unicode on Py2\n                    v = v.encode('utf-8')\n\n            if k == remainder:\n                # a stararg argument\n                if is_nonstr_iter(v):\n                    v = '/'.join([quote_path_segment(x) for x in v]) # native\n                else:\n                    if v.__class__ not in string_types:\n                        v = str(v)\n                    v = quote_path_segment(v, safe='/')\n            else:\n                if v.__class__ not in string_types:\n                    v = str(v)\n                # v may be bytes (py2) or native string (py3)\n                v = quote_path_segment(v)\n\n            # at this point, the value will be a native string\n            newdict[k] = v\n\n        result = gen % newdict # native string result\n        return result\n\n    return matcher, generator\n"}
A user will ask you to solve a task. You should first draft your thinking process (inner monologue). Then, generate the solution.

Your response format must follow the template below:
<think>
Your thoughts or/and draft, like working through an exercise on scratch paper. Be as casual and as long as you want until you are confident to generate a correct solution.
</think>
<solution>
Final solution presented to the user.
</solution>
system
We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[ISSUE]

**Title:** Error When Route Patterns Include Regex with Colons

**Description:**
When defining a route with replacement markers that contain regex patterns with colons, compiling the route results in a `ValueError`. This occurs because the route compiler incorrectly splits the replacement marker on every colon, leading to too many values to unpack.

**Example Code:**
```python
from pyramid.urldispatch import _compile_route

pattern = 'foo/{baz}/biz/{buz:(?:[^/\.]+)}.{bar}'
matcher, generator = _compile_route(pattern)
```

**Expected Behavior:**
The route should compile successfully, correctly handling regex patterns that include colons within the replacement markers.

**Actual Behavior:**
A `ValueError` is raised with the message "too many values to unpack (expected 2)" because the split operation does not limit the number of splits, causing it to fail when regex contains additional colons.

[/ISSUE]
--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.

--- BEGIN FILE ---
```
### pyramid/urldispatch.py
import re
from zope.interface import implementer

from pyramid.interfaces import (
    IRoutesMapper,
    IRoute,
    )

from pyramid.compat import (
    PY3,
    native_,
    text_,
    text_type,
    string_types,
    binary_type,
    is_nonstr_iter,
    decode_path_info,
    )

from pyramid.exceptions import URLDecodeError

from pyramid.traversal import (
    quote_path_segment,
    split_path_info,
    )

_marker = object()

@implementer(IRoute)
class Route(object):
    def __init__(self, name, pattern, factory=None, predicates=(),
                 pregenerator=None):
        self.pattern = pattern
        self.path = pattern # indefinite b/w compat, not in interface
        self.match, self.generate = _compile_route(pattern)
        self.name = name
        self.factory = factory
        self.predicates = predicates
        self.pregenerator = pregenerator

@implementer(IRoutesMapper)
class RoutesMapper(object):
    def __init__(self):
        self.routelist = []
        self.routes = {}

    def has_routes(self):
        return bool(self.routelist)

    def get_routes(self):
        return self.routelist

    def get_route(self, name):
        return self.routes.get(name)

    def connect(self, name, pattern, factory=None, predicates=(),
                pregenerator=None, static=False):
        if name in self.routes:
            oldroute = self.routes[name]
            if oldroute in self.routelist:
                self.routelist.remove(oldroute)
        route = Route(name, pattern, factory, predicates, pregenerator)
        if not static:
            self.routelist.append(route)
        self.routes[name] = route
        return route

    def generate(self, name, kw):
        return self.routes[name].generate(kw)

    def __call__(self, request):
        environ = request.environ
        try:
            # empty if mounted under a path in mod_wsgi, for example
            path = decode_path_info(environ['PATH_INFO'] or '/')
        except KeyError:
            path = '/'
        except UnicodeDecodeError as e:
            raise URLDecodeError(e.encoding, e.object, e.start, e.end, e.reason)

        for route in self.routelist:
            match = route.match(path)
            if match is not None:
                preds = route.predicates
                info = {'match':match, 'route':route}
                if preds and not all((p(info, request) for p in preds)):
                    continue
                return info

        return {'route':None, 'match':None}

# stolen from bobo and modified
old_route_re = re.compile(r'(\:[_a-zA-Z]\w*)')
star_at_end = re.compile(r'\*\w*$')

# The tortuous nature of the regex named ``route_re`` below is due to the
# fact that we need to support at least one level of "inner" squigglies
# inside the expr of a {name:expr} pattern.  This regex used to be just
# (\{[a-zA-Z][^\}]*\}) but that choked when supplied with e.g. {foo:\d{4}}.
route_re = re.compile(r'(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})')

def update_pattern(matchobj):
    name = matchobj.group(0)
    return '{%s}' % name[1:]

def _compile_route(route):
    # This function really wants to consume Unicode patterns natively, but if
    # someone passes us a bytestring, we allow it by converting it to Unicode
    # using the ASCII decoding.  We decode it using ASCII because we don't
    # want to accept bytestrings with high-order characters in them here as
    # we have no idea what the encoding represents.
    if route.__class__ is not text_type:
        try:
            route = text_(route, 'ascii')
        except UnicodeDecodeError:
            raise ValueError(
                'The pattern value passed to add_route must be '
                'either a Unicode string or a plain string without '
                'any non-ASCII characters (you provided %r).' % route)

    if old_route_re.search(route) and not route_re.search(route):
        route = old_route_re.sub(update_pattern, route)

    if not route.startswith('/'):
        route = '/' + route

    remainder = None
    if star_at_end.search(route):
        route, remainder = route.rsplit('*', 1)

    pat = route_re.split(route)

    # every element in "pat" will be Unicode (regardless of whether the
    # route_re regex pattern is itself Unicode or str)
    pat.reverse()
    rpat = []
    gen = []
    prefix = pat.pop() # invar: always at least one element (route='/'+route)

    # We want to generate URL-encoded URLs, so we url-quote the prefix, being
    # careful not to quote any embedded slashes.  We have to replace '%' with
    # '%%' afterwards, as the strings that go into "gen" are used as string
    # replacement targets.
    gen.append(quote_path_segment(prefix, safe='/').replace('%', '%%')) # native
    rpat.append(re.escape(prefix)) # unicode

    while pat:
        name = pat.pop() # unicode
        name = name[1:-1]
        if ':' in name:
            name, reg = name.split(':')
        else:
            reg = '[^/]+'
        gen.append('%%(%s)s' % native_(name)) # native
        name = '(?P<%s>%s)' % (name, reg) # unicode
        rpat.append(name)
        s = pat.pop() # unicode
        if s:
            rpat.append(re.escape(s)) # unicode
            # We want to generate URL-encoded URLs, so we url-quote this
            # literal in the pattern, being careful not to quote the embedded
            # slashes.  We have to replace '%' with '%%' afterwards, as the
            # strings that go into "gen" are used as string replacement
            # targets.  What is appended to gen is a native string.
            gen.append(quote_path_segment(s, safe='/').replace('%', '%%'))

    if remainder:
        rpat.append('(?P<%s>.*?)' % remainder) # unicode
        gen.append('%%(%s)s' % native_(remainder)) # native

    pattern = ''.join(rpat) + '$' # unicode

    match = re.compile(pattern).match
    def matcher(path):
        # This function really wants to consume Unicode patterns natively,
        # but if someone passes us a bytestring, we allow it by converting it
        # to Unicode using the ASCII decoding.  We decode it using ASCII
        # because we don't want to accept bytestrings with high-order
        # characters in them here as we have no idea what the encoding
        # represents.
        if path.__class__ is not text_type:
            path = text_(path, 'ascii')
        m = match(path)
        if m is None:
            return None
        d = {}
        for k, v in m.groupdict().items():
            # k and v will be Unicode 2.6.4 and lower doesnt accept unicode
            # kwargs as **kw, so we explicitly cast the keys to native
            # strings in case someone wants to pass the result as **kw
            nk = native_(k, 'ascii')
            if k == remainder:
                d[nk] = split_path_info(v)
            else:
                d[nk] = v
        return d

    gen = ''.join(gen)
    def generator(dict):
        newdict = {}
        for k, v in dict.items():
            if PY3: # pragma: no cover
                if v.__class__ is binary_type:
                    # url_quote below needs a native string, not bytes on Py3
                    v = v.decode('utf-8')
            else:
                if v.__class__ is text_type:
                    # url_quote below needs bytes, not unicode on Py2
                    v = v.encode('utf-8')

            if k == remainder:
                # a stararg argument
                if is_nonstr_iter(v):
                    v = '/'.join([quote_path_segment(x) for x in v]) # native
                else:
                    if v.__class__ not in string_types:
                        v = str(v)
                    v = quote_path_segment(v, safe='/')
            else:
                if v.__class__ not in string_types:
                    v = str(v)
                # v may be bytes (py2) or native string (py3)
                v = quote_path_segment(v)

            # at this point, the value will be a native string
            newdict[k] = v

        result = gen % newdict # native string result
        return result

    return matcher, generator

```
--- END FILE ---

Please first localize the bug based on the issue statement, and then generate *SEARCH/REPLACE* edits to fix the issue.

Every *SEARCH/REPLACE* edit must use this format:
1. The file path
2. The start of search block: <<<<<<< SEARCH
3. A contiguous chunk of lines to search for in the existing source code
4. The dividing line: =======
5. The lines to replace into the source code
6. The end of the replace block: >>>>>>> REPLACE

Here is an example:

```python
### mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```
</solution>

Please note that the *SEARCH/REPLACE* edit REQUIRES PROPER INDENTATION. If you would like to add the line '        print(x)', you must fully write that out, with all those spaces before the code!
Wrap each *SEARCH/REPLACE* edit in a code block as shown in the example above. If you have multiple *SEARCH/REPLACE* edits, use a separate code block for each one.
user